Autor Beitrag
Kirk1701A
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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
BeitragVerfasst: Di 12.11.19 20:30 
Hallo zusammen,
nach einiger Zeit, bin ich wieder aktiv hier (YAY :dance2: :beer:). 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:

ausblenden 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 :gruebel: :gruebel: :gruebel:) und ich habe das Projekt auch nicht mehr. Hier ist das "StartMakro":

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

ausblenden volle Höhe Quelltext
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? :gruebel: :gruebel: :autsch: :autsch: :lupe: :lupe:

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 :lol:
Einloggen, um Attachments anzusehen!
_________________
"Ich war es und werde es immer bleiben... Ihr Freund!"
@Spock -> Star Trek II: Der Zorn des Khan
doublecross
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 149
Erhaltene Danke: 27

Windows 7
C#; Visual Studio 2015
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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
BeitragVerfasst: 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