Exel VBA Problem. Erwartet Anweisungsende?

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?

Woher ich das weiß:Berufserfahrung – IT-Administrator (i.R.)

EmWald  22.01.2019, 20:21

Wobei ich fast glaube, dass der ganze Activate Kram nicht nötig ist und vom Makrorekorder oder so kommt.

0
Oubyi, UserMod Light  22.01.2019, 20:29
@EmWald

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.

1
EmWald  22.01.2019, 20:33
@Oubyi, UserMod Light

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 ;-)

1

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

Woher ich das weiß:Berufserfahrung – Studium der Informatik + Softwareentwickler seit 25 Jahren.

Manni1295 
Beitragsersteller
 22.01.2019, 20:52

es funktioniert auf jeden fall jetzt! vielen dank!

0
EmWald  22.01.2019, 20:14

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"))"
2
EmWald  22.01.2019, 20:20
@Brainchild

Nein, das ist egal. Es geht um das formulalocal. Nimm Oubyis Antwort und kopiere von da, dann hast du es gleich :-)

2
EmWald  22.01.2019, 20:51
@Brainchild

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 :-)

0