Zum Inhalt springen

Laufzeitfehler nach dem hinzufügen von Code


Darth Sidious

Empfohlene Beiträge

Hallo,

ich habe heute bei einem VBA-Code ein paar Zeilen hinzugefügt. Seitdem funktioniert das aufrufen der UserForm1 nicht mehr mit dem Befehl UserForm1.Show

Hier der betreffende Code:

Private Sub cmdStart_Click()


UserForm1.Show


End Sub

Private Sub Workbook_Open()


If Sheets("Prevent! Sign-up form").Cells(9, 2) = "" Then

        UserForm1.Show

    Else

        End

End If


End Sub
Jedes mal wenn ich auf die Schaltfläche klicke / das Dokument öffne bekomme ich einen Laufzeitfehler:
Laufzeitfehler '438': Objekt unterstützt diese Eigenschaft oder Methode nicht.
An dem oben genannten Code wurde nichts verändert, ebenso wenig an den Eigenschaften der UserForm1. Es wurde nur simpler Code hinzugefügt wie dieser:
    If ActiveSheet.Cells(20, 2) = "X" Then

        cbxCommunication.Value = True

    End If

Hat jemand eine Idee woran das liegen könnte?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Leider tritt der Fehler immer noch auf.

Sogar genau an der selben Stelle; und zwar hier (Sagt mir der Debugger --> Hat nichts mit den Checkboxen zu tun, wenn ich mich nicht irre):

Hier der betreffende Code:

Private Sub cmdStart_Click()


[COLOR=Red][B]UserForm1.Show[/B][/COLOR]


End Sub

.....

Ich habe jetzt überall True durch 1 ersetzt. Bringt jedoch leider keine Besserung.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich hab die vorher eingefügten Zeilen rausgelöscht --> Es funktioniert.

Aber der Code sollte ja auch so laufen.

Ich poste hier mal den gesamten Code den ich nachträglich hinzugefügt habe.

Vielleicht erkennst Du ja irgendwo den Fehler.

[COLOR=Lime]'Filling UserForm1 wit the data from the sheet[/COLOR]

If ActiveSheet.Cell(9, 2) <> "" Then

[COLOR=Lime]    'Registration of the reason[/COLOR]

    cboConfig = ActiveSheet.Cells(5, 2)


[COLOR=Lime]    'Registration of the user data[/COLOR]

    txtName = ActiveSheet.Cells(9, 2)

    txtKID = ActiveSheet.Cells(10, 2)

    txtAsset = ActiveSheet.Cells(11, 2)

    txtPhone = ActiveSheet.Cells(12, 2)

    txtMobile = ActiveSheet.Cells(13, 2)

    txtMail = ActiveSheet.Cells(14, 2)

    cboMarket = ActiveSheet.Cells(9, 6)

    cboBusiness = ActiveSheet.Cells(10, 6)

[COLOR=Lime]     'If cboBusiness <> "Other" Then

    '        ActiveSheet.Cells(10, 6) = cboBusiness

    '    Else

    '        ActiveSheet.Cells(10, 6) = txtBusiness

    'End If[/COLOR]

    txtUnit = ActiveSheet.Cells(11, 6)

    txtStreet = ActiveSheet.Cells(12, 6)

    txtCity = ActiveSheet.Cells(13, 6)

    cboCountry = ActiveSheet.Cells(14, 6)


[COLOR=Lime]    'Registration of the user role[/COLOR]

    cboOwner = Sheets("Prevent! Sign-up form").Cells(18, 2)

    If ActiveSheet.Cells(20, 2) = "X" Then

        cbxCommunication.Value = 1

    End If

    If ActiveSheet.Cells(21, 2) = "X" Then

        cbxHSE_Environment.Value = 1

    End If

    If ActiveSheet.Cells(22, 2) = "X" Then

        cbxHSE_Health.Value = 1

    End If

    If ActiveSheet.Cells(23, 2) = "X" Then

        cbxHSE_Security.Value = 1

    End If

    If ActiveSheet.Cells(24, 2) = "X" Then

        cbxInformation.Value = 1

    End If

    If ActiveSheet.Cells(25, 2) = "X" Then

        cbxOperations.Value = 1

    End If

    If ActiveSheet.Cells(26, 2) = "X" Then

        cbxInfrastructure.Value = 1

    End If

    If ActiveSheet.Cells(27, 2) = "X" Then

        cbxSecurity.Value = 1

    End If

    If ActiveSheet.Cells(28, 2) = "X" Then

        cbxOther.Value = 1

        txtOther = ActiveSheet.Cells(28, 4)

    End If



    If ActiveSheet.Cells(32, 2) = "X" Then

        cbxCommunication3.Value = 1

    End If

    If ActiveSheet.Cells(33, 2) = "X" Then

        cbxHSE_Environment3.Value = 1

    End If

    If ActiveSheet.Cells(34, 2) = "X" Then

        cbxHSE_Health3.Value = 1

    End If

    If ActiveSheet.Cells(35, 2) = "X" Then

        cbxHSE_Security3.Value = 1

    End If

    If ActiveSheet.Cells(36, 2) = "X" Then

        cbxInformation3.Value = 1

    End If

    If ActiveSheet.Cells(37, 2) = "X" Then

        cbxOperations3.Value = 1

    End If

    If ActiveSheet.Cells(38, 2) = "X" Then

        cbxInfrastructure3.Value = 1

    End If

    If Sheets("Prevent! Sign-up form").Cells(39, 2) = "X" Then

        cbxSecurity3.Value = 1

    End If

    If ActiveSheet.Cells(40, 2) = "X" Then

        cbxOther3.Value = 1

        txtOther3 = ActiveSheet.Cells(40, 4)

    End If


[COLOR=Lime]    'Registration of the sms/e-mail notification[/COLOR]

    If ActiveSheet.Cells(44, 2) = "X" Then

        cbxCommunication2.Value = 1

    End If

    If ActiveSheet.Cells(45, 2) = "X" Then

        cbxHSE_Environment2.Value = 1

    End If

    If ActiveSheet.Cells(46, 2) = "X" Then

        cbxHSE_Health2.Value = 1

    End If

    If ActiveSheet.Cells(47, 2) = "X" Then

        cbxHSE_Security2.Value = 1

    End If

    If ActiveSheet.Cells(48, 2) = "X" Then

        cbxInformation2.Value = 1

    End If

    If ActiveSheet.Cells(49, 2) = "X" Then

        cbxOperations2.Value = 1

    End If

    If ActiveSheet.Cells(50, 2) = "X" Then

        cbxInfrastructure2.Value = 1

    End If

    If ActiveSheet.Cells(51, 2) = "X" Then

        cbxSecurity2.Value = 1

    End If

    If ActiveSheet.Cells(52, 2) = "X" Then

        cbxOther2.Value = 1

        txtOther2 = ActiveSheet.Cells(52, 4)

    End If

[COLOR=Lime]    

    'Registration of the system[/COLOR]

    If ActiveSheet.Cells(56, 2) = "X" Then

        cbxProd.Value = 1

    End If

    If ActiveSheet.Cells(57, 2) = "X" Then

        cbxLearn.Value = 1

    End If

    If ActiveSheet.Cells(58, 2) = "X" Then

        cbxUK.Value = 1

    End If

    If ActiveSheet.Cells(59, 2) = "X" Then

        cbxNordic.Value = 1

    End If

    If ActiveSheet.Cells(61, 2) = "X" Then

        cbxCitrix.Value = 1

    End If


[COLOR=Lime]    'Registration of other[/COLOR]

    txtText = ActiveSheet.Cells(66, 1)

    txtDate = ActiveSheet.Cells(70, 4)

    txtName2 = ActiveSheet.Cells(71, 4)

    txtKID2 = ActiveSheet.Cells(72, 4)

End If

Link zu diesem Kommentar
Auf anderen Seiten teilen

Versuch doch zum Probieren die ganzen Werte mit einem Buttonklick anstatt dem Initialize Ereignis aufzurufen.

Sollte es so klappen wirds wohl am Init-Event gelegen haben. Dann kannst du deine Methoden ja notfalls im Form activate Ereignis starten lassen. Ist zwar unschön...aber vllt klappts.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich vermute auch dass es am Init Event liegt (kann wohl keine Controll ausführen).

Aber nun gut. Mit dem Event Activate hat es auch nicht geklappt ("Private Sub UserForm1_Activate()").

Und per Button möchte ich es nicht machen. Da das Formular direkt nach dem laden mit den Daten aus dem Blatt befüllt werden soll.

Sprich ich bräuchte eine Möglichkeit ein Event oder eine Controll Funktion direkt nach dem Initialize Event auszuführen.

Versucht hab ich das auch schon mit dem aufrufen eines CommandButtons aus dem Initialize Event mit "Call CommandButton1_Click") das half aber auch nichts.

Hat jemand noch andere Ideen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also da gibt es schon was, wie man beim start einer Arbeitsmappe ein Form öffnet.

Private Sub Workbook_Open()

UserForm1.Show [modal/unmodal]

End Sub

Hier wird beim Öffnen das Form1 aufgerufen, und die Ablaufsteuerung wird an die SUB main() übertragen sofern vorhanden, ansonsten wartet Windows auf Dialogstuerung aus dem Formular.

Link zu diesem Kommentar
Auf anderen Seiten teilen

was willst du denn in dem Form ansteuern ?

Das würde ich in der "UserForm_Initialize()" des Forms machen.

Also Einstellellungen für Bezeichner oder sonstiges was man sich aus einer INI oder aus der REG holt.

Auch Verbindungen zu Datenbanken oder so öffne ich erst in dieser SUB.

Bei mir steht immer nur das Form.show im WorkBook_Open()

Dann schalte ich beim Initialize das visible von Excel auf false.

Man kann ja auch im "Private Sub UserForm_Initialize()"

form1.visible = false

als erstes setzen dann wird das Form erst garnicht sichtbar

Bearbeitet von PromiseYou
Link zu diesem Kommentar
Auf anderen Seiten teilen

Ansteuern will ich Checkboxen und Textfelder in der UserForm1.

Diese sollen auch gleich gefüllt werden sobald dieses Angzeigt wird. Angezeigt wird es wiederrum direckt wenn man die Excel-Datei öffnet.

Wie gesagt wenn ich den dazugehörigen Code in der Sub UserForm1_Initialize() reinschreibe bekomme ich Fehlermeldung. Wenn ich den Code woanders reinschreibe bekomme ich keine Fehlermeldung (allerdings wird dann nicht gleich beim anzeigen der UserForm1 die Daten aus der Excel-Datei geladen).

Link zu diesem Kommentar
Auf anderen Seiten teilen

das ist vollkommen klar, dass du im workbook_open noch nicht auf das form zugreifen kannst :) ... denn es ist ja noch nicht da :) .. erst nach dem .show wird das Form in den Speicher geladen.

Ab hier geht der Focus dann auf das INITIALIZE ...

hier werden nun alle Textfelder, Listboxen etc. vorbelegt

nach End SUB wartet Windows (Excel) auf eine Interaktion des Users (Forms)

Sollte das Füllen des Forms zeitmäßig sehr Lange dauern rate ich dazu, nach der Variabelendef in der INITIALZE das Form auf invisible zu setzen ... alles füllen, und dann wieder auf visible zurück ..

dann geht das füllen bestimmter Steuerelemente auch zügiger, als wenn sie auf dem Form (oder das Form selber) sichtbar ist.

also in der WorkBook_open() NUR Form1.show

sonst nix

ALLES andere was im Form gemacht werden soll über das INITIALIZE()

ansonsten kann ich auch nur sagen, dann hätte ich gern mal die Datei

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...