Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1748to1752
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Grafik in Image, wenn Text in TextBox
08.04.2020 17:00:03
Dieter(Drummer)
Guten Tag VBA Spezialisten*innen.
Im Modul der Userform1, soll ein Image3 eingefügt werden, wenn TextBox 4 den Text "Krebs" zeigt.
Mein Versuch zeigt aber Fehler "Laufzeit Fehler 13, Typen unverträglich" (fette Zeile).
Das Bild (jpg) ist auf Tabelle1, Name ist "Grafik 16".
Kann meinen Fehler nicht finden. Wie muss es richtig heißen?
Mit der Bitte u Hilfe,
grüßt Dieter(Drummer)
  • If TextBox4.Text = "Krebs" Then
    UserForm1.Image3.Picture = ActiveSheet.Shapes.Range(Array("Picture 16"))
    Else
    Image1.Picture = Nothing
    End If

  • 20
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: Grafik in Image, wenn Text in TextBox
    08.04.2020 18:34:29
    volti
    Hallo Dieter,
    ich glaube, das funktioniert so gar nicht. Aber vielleicht weiß es ja einer besser....
    Ansonsten kann ich Dir folgenden Code anbieten, der nach kurzer Anpassung auf Deine Verhältnisse die angegebene Grafik in Dein Userform-Image setzt. (Konnte leider nur die 64-Bit-Variante testen)
    Probiere es einfach mal aus:

    Option Explicit
    #If VBA7 Then
    Private Declare PtrSafe Function OleCreatePictureIndirect Lib "oleaut32.dll" ( _
            ByRef PicDesc As PIC_DESC, ByRef RefIID As GUID, _
            ByVal fPictureOwnsHandle As LongPtr, ByRef IPic As IPictureDisp) As Long
    Private Declare PtrSafe Function CopyImage Lib "user32" ( _
            ByVal handle As LongPtr, ByVal un1 As Long, ByVal n1 As Long, _
            ByVal n2 As Long, ByVal un2 As Long) As LongPtr
    Private Declare PtrSafe Function IsClipboardFormatAvailable Lib "user32" ( _
            ByVal wFormat As Long) As Long
    Private Declare PtrSafe Function SetClipboardData Lib "user32" (ByVal wFormat As Long, _
            ByVal hMem As LongPtr) As LongPtr
    Private Declare PtrSafe Function GetClipboardData Lib "user32" ( _
            ByVal wFormat As Long) As LongPtr
    Private Declare PtrSafe Function OpenClipboard Lib "user32" (ByVal hWnd As LongPtr) As Long
    Private Declare PtrSafe Function CloseClipboard Lib "user32" () As Long
    Private Declare PtrSafe Function EmptyClipboard Lib "user32" () As Long
    Private Declare PtrSafe Function RegisterClipboardFormat Lib "user32" _
            Alias "RegisterClipboardFormatA" (ByVal lpString As String) As Long
     
    Private Type PIC_DESC
       lSize As Long
       lType As Long
       hPic  As LongPtr
       hPal  As LongPtr
    End Type
    #Else
    Private Declare Function OleCreatePictureIndirect Lib "oleaut32.dll" ( _
            ByRef PicDesc As PIC_DESC, ByRef RefIID As GUID, _
            ByVal fPictureOwnsHandle As Long, ByRef IPic As IPictureDisp) As Long
    Private Declare Function CopyImage Lib "user32" ( _
            ByVal handle As Long, ByVal un1 As Long, ByVal n1 As Long, _
            ByVal n2 As Long, ByVal un2 As Long) As Long
    Private Declare Function IsClipboardFormatAvailable Lib "user32" ( _
            ByVal wFormat As Long) As Long
    Private Declare  Function SetClipboardData Lib "user32" (ByVal wFormat As Long, _
            ByVal hMem As Long) As Long
    Private Declare Function GetClipboardData Lib "user32" ( _
            ByVal wFormat As Long) As Long
    Private Declare Function OpenClipboard Lib "user32" (ByVal hWnd As Long) As Long
    Private Declare Function CloseClipboard Lib "user32" () As Long
    Private Declare Function EmptyClipboard Lib "user32" () As Long
    Private Declare Function RegisterClipboardFormat Lib "user32" _
            Alias "RegisterClipboardFormatA" (ByVal lpString As String) As Long
     
    Private Type PIC_DESC
       lSize As Long
       lType As Long
       hPic  As Long
       hPal  As Long
    End Type
    #End If
    Private Type GUID
       Data1 As Long
       Data2 As Integer
       Data3 As Integer
       Data4(0 To 7) As Byte
    End Type
    Private Const PICTYPE_BITMAP = 1
    Private Const CF_BITMAP = 2
    Private Const IMAGE_BITMAP = 0
    Private Const LR_COPYRETURNORG = &H4
    Sub KopiereBildinUserform()
     CopyPictureByName "Picture 16"
     Paste_Picture
     UserForm1.Show
    End Sub
    Function CopyPictureByName(sBild As String) As Boolean
    'Kopiert das angegebne Bild in die Zwischenablage
     Dim oShape As Shape
     With ActiveSheet
       For Each oShape In .Shapes
         If oShape.Name = sBild Then
            oShape.CopyPicture Appearance:=xlScreen, Format:=xlBitmap
            CopyPictureByName = True
            DoEvents
            Exit For
         End If
       Next oShape
     End With
    End Function
    Sub Paste_Picture()
    'Holt ein Bild aus der Zwischenablage und esfügt in das Control ein
     Dim oPict As IPictureDisp
     #If VBA7 Then
     Dim hPic  As LongPtr, hCopy As LongPtr
     #Else
     Dim hPic  As Long, hCopy As Long
     #End If
     If IsClipboardFormatAvailable(CF_BITMAP) <> 0 Then
        If OpenClipboard(0&) <> 0 Then
           hPic = GetClipboardData(CF_BITMAP)
           hCopy = CopyImage(hPic, IMAGE_BITMAP, 0, 0, LR_COPYRETURNORG)
           CloseClipboard
           If hPic <> 0 Then Set oPict = Create_Picture(hCopy)
            If Not oPict Is Nothing Then
    '######### Hier die Userform und Image-Angaben anpassen ########
               UserForm1.Image3.Picture = oPict
            Else
               MsgBox "Das Bild kann nicht angezeigt werden", vbCritical, "Bild einfügen"
            End If
        End If
     End If
    End Sub
    #If VBA7 Then
    Private Function Create_Picture( _
            ByVal hPic As LongPtr) As IPictureDisp
    #Else
    Private Function Create_Picture( _
            ByVal hPic As Long) As IPictureDisp
    #End If
     Dim tPicInfo As PIC_DESC, tID_IDispatch As GUID
     Dim oPict As IPictureDisp
     With tID_IDispatch
         .Data1 = &H20400
         .Data4(0) = &HC0
         .Data4(7) = &H46
     End With
     With tPicInfo
         .lSize = Len(tPicInfo)
         .lType = PICTYPE_BITMAP
         .hPic = hPic
         .hPal = 0
     End With
     OleCreatePictureIndirect tPicInfo, tID_IDispatch, 0&, oPict
     Set Create_Picture = oPict
    End Function

    viele Grüße
    Karl-Heinz

    Anzeige
    AW: Grafik in Image, wenn Text in TextBox
    08.04.2020 18:55:55
    Dieter(Drummer)
    Danke Karl-Heinz,
    deine Variante ist wohl nicht für mich die Beste Lösung.
    Die Lösung von Daniel, 12 Images mit ein-/ausblenden zu nutzen, ist wohl nicht ganz so umfassend.
    Danke dir dennoch für die Code Variante.
    Gruß und einen schönen Abend,
    Dieter(Drummer)
    AW: Grafik in Image, wenn Text in TextBox
    08.04.2020 18:47:00
    Daniel
    Hi
    Da es wahrscheinlich um maximal 12 Bilder geht (Tierkreiszeichen) würde ich dir empfehlen, entsprechen 12 Image-Controls anzulegen und dort die Bilder im Edit-Modus über die Eigenschaftsliste auszuwählen.
    Dann brauchst du zur Programmlaufzeit nur das jeweilige Steuerelement ein- und die anderen auszublenden.
    Oder du Legat dir eine Multipage mit 12 Seiten an, Legat auf jede Seite ein Bild und musst dann nur noch die richtige Seite aktivieren.
    Gruß Daniel
    Anzeige
    AW: Grafik in Image, wenn Text in TextBox
    08.04.2020 18:51:26
    Dieter(Drummer)
    Danke Daniel,
    Du hast das richtig gesehen mit den 12 Tierkreiszeichen.Ich denke deine Lösung ist wohl die sinnvollste., die 12 mit ein-/ausblenden zu machen.
    Danke dir und einen schönen Abend.
    Gruß, Dieter(Drummer
    AW: Grafik in Image, wenn Text in TextBox
    09.04.2020 10:48:46
    Dieter(Drummer)
    Guten Morgen Daniel,
    ich habe jetzt für jede Tierkreis Grafik ein Image angelegt (Grup1- Grup12). Wenn der entsprechende Text des Tierkreiszeichens in TextBox4 erscheint, wird die entsprechende Grafik (Grup...) angezeigt, Das funktioniert.
    Kann der Teilcode gekürzt werden und wie? Musterdatei anbei: https://www.herber.de/bbs/user/136556.xlsm
    Gruß, Dieter(Drummer)
    Hier der Teilcode, mit dem ich das gemacht habe:
    'Grafiken Tierkreiszeichen zeigen ja/nein
    
    If TextBox4.Text = "Wassermann" Then
    UserForm1.Grup1.Visible = True
    Else
    Grup1.Visible = False
    End If
    If TextBox4.Text = "Fische" Then
    UserForm1.Grup2.Visible = True
    Else
    Grup2.Visible = False
    End If
    If TextBox4.Text = "Widder" Then
    UserForm1.Grup3.Visible = True
    Else
    Grup3.Visible = False
    End If
    If TextBox4.Text = "Stier" Then
    UserForm1.Grup4.Visible = True
    Else
    Grup4.Visible = False
    End If
    If TextBox4.Text = "Zwilling" Then
    UserForm1.Grup5.Visible = True
    Else
    Grup5.Visible = False
    End If
    If TextBox4.Text = "Krebs" Then
    UserForm1.Grup6.Visible = True
    Else
    Grup6.Visible = False
    End If
    If TextBox4.Text = "Löwe" Then
    UserForm1.Grup7.Visible = True
    Else
    Grup7.Visible = False
    End If
    If TextBox4.Text = "Jungfrau" Then
    UserForm1.Grup8.Visible = True
    Else
    Grup8.Visible = False
    End If
    If TextBox4.Text = "Waage" Then
    UserForm1.Grup9.Visible = True
    Else
    Grup9.Visible = False
    End If
    If TextBox4.Text = "Skorpion" Then
    UserForm1.Grup10.Visible = True
    Else
    Grup10.Visible = False
    End If
    If TextBox4.Text = "Schütze" Then
    UserForm1.Grup11.Visible = True
    Else
    Grup11.Visible = False
    End If
    If TextBox4.Text = "Steinbock" Then
    UserForm1.Grup12.Visible = True
    Else
    Grup12.Visible = False
    End If
    

    Anzeige
    AW: Grafik in Image, wenn Text in TextBox
    09.04.2020 11:32:08
    Daniel
    Hi
    Beispielsweise so:
    Benennen die 12 controls nach einem festen Schema, beispielsweise
    "imgTK_Steinbock"
    "imgTK_Krebs"
    ...
    Dh mit einem gleichen Anfangsteil und dann dem Text, der auch in der Textbox steht.
    Dann
    dim crt as controls
    For each crt in me.controls
    If crt.Name like "imgTK_*" then
    If crt.Name like "*" & Textbox4.Text then
    crt.visible = True
    Else
    crt.visible = False
    End if
    Ende if
    Next
    
    Gruß Daniel
    AW: Grafik in Image, wenn Text in TextBox
    09.04.2020 11:39:19
    Dieter(Drummer)
    Danke Daniel,
    werde es umsetzen und melde mich dann nochmal, wird aber etwas dauern.
    Gruß, Dieter(Drummer)
    Anzeige
    AW: Grafik in Image, wenn Text in TextBox
    09.04.2020 13:17:58
    Dieter(Drummer)
    Danke erstmal Daniel für deine Geduld und Hilfe.
    Hier ist meine geänderte Datei. Dort sind alle Images auf der Userform1 geändert, z.B. "imgTK_Krebs" etc.
    Leider weiß ich nicht, an welche Stelle ich deinen Code jetzt einfügen muss.
    Mit der Bitte nochmal um Hilfe,
    grüßt Dieter(Drummer)
    Datei: https://www.herber.de/bbs/user/136568.xlsm
    AW: Grafik in Image, wenn Text in TextBox
    09.04.2020 13:40:37
    Daniel
    Probiert doch mal an der Stelle, an welcher sich dein bisheriger langer Code zum ein- und ausblenden befand.
    Ansonsten dort, wo der Text in die Textbox4 geschrieben wird.
    AW: Grafik in Image, wenn Text in TextBox
    09.04.2020 14:11:02
    Dieter(Drummer)
    Hallo Daniel,
    habe Code an die Stelle gesetzt, wo ich meinen Code vorher hatte. Bei Eingabe des Geb.datums wird ein Fehler in deinem Code angezeigt: "Laufzeitfehler 13, Typen unverträglich" und Zeile ist gelb markiert:
    For Each crt In Me.Controls
    
    .
    Mach ich etwas falsch?
    Gruß, Dieter(Drummer)
    Anzeige
    Hast Du Ende If auf End If geändert?
    09.04.2020 14:39:50
    Helmut
    AW: Hast Du Ende If auf End If geändert?
    09.04.2020 14:43:19
    Dieter(Drummer)
    Hallo Helmut,
    ja, habe Ende If auf End If geändert.
    Gruß, Dieter(Drummer)
    AW: Hast Du Ende If auf End If geändert?
    09.04.2020 14:49:23
    Dieter(Drummer)
    Hallo Helmut,
    hier mal meine jetzige Datei, die den Fehler aufwirft: https://www.herber.de/bbs/user/136573.xlsm
    Gruß, Dieter(Drummer)
    AW: ..sollte klappen...
    09.04.2020 18:39:04
    Dieter(Drummer)
    Herzlichen Dank Helmut,
    es klappt soweit, ausser bei Eingabe der ersten Zahl, z.B. 1, wird sofort schon die Grafik "imgTK:Steinbock"gezeigt, obwohl noch nicht das komplette Geburtsdatum eingegeben ist.
    Wenn dann das komplette Datum drin ist, kommt auch die entsprechende Grafik.
    Wär schön wenn Du da noch den Fehler findest.
    Gruß, Dieter(Drummer)
    Anzeige
    AW: ..sollte klappen...
    09.04.2020 19:01:13
    Helmut
    https://www.herber.de/bbs/user/136579.xlsm
    Du scheinst aber echt nicht selbst ein wenig zu denken zu wollen...
    Man muss nur Textbox4 auf "" prüfen.
    Du hast doch schon andere Beispieldateien geliefert...
    Gruß Helmut
    AW: ..sollte klappen...
    09.04.2020 19:14:05
    Dieter(Drummer)
    Danke Helmut,
    für deinen Hinweis und werde es umsetzen.
    Danke für deine Lösung und
    Gruß, Dieter(Drummer)
    AW: ..sollte klappen... nun klappt es ...
    10.04.2020 09:13:33
    Dieter(Drummer)
    Guten Morgen Helmut,
    nun geht es, nach deinem neuen Hinweis. Vielen Dank für deine Hilfe.
    Gruß, Dieter(Drummer)
    Habe es so umgesetzt:
    'Grafiken Tierkreiszeichen zeigen ja/nein
    Dim crt As Object
    If TextBox4  "" Then
    For Each crt In Me.Controls
    If crt.Name Like "imgTK_*" Then
    If crt.Name Like "*" & TextBox4.Text Then
    crt.Visible = True
    Else
    crt.Visible = False
    End If
    End If
    Next
    End If
    End Sub
    

    Anzeige
    AW: Hast Du Ende If auf End If geändert?
    10.04.2020 00:23:22
    Daniel
    hi Dieter
    du hast da einen kleinen Tippfehler drin.
    da objektvariablen in der regel nur ein objekt aufnehmen, deklariert man sie im Sigular:
    dim crt as Control
    
    du hast aber "Controls" geschrieben, daher funktioniert es nicht.
    Gruß Daniel
    AW: Nun klappt ...
    10.04.2020 09:09:44
    Dieter(Drummer)
    Guten Morgen Daniel,
    wenn ich deinen Hinweis umsetzte, also "Controls" auf "Control", dann kommt ein Fehler "Fehler beim Kompilieren: Methode oder Datenobjekt nicht gefunden" und ".Control" ist blau markiert. Habe das "s" wieder an Controls angehängt und mit Hinweis von Helmut, "TextBox4 " den Code angepasst. Ich geh davon aus, dass ich es korrekt umgesetzt habe.
    Gruß und allen die mir geholfen haben, herzlichen Dank!
    Dieter(Drummer)
    Jetzt funktioniert es. Hier hier jetziger Teilcode:
    'Grafiken Tierkreiszeichen zeigen ja/nein
    Dim crt As Object
     If TextBox4  "" Then
    For Each crt In Me.Controls
    If crt.Name Like "imgTK_*" Then
    If crt.Name Like "*" & TextBox4.Text Then
    crt.Visible = True
    Else
    crt.Visible = False
    End If
    End If
    Next
    End If
    End Sub
    

    Anzeige

    299 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Links zu Excel-Dialogen

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige