PDA

Vollständige Version anzeigen : Formel ist rot


Vrille78
04.07.2015, 08:46
Hallo zusammen,

bin in VBA (noch) nicht fit und brauche ein bisschen Hilfe.
Bei der ersten Formel bricht das aufgezeichnete Makro ab, aber ich verstehe nicht, was es genau zu bedeuten hat, wenn die Meldung "Fehler beim Kompilieren; Syntaxfehler" auftaucht.
Nicht allzu sehr auf die Lego-Formel achten ;o) Bei der zweiten Formel wird er wahrscheinlich auch abbrechen (hoffe nicht; vielleicht wegen Länge???).

Danke sehr und Gruss,
Vrille

Sub Lips1()
'
' Lips1 Makro
'

'
Columns("A:A").Select
Selection.Insert Shift:=xlToRight
Range("A2").Select
ActiveCell.FormulaR1C1 = _
"=+IF(LEFT(RC[3],2)=""EL"",""label1.lbl"",IF(AND(LEFT(RC[3],2)=""ES"",MID(RC[3],5,1)=""1"",MID(RC[3],3,1)<>""0"",MID(RC[3],3,1)<>""2"",MID(RC[3],3,1)<>""3"",MID(RC[3],3,1)<>""4"",MID(RC[3],3,1)<>""5"",MID(RC[3],3,1)<>""6"",MID(RC[3],3,1)<>""7"",MID(RC[3],3,1)<>""8"",MID(RC[3],3,1)<>""9"",MID(RC[3],3,1)<>""1""),""label2.lbl"",IF(LEFT(RC[3],2)=""KC"",""label6.lbl"",IF("& _
"3],2)=""PU"",""label7.lbl"",IF(LEFT(RC[3],2)=""JP"",""label8.lbl"",IF(AND(LEFT(RC[3],2)=""ES"",MID(RC[3],5,1)=""0"",MID(RC[3],3,1)<>""0"",MID(RC[3],3,1)<>""2"",MID(RC[3],3,1)<>""3"",MID(RC[3],3,1)<>""4"",MID(RC[3],3,1)<>""5"",MID(RC[3],3,1)<>""6"",MID(RC[3],3,1)<>""7"",MID(RC[3],3,1)<>""8"",MID(RC[3],3,1)<>""9"",MID(RC[3],3,1)<>""1""),""label18.lbl"",""label3.lbl"")"& _
"nge("A3").Sele
Range("C2").Select
ActiveCell.FormulaR1C1 = _
"=+IF(RC[-2]=""label1.lbl"",""TSC TA300-1"",IF(RC[-2]=""label2.lbl"",""BI-MA-WA08-PTRX"",IF(RC[-2]=""label6.lbl"",""TSC TA300-5"",IF(RC[-2]=""label7.lbl"",""TSC TA300"",IF(RC[-2]=""label8.lbl"",""TSC TA300-4"",IF(RC[-2]=""label18.lbl"",""TSC TA300-8"",""TSC TA300-8""))))))"
Columns("B:B").Select
Selection.Cut
Range("I1").Select
ActiveSheet.Paste
Columns("E:E").Select
Selection.Insert Shift:=xlToRight
Columns("H:H").Select
Selection.Copy
Range("B1").Select
ActiveSheet.Paste
Columns("H:H").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlToLeft
Columns("H:H").Select
Selection.Insert Shift:=xlToRight
Selection.Insert Shift:=xlToRight
Selection.Insert Shift:=xlToRight
Selection.Insert Shift:=xlToRight
Selection.Insert Shift:=xlToRight
Selection.Insert Shift:=xlToRight
Range("M2").Select
ActiveCell.FormulaR1C1 = "=+RC[1]/RC[-11]"
Range("M2").Select
Selection.Style = "Comma"
Range("P2").Select
ActiveCell.FormulaR1C1 = "=+IF(RC[-1]<>R[-1]C[-1],""NEU"","""")"
Range("P3").Select
End Sub

RPP63neu
04.07.2015, 08:58
Hallo!
Vielleicht hilft es ja bereits, das .Sele vom Ende der Formel zu entfernen?
Kann aber auch an der Länge der Formel liegen.
Bevor ich hier zu übersetzen anfange, kannst Du ja mal eine Beispieldatei mit der Formel posten.
Denkbar, dass es erheblich kürzer geht.

Gruß Ralf

Beverly
04.07.2015, 09:02
Hi,

ohne auf die Formel an sich einzugehen: also die letzte Zeile des rot markierten Teils solltest du schon mal löschen, da sie unvollständig ist. Dazu natürlich auch den Zeilenumbruch am Ende der vorhergehenden Codezeile - dann wird zumindest kein Syntaxfehler mehr angezeigt.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

Vrille78
05.07.2015, 21:02
Bevor ich an den Zeilen weitermache, mal ein anderer Ansatz:

Gibt es in Excel irgend inen Platzhalter in Formeln stellvertretend für eine Zahl oder einen Buchstaben?
Bsp:

+wenn(a1<>"Platzhalter für eine beliebige Zahl oder Ziffer";"ok";"nicht ok")

Das würde mein VBA Problem sicher lösen, da dann die Formel um mehr als die Hälfte zusammenschrumpft.

Danke und achönen Wochenbeginn,
Vrille

Beverly
06.07.2015, 07:11
Hi,

meinst du damit vielleicht so etwas wie: UND(CODE(A1)>47;CODE(A1)<58)?
Es wäre sicher auch gut, wenn du die Formel mal direkt posten würdest.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

Vrille78
06.07.2015, 09:49
Hallo Karin,
es handelt sich weiterhin um die tolle rote Formel oben.

Der grösste Teil davon sagt folgendes aus:
wenn an der fünften Stelle keine Ziffer von 0-9 steht, dann ist das Ergebnis "label2.lbl".

Und da eben die Frage, ob ich das nicht allgemein ohne 10 Wahrheitswerte ausdrücken kann, in dem gesagt wird, wenn du keine Ziffer bist, dann sei "label2.lbl". Das gleiche Formelmassaker ist auch noch ein paar Zeilen weiter unten genauso. Ist einfach zu aufwendig.

Danke und Gruss,

Vrille


IF(AND(LEFT(RC[3],2)=""ES"",MID(RC[3],5,1)=""1"",MID(RC[3],3,1)<>""0"",MID(RC[3],3,1)<>""2"",MID(RC[3],3,1)<>""3"",MID(RC[3],3,1)<>""4"",MID(RC[3],3,1)<>""5"",MID(RC[3],3,1)<>""6"",MID(RC[3],3,1)<>""7"",MID(RC[3],3,1)<>""8"",MID(RC[3],3,1)<>""9"",MID(RC[3],3,1)<>""1""),""label2.lbl""

RPP63neu
06.07.2015, 09:59
Hi!
Warum setzt Du Karins Vorschlag nicht einfach um?

<table border="1" cellspacing="0" style="font-family:Calibri,Arial; font-size:11pt; background-color:#ffffff; "> <colgroup><col style="font-weight:bold; width:30px; " /><col style="width:80px;" /><col style="width:80px;" /></colgroup><tr style="background-color:#cacaca; text-align:center; font-weight:bold; font-size:8pt; "><td >&nbsp;</td><td >A</td><td >B</td></tr><tr style="height:18px ;" ><td style="font-size:8pt; background-color:#cacaca; text-align:center; " >1</td><td >aaaa1bb</td><td >lbl2.lbl</td></tr><tr style="height:18px ;" ><td style="font-size:8pt; background-color:#cacaca; text-align:center; " >2</td><td >aaaa9bb</td><td >lbl2.lbl</td></tr><tr style="height:18px ;" ><td style="font-size:8pt; background-color:#cacaca; text-align:center; " >3</td><td >9999a88</td><td >keine Zahl!</td></tr><tr style="height:18px ;" ><td style="font-size:8pt; background-color:#cacaca; text-align:center; " >4</td><td >abcdefgh</td><td >keine Zahl!</td></tr></table><br /><table style="font-family:Arial; font-size:10pt; border-style: groove ;border-color:#00ff00;background-color:#fffcf9; color:#000000; "><tr><td ><b>Formeln der Tabelle</b></td></tr><tr><td ><table border = "1" cellspacing="0" cellpadding="2" style="font-family:Arial; font-size:9pt;"><tr style="background-color:#cacaca; font-size:10pt;"><td >Zelle</td><td >Formel</td></tr><tr><td >B1</td><td >=WENN(<span style=' color:008000; '>UND(<span style=' color:#0000ff; '>CODE(<span style=' color:#ff0000; '>TEIL(A1;5;1)</span>)</span>&gt;47;<span style=' color:#0000ff; '>CODE(<span style=' color:#ff0000; '>TEIL(A1;5;1)</span>)</span>&lt;58)</span>;"lbl2.lbl";"keine Zahl!")</td></tr></table></td></tr></table> <br /><br /><span style="font-family:Arial; font-size:9pt; font-weight:bold;background-color:#ffffff; color:#000000; ">Excel Tabellen im Web darstellen &gt;&gt; </span><a style ="font-family:Arial; font-size:9pt; color:#fcf507; background-color:#800040; font-weight:bold;" href="http://www.excel-jeanie-html.de" target="_blank"> Excel Jeanie HTML 4.8 </a>

Gruß Ralf

Vrille78
06.07.2015, 17:30
Ciao Ralph,

das liegt daran, dass ich den Vorschlag nicht verstanden habe.
Ich komme grad nicht dahinter, was ein grösser und kleiner als eine Zahl bewirkt und wollte zudem wissen, ob es in der Excelsprache einen Platzhalter für Zahlen u Buchstaben gibt.
Werde das auf jeden Fall gleich ausprobieren.
Nicht falsch verstehen, bin echt happy, dass ihr alle so tatkräftig mithelft!!!

Muss halt zur Sicherheit nichmals fragen: gibt es diesen allgemeinen Platzhalter, so, wie ein * für schlichtweg alles steht?

Cheers,
Vrille

RPP63neu
06.07.2015, 17:44
Hi!
Ist ja kein Problem! Ich dachte, Du wolltest es nicht umsetzen und statt dessen auf Deinem Monster bestehen ...:cool:
Dass es funktioniert, siehst Du ja an meinem obigen Beispiel.
Umgesetzt in VBA-Sprech:
Markiere eine Formelzelle und starte den Makrorekorder.
Drücke F2 und Enter und beende die Aufzeichnung.
Der Rekorder zeichnet folgendes auf:
ActiveCell.FormulaR1C1 = _
"=IF(AND(CODE(MID(RC[-1],5,1))>47,CODE(MID(RC[-1],5,1))<58),""lbl2.lbl"",""keine Zahl!"")"
Ist ein wenig kürzer als Deine Formel.

Gruß Ralf

Beverly
06.07.2015, 18:33
Hi,



das liegt daran, dass ich den Vorschlag nicht verstanden habe.



Wenn man etwas nicht versteht, dann sollte man das auch kundtun und entsprechend rückfragen - andernfalls kann man nicht darauf eingehen und Unklarheiten beseitigen.

Jedes Zeichen, welches per Tastatur-Befehl eingegeben werden kann, besitzt eine Code-Nummer - welche das ist kannst du herausfinden, indem du z.B. in A1 die Formel schreibst =CODE(ZEILE(A1)) und diese Formel nach unten ziehst. Von A48 bis A57 stehen die Zahlen 0 bis 9, d.h. mit der UND-Verknüpfung dass CODE(A1)>47 und CODE(A1)<58 sein muss, kannst du dich auf Zahlen beschränken.

Ich würde dir empfehlen, in VBA auf die R1C1-Schreibweise zu verzichten, weil deine derartige Formelschreibweise sehr stark vom "normalen" Formalverständnis abweicht. Benutze stattdessen die "normale" Formelschreibweise (wie sie in der Zelle steht), wobei du wiederum 2 Möglichkeiten hast:

1. du benutzt die deutsche Formel, dann musst du in VBA .FormulaLocal einsetzen

ActiveCell.FormulaLocal = "=WENN(UND(CODE(TEIL(A1;5;1))>47;CODE(TEIL(A1;5;1))<58);""lbl2.lbl"";""keine Zahl!"")"



2. du benutzt die englische Formelschreibweise, dann in VBA einfach .Formula, wobei zu beachten ist, dass ale Formelbegriffe englisch sein und Semikolon ( ; ) durch Komma (,) ersetzt werden müssen

ActiveCell.Formula = "=IF(AND(CODE(MID(A1,5,1))>47,CODE(MID(A1,5,1))<58),""lbl2.lbl"",""keine Zahl!"")"

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

Vrille78
06.07.2015, 20:24
Ahhhhhh...!!!!
Jetzt hab ich's gecheckert!
Das sind die ASCII Codes zwischen den 10 Zahlen 0 bis 9, und genau die sollen es ja nicht sein.

Klare Sache! Kannte das "Code" noch nicht als Funktion in XL.

Danke vielmals. Problem elegant gelöst :)

Vrille78
07.07.2015, 07:35
Hallo zusammen,

ich muss nochmals stören. Hab schon ein schlechtes Gewissen deswegen ;o)

Irgendwie scheint der Makrorekorder so etwas, wie eine Längenbegrenzung zu haben. Jedes mal (egal ob Copy Paste oder alles geschrieben in der Zelle), wenn ich die lange Formel einsetze und dann das Marko laufen lasse, kommt ein Laufzeitfehler "1004".

Hier die neue! (Danke nochmals) Formel in kurz, die in Excel selbst super funktioniert, aber nicht im Rekorder:

=WENN(LINKS(D2;2)="EL";"label1.lbl";WENN(UND(LINKS(D2;2)="ES";TEIL(D2;5;1)="1";CODE(TEIL(D2;3;1))>64;CODE(TEIL(D2;3;1)<91));"label2.lbl";WENN(LINKS(D2;2)="KC";"label6.lbl";WENN(LINKS(D2;2)="PU";"label7.lbl";WENN(LINKS(D2;2)="JP";"label8.lbl";WENN(UND(LINKS(D2;2)="ES";TEIL(D2;5;1)="0";CODE(TEIL(D2;3;1))>64;CODE(TEIL(D2;3;1)<91));"label18.lbl";"label3.lbl"))))))

Ihr könnt mal ein kleines Makro aufzeichnen, in dem nur diese Formel gepastet wird. Es kommt immer der Laufzeitfehler.

Bei z.Bsp "wenn(a2<>a1;"NEU";"ALT") hat der Rekorder gar kein Problem und macht alles richtig.

So langsam macht sich Verzweiflung breit *heul*

Danke vorab und Gruss,

Vrille

Beverly
07.07.2015, 07:44
Hi,

also mein Makrorekorder zeichnet dieses auf:

Sub Makro1()
'
' Makro1 Makro
'

'
ActiveCell.FormulaR1C1 = _
"=IF(LEFT(RC[-1],2)=""EL"",""label1.lbl"",IF(AND(LEFT(RC[-1],2)=""ES"",MID(RC[-1],5,1)=""1"",CODE(MID(RC[-1],3,1))>64,CODE(MID(RC[-1],3,1)<91)),""label2.lbl"",IF(LEFT(RC[-1],2)=""KC"",""label6.lbl"",IF(LEFT(RC[-1],2)=""PU"",""label7.lbl"",IF(LEFT(RC[-1],2)=""JP"",""label8.lbl"",IF(AND(LEFT(RC[-1],2)=""ES"",MID(RC[-1],5,1)=""0"",CODE(MID(RC[-1],3,1))>64,CODE(MID(RC[-1" & _
"1)),""label18.lbl"",""label3.lbl""))))))"
Range("E3").Select
End Sub




Prinzipielle Frage: weshalb verwendest du ="1" in der Formel? Da sollte doch reichen =1

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

Vrille78
07.07.2015, 11:46
Hallo Karin,

genau das zeichnet meiner auch auf, aber die Ausführung funktioniert nicht. Hast du mit F8 oder F5 versucht? Das bricht immer ab wegen eines Laufzeitfehlers.

Verstehe das einfach nicht, da eine einfache wenn-dann Formel immer geht.

Die 1 habe ich immer in Klammern, damit es auch 100% sicher ist, dass er dies auch so liest.

Im angehängten Excel sind die Artikelnummern in Spalte A, die alphanumerisch sind und da das ERP System keine Zahl, sondern Text ausgibt, möchte ich die Formel so aufbauen, um sicher zu sein. Wird wahrscheinlich auch ohne Anführungszeichen gehen.

Wäre schön, wenn du mir dein Ergebnis mitteilen könntest.

Danke und Gruss,

Vrille

Beverly
07.07.2015, 16:06
Hi,

wie ich schon geschrieben habe - verzichte auf die R1C1-Schreibweise und trage die Formel direkt ein:

ActiveCell.FormulaLocal = "=WENN(LINKS(C2;2)=""EL"";""label1.lbl"";WENN(UND(LINKS(C2;2)=""ES"";TEIL(C2;5;1)=1;CODE(TEIL(C2;3;1))>64;CODE(TEIL(C2;3;1)<91));""label2.lbl"";WENN(LINKS(C2;2)=""KC"";""label6.lbl"";WENN(LINKS(C2;2)=""PU"";""label7.lbl"";WENN(LINKS(C2;2)=""JP"";""label8.lbl"";WENN(UND(LINKS(C2;2)=""ES"";TEIL(C2;5;1)=0;CODE(TEIL(C2;3;1))>64;CODE(TEIL(C2;3;1)<91));""label18.lbl"";""label3.lbl""))))))"


<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>