Autor |
Beitrag |
Kirk1701A
      
Beiträge: 126
Erhaltene Danke: 3
Linux, Ubuntu, Mac, IOS, Android (4.2.x - 9.x.x), Win Mob., Micro. DOS, Win 95, Win 98, Win 2000, Win ME, Win XP, Win Vista, Win 7, Win8.1, Win 10
C# (VS 2017 Community/Enterprise, VS 2019 Professional/Enterprise), VB (VBA), JavaScript
|
Verfasst: Di 12.11.19 20:30
Hallo zusammen,
nach einiger Zeit, bin ich wieder aktiv hier (YAY  ). Ich bin gerade dabei, für meine Präsentation, die ich in der Schule halten werde, ein Testprogramm zu schreiben, um das vorführen zu können. Das Thema ist VBA.
Ich habe es so geregelt, dass das Dokument einen Button besitzt, der beim Klick den UserForm öffnet. Es ist nur was ganz simples. Wenn ich das UserForm schließe, stürzt mir mein ganzes Makro ab und gibt mir folgende Fehlermeldung:
"Laufzeitfehler '-2147352573 (80020003)':
Das angegebene Makro kann nicht ausgeführt werden."
Das passiert aber nur, wenn ich das Makro via Button starte. Hier das ClickEvent des Buttons, das im Dokument sitzt:
Quelltext 1: 2: 3:
| Private Sub cmdStartMacro_Click() Application.Run MacroName:=StartMakro End Sub |
Dieses "StartMakro" ist eine Function, die sich in einem extra Modul befindet. Ich habe so etwas schon eimal gemacht, ist aber erstens zu lange her (Alzheimer lässt grüßen  ) und ich habe das Projekt auch nicht mehr. Hier ist das "StartMakro":
Quelltext 1: 2: 3:
| Public Function StartMakro() Form.Show End Function |
Hier ist dann auch noch der gesamte restliche Code, der sich im Form befindet:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46:
| Public name As String Public age As Integer Public town As String Public class As String Public school As String Public ageCorrect As Boolean
Private Sub cmdTransfer_Click() ageCorrect = False
'Werte der Textfelder in Variablen übergeben name = Me.tbName.Text town = Me.tbTown.Text class = Me.tbClass.Text school = Me.tbSchool.Text 'Errorhandling On Error GoTo NumberError age = CInt(Me.tbAge.Text) ageCorrect = True 'Abfangen von möglichen Fehleingaben If age < 0 Then Call MsgBox("Es wurde eine negative Zahl eingegeben!" & vbCrLf & "Es sind lediglich positive, ganze Zahlen erlaubt.", vbCritical + vbOKOnly, "Error - Negative number") Exit Sub ElseIf age > 116 Then Call MsgBox("Die Möglichkeit, dass Ihr Alter wirklich " & age & " beträgt, ist zu gering. Dies wird als ungültige Eingabe gewertet!", vbCritical + vbOKOnly, "Error - Too high number") Exit Sub End If ActiveDocument.Bookmarks("Name").Range.InsertAfter name ActiveDocument.Bookmarks("Age").Range.InsertAfter CStr(age) ActiveDocument.Bookmarks("Town").Range.InsertAfter town ActiveDocument.Bookmarks("Class").Range.InsertAfter class ActiveDocument.Bookmarks("NameOfSchool").Range.InsertAfter school Call MsgBox("Die Daten wurden erfolgreich in das Dokument geschrieben.", vbInformation, "Success - Write into document") Unload (Form) NumberError: 'Entweder wurde nichts oder ungültige Zeichen eingegeben If ageCorrect = False Then Call MsgBox("Es wurde eine ungültige Eingabe festgestellt! Bitte versuchen Sie es erneut." & vbCrLf & "Es sind lediglich positive, ganze Zahlen erlaubt.", vbCritical + vbOKOnly, "Error - Invalid input") Exit Sub End If End Sub |
Im Anhang ist dann auch noch ein Screenshot meines Forms zu sehen. Was genau mach ich falsch, oder stehe ich bloß auf dem Schlauch?
Hier ist mein Form zu sehen, welches ich verwende. Mehr Code oder Bilder gibt es nicht... Das ist alles (PNG, 4.18 KB)
Danke jetzt schonmal
LLAP
Euer Kirk
P.S.
Ich weiß, das ist nicht gerade das schönste ExceptionHandling, aber es wird nur einmal von mir vor der Klasse benutzt für 3 Minuten und das war's auch schon. Danach könnte man es echt wegwerfen 
Einloggen, um Attachments anzusehen!
_________________ "Ich war es und werde es immer bleiben... Ihr Freund!"
@Spock -> Star Trek II: Der Zorn des Khan
|
|
doublecross
      
Beiträge: 149
Erhaltene Danke: 27
Windows 7
C#; Visual Studio 2015
|
Verfasst: Do 14.11.19 15:24
Hallo,
ich habe zwar keine große Ahnung von VBA, aber wenn ich mir die Beispiele hier einmal ansehe, dann sind die Makronamen immer bedeutend länger als in deinem Beispiel. Kann es sein, dass du noch so eine Art Pfad zu deinem Makro mit in den Makronamen aufnehmen musst?
Für diesen Beitrag haben gedankt: Kirk1701A
|
|
Kirk1701A 
      
Beiträge: 126
Erhaltene Danke: 3
Linux, Ubuntu, Mac, IOS, Android (4.2.x - 9.x.x), Win Mob., Micro. DOS, Win 95, Win 98, Win 2000, Win ME, Win XP, Win Vista, Win 7, Win8.1, Win 10
C# (VS 2017 Community/Enterprise, VS 2019 Professional/Enterprise), VB (VBA), JavaScript
|
Verfasst: Di 19.11.19 21:02
Hallo zusammen,
ich habe die Lösung letztendlich doch selbst gefunden.
Ich hätte das "StartMakro" in Anführungszeichen setzen sollen. Jetzt funktioniert es fehlerfrei. Trotzdem danke an @doublecross.
LLAP
Euer Kirk
_________________ "Ich war es und werde es immer bleiben... Ihr Freund!"
@Spock -> Star Trek II: Der Zorn des Khan
|
|
|