Darth Sidious Geschrieben 3. November 2010 Teilen Geschrieben 3. November 2010 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MartinSt Geschrieben 3. November 2010 Teilen Geschrieben 3. November 2010 Was ist denn "cbxCommunication"? Hilft evtl ein "set cbxCommunication.value ..."? Gruß Martin Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Kaeyu Geschrieben 3. November 2010 Teilen Geschrieben 3. November 2010 Anstatt... cbxCommunication.Value = True einfach... cbxCommunication.Value = 1 verwenden. Checkbox: - Haken = 1 - kein Haken = 0 OptionButton: - Punkt = true - kein Punkte = false Es ist nicht immer das Gleiche Gruß >Kae Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Darth Sidious Geschrieben 4. November 2010 Autor Teilen Geschrieben 4. November 2010 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
trippel-p Geschrieben 4. November 2010 Teilen Geschrieben 4. November 2010 bringt nichts versuch es erst gar nicht. Code 180845F - $4990 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Kaeyu Geschrieben 4. November 2010 Teilen Geschrieben 4. November 2010 Was passiert denn, wenn du die hinzugefügten Zeilen auskommentierst. Dann sollte es ja eigentlich wieder klappen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Darth Sidious Geschrieben 4. November 2010 Autor Teilen Geschrieben 4. November 2010 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Kaeyu Geschrieben 5. November 2010 Teilen Geschrieben 5. November 2010 Dieser Codeteil funktioniert bei mir problemlos. Sehe sonst auch keinen Fehler darin. Merkwürdig... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
PromiseYou Geschrieben 7. November 2010 Teilen Geschrieben 7. November 2010 hmmmm... versuch doch mal das show im zusammenhang mit modal bzw. unmodal kann mir zwar nicht erklären warum es ohne nicht gehen sollte, aber vllt. hilft es ja dennoch .. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Darth Sidious Geschrieben 7. November 2010 Autor Teilen Geschrieben 7. November 2010 Das bringt leider auch keine Besserung. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MartinSt Geschrieben 7. November 2010 Teilen Geschrieben 7. November 2010 @Darth Sidious Kannst du evtl. die komplette Exceldatei mit den Makros hier hochladen? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Darth Sidious Geschrieben 7. November 2010 Autor Teilen Geschrieben 7. November 2010 Das möchte ich nich wirklich (Privatsphäre). Jedoch würde ich dir per PN ein Link schicken wenn du möchtest. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MartinSt Geschrieben 7. November 2010 Teilen Geschrieben 7. November 2010 ja ok, mach es so Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Darth Sidious Geschrieben 7. November 2010 Autor Teilen Geschrieben 7. November 2010 Bevor ich es hochlade hab ich nochmal eine Idee. Könnte es eventuell daran liegen dass der hinzugefügte Code in der Sub "Private Sub UserForm_initialize()" steht? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MartinSt Geschrieben 7. November 2010 Teilen Geschrieben 7. November 2010 ja vermutlich, ich kenne VBA nicht so gut, aber in VB ist sowas wichtig Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Darth Sidious Geschrieben 7. November 2010 Autor Teilen Geschrieben 7. November 2010 Und wie könnte ich diesen Code anderweitig implementieren sodass der Code beim starten der UserForm1 ausgeführt wird? Mit einem Change Event geht das ja nicht wirklich (soll ja NUR beim starten der UserForm1 ausgeführt werden). Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MartinSt Geschrieben 7. November 2010 Teilen Geschrieben 7. November 2010 ich vermute (aber wie gesagt nur eine Vermutung, da ich im moment kein VBA da habe), dass folgendes passiert: Aus dem Initialize der Form sprichst du eine Controll auf der Form an, was dazu führt, dass die Form geladen wird, also ihre Loadmethode ausgeführt wird und hieraus der Fehler kommt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Darth Sidious Geschrieben 8. November 2010 Autor Teilen Geschrieben 8. November 2010 Hat vielleicht jemand eine Idee wie ich den Code anderweitig einfügen kann bzw. wo und wann sodass er funktioniert? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Kaeyu Geschrieben 11. November 2010 Teilen Geschrieben 11. November 2010 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Darth Sidious Geschrieben 11. November 2010 Autor Teilen Geschrieben 11. November 2010 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
PromiseYou Geschrieben 12. November 2010 Teilen Geschrieben 12. November 2010 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Darth Sidious Geschrieben 12. November 2010 Autor Teilen Geschrieben 12. November 2010 Das hab ich bereits so gelöst mit Workbook_Open Hier werden beretis erste Parameter überprüft (Bevor die UserForm1 augerufen wird). Aber in der Workbook_Open kann ich keine UserForm1 ansteuern wenn diese noch nicht mal geladen ist Weitere Vorschläge? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
PromiseYou Geschrieben 12. November 2010 Teilen Geschrieben 12. November 2010 (bearbeitet) 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 12. November 2010 von PromiseYou Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Darth Sidious Geschrieben 12. November 2010 Autor Teilen Geschrieben 12. November 2010 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). Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
PromiseYou Geschrieben 12. November 2010 Teilen Geschrieben 12. November 2010 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.