Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Image
BildScreenshot zu Image Image-Seite mit Beispielarbeitsmappe aufrufen

Objektvariable nicht definierte (wenn...)


Betrifft: Objektvariable nicht definierte (wenn...) von: Mario
Geschrieben am: 23.09.2019 07:23:45

Hallo an alle!

Ich bin ein echt großer Fan dieses Forums und konnte schon sehr viele Probleme mit bereits bestehenden Beiträgen lösen. Jetzt verzweifle ich aber schon längere Zeit. Ich möchte per Makro ein Image in einer Userform erstellen und dieses Image unter dem letzten Image in der Userform platzieren.

Hier der Code:




Sub test()

Position = 0

'SCHRITT A
'Hier bestimme ich die Höhe des untersten Images in einer Userform

    Dim bild As Control
    For Each bild In UserForm1.Controls
        If TypeOf bild Is image Then
            If Position < bild.Top + bild.Height Then Position = bild.Top + bild.Height
        End If
    Next
    
MsgBox Position

'SCHRITT B
'Hier füge ich ein neues Bild ein

Dim NewImage As image
Set NewImage = ThisWorkbook.VBProject.VBComponents("UserForm1").Designer.Controls.Add("Forms. _
Image.1") ' hier kommt der Fehler "Objektvariable nicht festgelegt"
      With NewImage
        .Top = Position: .Left = 5: .Width = 100: .Height = 20: .Name = "neuesbild"
      End With
End Sub

Anmerkung - Schritt A alleine funktioniert einwandfrei
Anmerkung - Schritt B alleine funktioniert einwandfrei (sofern nicht vorher Schritt A ausgeführt wurde)

Vielen Dank schonmal für eure Hilfe!

lg Mario

  

Betrifft: AW: Objektvariable nicht definierte (wenn...) von: Nepumuk
Geschrieben am: 23.09.2019 08:20:10

Hallo Mario,

willst du das Image dauerhaft einfügen oder nur temporär?

Gruß
Nepumuk


  

Betrifft: AW: Objektvariable nicht definierte (wenn...) von: Mario
Geschrieben am: 23.09.2019 09:02:13

Das image soll dauerhaft bleiben:)


  

Betrifft: AW: Objektvariable nicht definierte (wenn...) von: Nepumuk
Geschrieben am: 23.09.2019 09:16:21

Hallo Mario,

dann so:

Dim NewImage As MSForms.Image

Gruß
Nepumuk


  

Betrifft: AW: Objektvariable nicht definierte (wenn...) von: Mario
Geschrieben am: 23.09.2019 09:32:27

Hallo Nepumuk!

Vielen Dank für die rasche Hilfe! Werde es am Abend testen aber gehe natürlich davon aus dass das die Lösung ist :)

lg mario


  

Betrifft: AW: Objektvariable nicht definierte (wenn...) von: Nepumuk
Geschrieben am: 23.09.2019 10:15:30

Hallo Mario,

ich hätte die Frage genau lesen sollen. Mein 1. Vorschlag bringt nichts. Problem ist, nach dem du durch die Controls gegangen bist ist das UserForm geladen. Als erstes habe ich es mit Unload versucht, da kam eine andere Fehlermeldung. Dann habe ich versucht die beiden Teile mit OnTime zu entkoppeln, da hat es geklappt. Also:

Option Explicit

Public Sub Test1()

    Dim objControl As Control
    Dim sngPosition As Single

    For Each objControl In UserForm1.Controls
        If TypeOf objControl Is MSForms.Image Then
            If sngPosition < objControl.Top + objControl.Height Then _
                sngPosition = objControl.Top + objControl.Height
        End If
    Next

    Call Unload(Object:=UserForm1)

    Call Application.OnTime(EarliestTime:=Now, _
        Procedure:="'Test2 " & CStr(sngPosition) & "'")
End Sub

Public Sub Test2(ByVal pvstrPosition As String)

    Dim objImage As MSForms.Image
    Dim sngPosition As Single
    
    sngPosition = CSng(pvstrPosition)

    Set objImage = ThisWorkbook.VBProject.VBComponents("UserForm1") _
        .Designer.Controls.Add("Forms.Image.1")
        
    With objImage
        .Top = sngPosition: .Left = 5: .Width = 100: _
            .Height = 20: .Name = "neuesbild"
    End With
End Sub

Gruß
Nepumuk


  

Betrifft: AW: Objektvariable nicht definierte (wenn...) von: Mario
Geschrieben am: 25.09.2019 06:25:37

Vielen Dank! Klappt wunderbar. Jetzt mache ich mich noch auf die Suche nach dem Code, die Höhe der Userform gleich anzupassen wenn das Bild darüber hinausschaut. Wenn ichs nicht schaffe würde ich mich nochmal bei dir melden wenn ich darf. Vielen Dank nochmal!! lg Mario


  

Betrifft: AW: Objektvariable nicht definierte (wenn...) von: Mario
Geschrieben am: 25.09.2019 06:57:50

Nachtrag: Wenn ich deinen Code aus den Entwicklertools heraus laufen lasse funktioniert das. Wenn ich das Makro über den Button Makros und dann "Test1" auswähle und ausführen klicke funktionert er nicht mehr.
Ich will dieses Makro später über einen Button in einer separaten Userform laufen lassen wo ich ein paar Bedingungen hinzufüge. Daher muss der Code auch "von extern" laufen. Hast du dazu eine Lösung?


  

Betrifft: AW: Objektvariable nicht definierte (wenn...) von: Nepumuk
Geschrieben am: 25.09.2019 08:16:21

Hallo Mario,

wie soll ich "funktionert er nicht mehr" verstehen?

Gruß
Nepumuk


  

Betrifft: AW: Objektvariable nicht definierte (wenn...) von: Mario
Geschrieben am: 25.09.2019 09:06:27

Hallo Nepumuk,

es kommt eine Fehlermeldung "ungültige Vorreferenz... ich weiss es leider gerade nicht genau" und der Button wird nicht erstellt. kann es dir am abend genau sagen.
lg Mario


  

Betrifft: AW: Objektvariable nicht definierte (wenn...) von: Nepumuk
Geschrieben am: 25.09.2019 09:14:08

Hallo Mario,

du darfst vor dem Einfügen des Image-Controls das UserForm keinesfalls öffnen (.Show - Methode).

Gruß
Nepumuk


  

Betrifft: AW: Objektvariable nicht definierte (wenn...) von: Mario
Geschrieben am: 25.09.2019 12:18:45

Danke für deine Geduld.

hmmm... das mach ich auch nicht...

ich rufe dein makro direkt über
-Entwicklertools
-Makros
-Test1

auf. (ohne irgendwo die userform zu öffnen)

lg Mario


  

Betrifft: AW: Objektvariable nicht definierte (wenn...) von: Nepumuk
Geschrieben am: 25.09.2019 12:54:01

Hallo Mario,

jetzt habe ich lange rumprobiert und bringe es nicht zum laufen. Vielleicht setze ich mich am Wochenende nochmal dran.

Gruß
Nepumuk


  

Betrifft: AW: Objektvariable nicht definierte (wenn...) von: Mario
Geschrieben am: 25.09.2019 13:06:18

Hallo Nepumuk,

das wäre echt super von dir.
Die Aufgabenstellungen klingt eigentlich relativ leicht. Dachte nicht dass mich das so lange beschäftigt!

lg mario


  

Betrifft: AW: Objektvariable nicht definierte (wenn...) von: Nepumuk
Geschrieben am: 25.09.2019 13:29:40

Hallo Mario,

warum erzeugst du eigentlich die Images nicht zur Laufzeit? Einfach zählen wie viele Bilder du hast, Images erzeugen und Bilder einfügen.

Gruß
Nepumuk


  

Betrifft: AW: Objektvariable nicht definierte (wenn...) von: Mario
Geschrieben am: 25.09.2019 17:02:58

Ich erzeuge das jeweilige Bild in einem vorherigen Schritt mittels Makro temporär und speichere dieses nicht ab. Zudem hinterlege ich auch gleich automatisch code wenn man auf die jeweiligen Bilder klickt...

lg Mario


  

Betrifft: AW: Objektvariable nicht definierte (wenn...) von: Nepumuk
Geschrieben am: 25.09.2019 17:46:25

Hallo Mario,

es ist doch egal ob du ein temporäres Bild in ein zur Laufzeit erstelltes Image-Control einfügst oder in ein vorhandenes. Und das Click-Event kannst du über eine Klasse ganz einfach abfangen.

Gruß
Nepumuk


  

Betrifft: AW: Objektvariable nicht definierte (wenn...) von: Mario
Geschrieben am: 25.09.2019 18:59:48

ich kenn mich leider nicht so gut aus aber wenn ich die images nur zur Laufzeit hinzufüge sind Sie beim nächsten öffnen ja weg aber ich brauche sie da.

Ich erklär dir vielleicht den Hintergrund mal. Ich erweitere mein Userform (eigentlich meinE UserformS - siehe weiter unten) in unregelmäßigen Abständen mit Buttons. Diese unterscheiden sich durch das Bild, den Namen und ein Stichwort im Click_event.

Ich muss jedes mal zuerst das Bild erstellen, dann den Button erstellen, dann den Code kopieren und das Stichwort ändern. Da es sich immer um den gleichen Vorgang handelt, hätte ich dazu gern eine automatisierte Lösung.

Ziel der "Übung" ist folgendes: Ich möchte mir ein weiteres Userform bauen, wo ich in einer Combobox die Userform auswähle in der das Bild eingefügt werden soll, den Namen des Images und das Stichwort in jeweils ein Textfeld schreibe und der Rest beim klicken von OK automatisch geschieht.

PS: ich habe mich für images entschieden, da die ich bezüglich einfügen des Bildes flexibler bin.

Ich hoffe du verstehst was ich meine. Bei Fragen melde dich bitte.

lg mario


  

Betrifft: AW: Objektvariable nicht definierte (wenn...) von: Mario
Geschrieben am: 25.09.2019 19:01:02

ich kenn mich leider nicht so gut aus aber wenn ich die images nur zur Laufzeit hinzufüge sind Sie beim nächsten öffnen ja weg aber ich brauche sie da.

Ich erklär dir vielleicht den Hintergrund mal. Ich erweitere mein Userform (eigentlich meinE UserformS - siehe weiter unten) in unregelmäßigen Abständen mit Buttons. Diese unterscheiden sich durch das Bild, den Namen und ein Stichwort im Click_event.

Ich muss jedes mal zuerst das Bild erstellen, dann den Button erstellen, dann den Code kopieren und das Stichwort ändern. Da es sich immer um den gleichen Vorgang handelt, hätte ich dazu gern eine automatisierte Lösung.

Ziel der "Übung" ist folgendes: Ich möchte mir ein weiteres Userform bauen, wo ich in einer Combobox die Userform auswähle in der das Bild eingefügt werden soll, den Namen des Images und das Stichwort in jeweils ein Textfeld schreibe und der Rest beim klicken von OK automatisch geschieht.

PS: ich habe mich für images entschieden, da die ich bezüglich einfügen des Bildes flexibler bin.

Ich hoffe du verstehst was ich meine. Bei Fragen melde dich bitte.

lg mario


  

Betrifft: AW: Objektvariable nicht definierte (wenn...) von: Nepumuk
Geschrieben am: 26.09.2019 13:51:16

Hallo Mario,

jetzt hatte ich gerade eine neue Idee und die klappt bei mir:

Option Explicit

Public Sub Test()
    
    Dim sngPosition As Single
    Dim objImage As MSForms.Image
    Dim objControl As Control
    
    For Each objControl In ThisWorkbook.VBProject.VBComponents("UserForm1").Designer.Controls
        
        If TypeOf objControl Is MSForms.Image Then _
            sngPosition = Application.Max(sngPosition, objControl.Top + objControl.Height)
        
    Next
    
    Set objImage = ThisWorkbook.VBProject.VBComponents("UserForm1") _
        .Designer.Controls.Add("Forms.Image.1")
    
    With objImage
        .Top = sngPosition: .Left = 5: .Width = 100: _
            .Height = 20: .Name = "neuesbild"
    End With
    
    Set objImage = Nothing
End Sub

Gruß
Nepumuk


  

Betrifft: AW: Objektvariable nicht definierte (wenn...) von: Mario
Geschrieben am: 27.09.2019 07:19:03

Guten Morgen Nepumuk!

wahnsinn!!! ich habs soeben getestet! Es funktioniert!!! hab auch schon das angesprochene weitere Userform gebastelt und es läuft alles so wie ich es mir vorgestellt habe. VIELEN HERZLICHEN DANK! lg Mario


Beiträge aus dem Excel-Forum zum Thema "Objektvariable nicht definierte (wenn...)"