Makro ansprechen

Hallo an Alle,

ich habe folgendes Problem. Ich habe ein Excel file mit zwei Tabellenblättern.
In Blatt zwei (Tabelle2) ist ein Image eingebunden. Dazu habe ich ein Makro geschrieben ( SUB Bild() ). Dieses Makro soll bewirken, dass verschiedene Zeichnungen die beim bedienen der Userform generiert werden im Image in Tabelle 2 angezeigt werden. Das funktioniert wenn ich das Makro im Projekt Explorer in „Tabelle2“ ablege und starte.
Insgesamt wird das Program über eine Userform gesteuert.
Wenn ich jetzt ein Command Button in der Userform einfüge mit dem Befehl Call Bild kommt eine Fehlermeldung . Wenn ich das Makro als „Makro“ speichere kann ich es von der Userform aus mit Call Bild ansprechen dann funktioniert aber das Einbinden der Zeichnungen in das Image auf Blatt Tabelle2 nicht ??

Gruss und schönes Wochenende

Hi Heiner,
poste doch mal die Codes die du hast, die Fehlermeldung, bei 1004, 9, langt die Nummer.
Das mit dem Namen „Makro“ habe ich nicht ganz verstanden, eher überhaupt nicht. Als Sub Makro() läuft es ,als Sub Bild() nicht?
Achja, bei den Codes, auch, in welchem Codeteil sie stehen.
Und welche Steuerelemente in der UF und in der Tabelle sind.
Gruß
Reinhard

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Vielen Dank für Deine Antwort,
hier mal das Makro
Sub Bild()
Worksheets(„Tabelle2“).Select
Dim Verzeichnis As String, Bilddatei As String
On Error GoTo Fehlerbehandlung
Select Case Range(„a19“)
Case 0 'Einzelauswahl
If Range(„a19“) = -1 Then
Image1.Picture = Merz.jpg
Exit Sub
End If
End Select
Verzeichnis = ThisWorkbook.Sheets(„Tabelle2“).Range(„a18“).Value 'Verzeichnis mit den Bilddateien
Bilddatei = Range(„a19“) & „.jpg“
Image1.Picture = LoadPicture(Verzeichnis & „“ & Bilddatei)
Exit Sub
Fehlerbehandlung:
MsgBox (" Die Datei " & vbLf & Verzeichnis & „“ & Bilddatei & vbLf & „existiert nicht!“)

ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Worksheets(„Tabelle1“).Select

End Sub
Projekt explorer
This workbook
Modul1
Modul2
Modul3
Tabelle1
Tabelle2
Userform1
Wenn ich obiges Makro in Tabelle2 kopiere und von da aus starte funktioniert alles. Das heisst die ausgewählte Zeichnung wird in das Image in Tabelle 2 eingefügt.
Ich will aber die Zeichnung von der userform aus einfügen und das Tabellenblatt2 drucken.
Wenn ich von der userform aus call bild über eine Schaltfläche bediene kommt die Fehlermeldung das er das Makro nicht findet

Schönen Tag noch

Wenn ich obiges Makro in Tabelle2 kopiere und von da aus
starte funktioniert alles. Das heisst die ausgewählte
Zeichnung wird in das Image in Tabelle 2 eingefügt.
Ich will aber die Zeichnung von der userform aus einfügen und
das Tabellenblatt2 drucken.
Wenn ich von der userform aus call bild über eine Schaltfläche
bediene kommt die Fehlermeldung das er das Makro nicht findet

Hi Heiner,
dein Case-Zweig wird zwar angesprungen wenn A19 0 ist, aber dort passiert nichts weil A19 nicht gleichzeitig -1 sein kann.
Ich habe das mal so gebastelt, auf tabellenblatt2 hast du eine Schaltfläche die das makro Zeigen() startet, also die UF anzeigt.
Auf der UF hast du einen CommandButton1 und ein Image1.
Bei Klick auf diesen UF-CommandButon wird je nach A19 ein unterschiedliches Bild in Image1 angezeigt.
Ist das das was du willst?
Achja, benutze bitte den Pre-Tag beim Posten von Code.
Gruß
Reinhard

Code in Modul1:

Option Explicit
Sub Bild()
Dim Verzeichnis As String, Bilddatei As String
On Error GoTo Fehlerbehandlung
Worksheets("Tabelle2").Select
Range("A18") = "C:\Dokumente und Einstellungen\All Users\Dokumente\Eigene Bilder\Beispielbilder"
Verzeichnis = ThisWorkbook.Sheets("Tabelle2").Range("a18").Value 'Verzeichnis mit den Bilddateien
Range("A19") = "Sonnenuntergang"
'Range("A19") = ""
If Range("a19") = "" Then
 UserForm1.Image1.Picture = LoadPicture(Verzeichnis & "\" & "Blaue Berge.jpg")
Else
 Bilddatei = Range("a19") & ".jpg"
 UserForm1.Image1.Picture = LoadPicture(Verzeichnis & "\" & Bilddatei)
 ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
End If
Exit Sub
Fehlerbehandlung:
MsgBox (" Die Datei " & vbLf & Verzeichnis & "\" & Bilddatei & vbLf & "existiert nicht!")
Worksheets("Tabelle1").Select
End Sub

Sub zeigen()
UserForm1.Show vbModeless
End Sub

Code in Userform1:

Option Explicit
Private Sub CommandButton1\_Click()
Call Bild
End Sub

Hallo Reihard,

vielen Dank für die schnelle Antwort,
was bedeutet Pre - Tag ?

Nun zum Problem.

Wenn ich den Com Button in Tabellenblatt einfüge und clicke hat das vorher schon funktioniert.
Die Userform allerdings ist in Tabellenblatt1 eingefügt. Dort gibt es auch ein Image1 die die gleiche Zeichnung zeigt. Diese Zeichnung soll in Image1 auf Tabellenblatt2 ebenfalls angezeigt werden. Sinn dabei ist: èber die Userform wird eine Maschinenskizze generiert. Diese soll in ein bekanntes Formblatt übertragen werden (Tabellenblatt2) und dann ausgedruckt werden - ohne dass der Bediener dieses Blatt sieht.

Im Moment druckt Tabellenblatt2 - die Zeichnung wechselt aber nicht. Ursprünglich wird in Tabellenblatt1 Das Verzeichnis und die Bilddatei generiert. Ich habe in Tabellenblatt2 nur die entsprechenden Zeilen aus Blatt 1 kopiert.

Ich befürchte ich habe nicht zur Klärung beigetragen ??

Gruss

Heiner

Hi Heiner,
dein Case-Zweig wird zwar angesprungen wenn A19 0 ist, aber
dort passiert nichts weil A19 nicht gleichzeitig -1 sein kann.
Ich habe das mal so gebastelt, auf tabellenblatt2 hast du eine
Schaltfläche die das makro Zeigen() startet, also die UF
anzeigt.
Auf der UF hast du einen CommandButton1 und ein Image1.
Bei Klick auf diesen UF-CommandButon wird je nach A19 ein
unterschiedliches Bild in Image1 angezeigt.
Ist das das was du willst?
Achja, benutze bitte den Pre-Tag beim Posten von Code.
Gruß
Reinhard

Code in Modul1:

Option Explicit
Sub Bild()
Dim Verzeichnis As String, Bilddatei As String
On Error GoTo Fehlerbehandlung
Worksheets(„Tabelle2“).Select
Range(„A18“) = „C:\Dokumente und Einstellungen\All
Users\Dokumente\Eigene Bilder\Beispielbilder“
Verzeichnis =
ThisWorkbook.Sheets(„Tabelle2“).Range(„a18“).Value
'Verzeichnis mit den Bilddateien
Range(„A19“) = „Sonnenuntergang“
'Range(„A19“) = „“
If Range(„a19“) = „“ Then
UserForm1.Image1.Picture = LoadPicture(Verzeichnis & „“ &
„Blaue Berge.jpg“)
Else
Bilddatei = Range(„a19“) & „.jpg“
UserForm1.Image1.Picture = LoadPicture(Verzeichnis & „“ &
Bilddatei)
ActiveWindow.SelectedSheets.PrintOut Copies:=1,
Collate:=True
End If
Exit Sub
Fehlerbehandlung:
MsgBox (" Die Datei " & vbLf & Verzeichnis & „“ & Bilddatei &
vbLf & „existiert nicht!“)
Worksheets(„Tabelle1“).Select
End Sub

Sub zeigen()
UserForm1.Show vbModeless
End Sub

Code in Userform1:

Option Explicit
Private Sub CommandButton1_Click()
Call Bild
End Sub

was bedeutet Pre - Tag ?

Hi Heiner,
sie erhalten Formatierungen,Einrückungen, schau mal genauer auf dieses Eingabeformular wenn du antwortest, dort gibt es Hilfe dazu.

Wenn ich den Com Button in Tabellenblatt einfüge und clicke
hat das vorher schon funktioniert.
Die Userform allerdings ist in Tabellenblatt1 eingefügt. Dort
gibt es auch ein Image1 die die gleiche Zeichnung zeigt. Diese
Zeichnung soll in Image1 auf Tabellenblatt2 ebenfalls
angezeigt werden. Sinn dabei ist: èber die Userform wird eine
Maschinenskizze generiert. Diese soll in ein bekanntes
Formblatt übertragen werden (Tabellenblatt2) und dann
ausgedruckt werden - ohne dass der Bediener dieses Blatt
sieht.

Im Moment druckt Tabellenblatt2 - die Zeichnung wechselt aber
nicht. Ursprünglich wird in Tabellenblatt1 Das Verzeichnis und
die Bilddatei generiert. Ich habe in Tabellenblatt2 nur die
entsprechenden Zeilen aus Blatt 1 kopiert.

Ich befürchte ich habe nicht zur Klärung beigetragen ??

Sehe ich ähnlich :smile:
Kannste mal eine kleine Beipieldatei mit gleichem Grundaufbau basteln und hochladen, z.B. bei http://www.badongo.com/
Gruß
Reinhard

Hallo Reinhard,

vielen Dank für die Tipps. Es hat alles geklappt. Jetzt werde ich wohl übermütig.
Mit dem Programm wird eine Anlagenskizze generiert. Eindruck würde alles noch machen wenn ich in einem Image die Firmenlogos der Referenzanlagen zeigen könnte.
Dazu habe ich mir gedacht, dass ich die Logos als jpg ablege. Jetzt bräuchte ich - aufbauend auf das bereits laufende - ein Makro das in einem separaten Image die Firmenlogos im 10 sek. Takt zeigt.

???

Gruss und schönen Tag noch
Heiner

Dazu habe ich mir gedacht, dass ich die Logos als jpg ablege.
Jetzt bräuchte ich - aufbauend auf das bereits laufende - ein
Makro das in einem separaten Image die Firmenlogos im 10 sek.
Takt zeigt.

Hi Heiner,
den Imagenamen musst du noch anpassen so wie die Pfade und Namen.
Die UF wird modeless gestartet, trotzdem gelang es mir nicht die Anzeige durch Angabe eines Wertes in einer zelle abzubrechen. Abbruch geht nur mit Strg+Pause bisher.
Auch
Private Sub UserForm_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
ActiveWorkbook.VBProject.VBE.CommandBars(1).Controls(7).Controls(3).Execute
End Sub
half nicht richtig weiter.

In ein Modul:

Option Explicit
Option Base 1
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub Bild()
Dim nr As Byte, Verzeichnis As String, Bilddatei, merker
Verzeichnis = "C:\Dokumente und Einstellungen\All Users\Dokumente\Eigene Bilder\Beispielbilder\"
Bilddatei = Array("Sonnenuntergang", "Blaue Berge", "Winter")
nächstes:
 nr = nr + 1
 If nr = 4 Then nr = 1
 merker = Timer
 UserForm1.Image1.Picture = LoadPicture(Verzeichnis & Bilddatei(nr) & ".jpg")
 UserForm1.Repaint
 Sleep 1000 'Wartezeit in Millisekunden
 UserForm1.Image1.Picture = LoadPicture("")
GoTo nächstes
End Sub

Sub zeigen()
UserForm1.Show vbModeless
Call Bild
End Sub

Gruß
Reinhard

Ich sage nur „geil“

Danke funktioniert

Gruss Heiner

Jetzt bräuchte ich - aufbauend auf das bereits laufende - ein
Makro das in einem separaten Image die Firmenlogos im 10 sek.
Takt zeigt.

Hi Heiner,
ich fragte woanders nach und Nepumuk half mir, deshalb ungetestet aber läuft nahezu garantiert (zum Abbruch auf das Bild klicken):

' \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
' Modul: Modul1 Typ: Allgemeines Modul
' \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*

Option Explicit

Private Declare Sub Sleep Lib "kernel32" ( ByVal dwMilliseconds As Long)

Public blnClose As Boolean

Public Sub zeigen()
 blnClose = False
 UserForm1.Show vbModeless
 Call Bild
End Sub

Private Sub Bild()
 Dim nr As Byte, Verzeichnis As String, Bilddatei, merker
 Verzeichnis = "D:\Eigene Dateien\Eigene Bilder\"
 Bilddatei = Array("004", "005", "007", "014")
 Do
 For nr = 0 To 3
 UserForm1.Image1.Picture = LoadPicture(Verzeichnis & Bilddatei(nr) & ".gif")
 UserForm1.Repaint
 Sleep 1000 'Wartezeit in Millisekunden
 UserForm1.Image1.Picture = Nothing
 DoEvents
 If blnClose Then Exit Do
 Next
 Loop
 Unload UserForm1
End Sub

' \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
' Modul: UserForm1 Typ: Userform
' \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*

Option Explicit

Private Sub Image1\_Click()
 blnClose = True
End Sub

Ich sage nur „geil“

Danke funktioniert

Gruss Heiner

Nachtrag - Du hast recht, das stoppen macht Probleme da das Programm dann abstürzt.

Gruss