der erste teil wird einfach eine „normale“ sub (einfach umbenennen)
Userform soll beim Öffnen der Datei angezeigt werden
[code]
Option Explicit
Private Sub Workbook_Open_NEU()
'inhalt bleibt unverändert
End Sub
[/code]
In der Datei, in die ich diesen Code einfügen möchte, steht
aber bereits in der Arbeitsmappe/Workbook folgender Code:
da kommt dann der call für die neue sub rein:
Private Sub Workbook_Open()
call Workbook_Open_NEU 'musst nur schauen, an welcher stelle der code ausgeführt werden soll
Call Berechnung_formelqm
End Sub
[/code]
Wenn ich den Code ins Workbook einfüge, kommt die
Fehlermeldung: Compile Error: Ambiguous Name detected:
Workbook_Open
das liegt daran, dass du zwei subs mit dem gleichen namen hast („Workbook_Open“) diese subs führen normalerweise ihren code aus, sobald das workbook geöffnet wird. wenn beide code-teile ausgeführt werden sollen, musst du entweder den code in eine sub kopieren - oder die eine sub umbenennen und aus der anderen aufrufen (wie ich oben kurz gezeigt habe).
Event-Codes der Mappe gehören alle immer in ‚Diese Arbeitsmappe‘ - solche eines Worksheets dann analog in die entsprechende Tabelle.
In der Datei, in die ich diesen Code einfügen möchte, steht
aber bereits in der Arbeitsmappe/Workbook folgender Code:
[code]Option Explicit
Private Sub Workbook_Open()
Call Berechnung_formelqm
End Sub
[/code]
Wenn ich den Code ins Workbook einfüge, kommt die
Fehlermeldung: Compile Error: Ambiguous Name detected:
Workbook_Open
Ja es kann/darf logischerweise immer nur einen Code pro Event geben.
Da aber der letztere Code nur aus einer einzelnen Zeile (dem Aufruf einer anderen Sub) besteht, kannst Du diese eine Zeile an den Anfang des neuen Codes stellen und den Rest des alten Code-Gerüstes dann löschen.
wie schon gesagt, ist auch besser für Codeerweiterunghalte die Erignismodule klein. Rufe dann halt mit Call die Prozeduren auf.
Globale Variablen sollte man wegen der Übersicht nur im Notfall verwenden.
Wenn du also die gleichen Variablen in mehreren SUBs braucht, definiere sie in der ersten Prozedur der Kette.
D.h. jetzt für workbook_open,
Call Starten
In Starten steht dann
Dim strA as string,strB as string
strA=„1“
strB=„1“
Call UF_Starten(strA,StrB)
Der code-Tag geht hier nicht, nimm den pre-Tag.
Soll deine IF-Abfrage so funktionieren wie im Code?
Beachte dieses:
Sub nn()
Dim N As Byte
For N = 1 To 2
If 1 = N Then
If 2 = 1 Then
MsgBox "beide1"
Else
MsgBox "nur letzte if1"
End If
End If
If 1 = 1 And 2 = N Then
MsgBox "beide2"
Else
MsgBox "beide nicht2"
End If
Next N
End Sub
Für Klärung 0
Option Explicit
Sub UF-Starten(byval strX as string,byval strY as string)
Dim rng_Zelle As Range, V As Boolean
For Each rng_Zelle In Range(„f3:f100“).Cells
V = (rng_Zelle.Value - Int(Now) >= 0) * (rng_Zelle.Value - Int(Now)
Ich nutze Excel 2003. Mit VBA kenn ich mich leider nicht aus.
Hallo Reinhard,
da wie du schon drauf gekommen bist, der Code nicht von mir ist, kann ich den Code auch nicht nachvollziehen.
Vielen Dank für deine Vorschläge Reinhard. Es ist sehr hilfreich.