Exel VBA Problem. Erwartet Anweisungsende?
Hi,
ich möchte mithilfe einer VBA Schaltfläche eine Formel in eine Zelle schreiben, bekomme aber mal den Fehler: erwartet Anweisungsende und mal einen Syntaxfehler
With ThisWorkbook.Worksheets("Tabelle1").Activate
Range("K20").Value = "=WENN(B25="4:3";E10/0,8;WENN(B25="16:9";E10/0,87;"Fehler"))"
End With
End Sub
2 Antworten
Entweder so:
Private Sub Worksheet_Activate()
With ThisWorkbook.Worksheets("Tabelle1")
'Range("K20").Formula = "=IF(B25=""4:3"",E10/0.8,IF(B25=""16:9"",E10/0.87,""Fehler""))"
End With
End Sub
oder so:
Private Sub Worksheet_Activate()
With ThisWorkbook.Worksheets("Tabelle1")
Range("K20").FormulaLocal = "=WENN(B25=""4:3"";E10/0,8;WENN(B25=""16:9"";E10/0,87;""Fehler""))"
End With
End Sub
Jeweils im Modul von Tabelle1.
Und nutze bitte für Code hier immer die Option "Quelltext", so wie ich.
Klappt es?
Wobei ich fast glaube, dass der ganze Activate Kram nicht nötig ist und vom Makrorekorder oder so kommt.
Nein, das kommt sicher nicht vom Rekorder.
Wenn das so im Modul der Tabelle steht, wird dieser Code jedes mal automatisch ausgeführt, wenn das Tabellenblatt aktiviert - sprich aufgerufen - wird.
Ein sogenanntes "Ereignismakro".
Ich bin einfach mal davon ausgegangen, dass der Fragesteller DAS mit seinem "With ThisWorkbook.Worksheets("Tabelle1").Activate" bewirken wollte.
P.S.:
Doch die Zeile vom FS könnte so vom Rekorder generiert worden sein.
Aber das
Private Sub Worksheet_Activate()
das ich geschrieben habe, wirkt so wie von mir oben beschrieben.
Ich meine, dass das in der Frage vom Rekorder (oder aus einem Forum oder sowas) kommt, bei dir natürlich nicht.
Und in der Frage ist das glaube ich nur dafür da, damit das Range, was in seiner Frage ohne "." da steht, richtig funktioniert. Aber ist ja auch egal, deine Lösung funktioniert super und was genau er vorhat, wissen wir nicht ;-)
Ich vermute mal, dass du das in englischer Notation formulieren musst, da du in VBA bist.
und
With ThisWorkbook.Worksheets("Tabelle1").Activate
macht keinen Sinn und ist syntaxtisch falsch.
With ThisWorkbook.Worksheets("Tabelle1")
.Activate
Brainchild erklärt den Fehler. Außerdem:
Muss nicht in Englisch notiert sein, wenn statt
Range("K20").Value = "=WENN(B25="4:3";E10/0,8;WENN(B25="16:9";E10/0,87;"Fehler"))"
(was eh falsch ist), das hier genommen wird
.Range("K20").Formulalocal= "=WENN(B25="4:3";E10/0,8;WENN(B25="16:9";E10/0,87;"Fehler"))"
Nein, das ist egal. Es geht um das formulalocal. Nimm Oubyis Antwort und kopiere von da, dann hast du es gleich :-)
Vor dem .activate muss ein zeilenumbruch sein. Wenn du das mit whitespace meinst, hast du vollkommen recht ;-)
Ich habe diese Bezeichnung auch schon in Bezug auf Leerzeichen (Einrücken von Programmteilen zur besseren Lesbarkeit von Programmcode) gehört und diese spielen syntaktisch in diesem Fall keine Rolle :-)
Es funktioniert! vielen Dank!