VBA EXCEL nach Externer Anwendung zu Tabellenblatt

Ich habe ein Tabellenblatt, in dem Bilder geschpeichert sind und rufe mit einem Makro ein Bild in einem externen Bildbetrachtungsprogramm (IrfanView) ab. Nach Ende des Makros muss ich erst auf das Tabellenblatt klicken, um es wieder zu aktivieren und an der Zelle zu landen, von der aus ich das Makro aufgerufen habe. Ich finde keine Anweisung, die das im Makro bewerkstelligt.

Mein Makro schaut so aus:

Sub Bildaufruf()

Aufruf = Bildprog + " " + Datenprog + DatenortRelativ + „“ + Bild
Shell Aufruf, vbNormalNoFocus
End Sub

Die einzelnen Werte für „Aufruf“ werden im Programm erstellt.

Könnt Ihr mir helfen?

Hallo
Tabelle1.select
range(„A1“).select

oder irgend etwas mit setfocus, ginge dies nicht?

Grüsse Sebastian

Danke! Es hat funktioniert. Dass ich da nicht selbst draufgekommen bin. Ich dachte, das hätte ich schon negativ probiert. War nicht so. Danke, Danke, Danke. Das mit setfocus muss ich noch prüfen

Grüezi symphony

Nach Ende des Makros
muss ich erst auf das Tabellenblatt klicken, um es wieder zu
aktivieren und an der Zelle zu landen, von der aus ich das
Makro aufgerufen habe. Ich finde keine Anweisung, die das im
Makro bewerkstelligt.

Ich fürchte, dass das auch nicht so einfach möglich sein wird, da der Fokus nicht mehr auf Excel liegt nachdem das Bild angezeigt worden ist.

IMO gibt es auch kein Ereignis das man auswerten könnte.

Muss IrfanView denn den Fokus haben?

Vielleicht könntest Du im Code drin am Ende Excel wieder aktivieren, aber dazu fehlt IMO noch einiges an Code, den Du verwendest - oder ist der obige Ausschnitt alles, einfach eingekürzt?

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Gruezi und Hallo aus Österreich! Danke für die Meldung. Ich gebe nach dem Shell einfach an, dass er das Tabellenblatt.select und die Zelle.select, aus der ich das Bildprogramm aus anwähle. Das funktioniert. Ich sehe beides am Bildschirm Tabellenblatt und Bild.
Man kann von verschiedenen Tabellenblättern im selben Workbook das machen. Bei manchen hat sich ein Laufzeitfehler gezeigt. Den habe ich - dirty - mit on Error goto … ausgeschaltet. Das Programm macht damit, was ich will.
Das Programm soll auf verschiedenen Computern oder besser gesagt Bildschirmen laufen. Für jeden der Bildschirme muss man die Gestaltung von Tabelle und Bild händisch anpassen. Da blicke ich noch nicht ganz durch, wie man Tabelle und Bild an fixen Stellen in bestimmten Größen platzieren kann.
Gruezi und Hallo

Jetzt - nach abspeichern und neuem laden - funktioniert das nicht mehr. Einen focus auf das Bildprogramm hätte ich gerne, weil man da drin dann auch blättern kann. Aber wie kann man excel wieder aktivieren? Mein Code schaut so aus Sub

QUOTE
Bildaufruf()

’ Zeigt Bilder mit einem Bildbetrachtungsprogramm
’ Neue Computer werden auf dem Tabellenblatt „Steuerung“ automatisch eingetragen,
’ Das zugehörige Bildbetrachtungsprogramm wird vom Programm abgefragt ist einzugeben
’ dessen Aufruf im Blatt „Steuerung“ dann automatisch eingetragen

CompName = Environ(„COMPUTERNAME“)

Datenprog = Application.ActiveWorkbook.Path
aktBlatt = ActiveSheet.Name
aktZelle = ActiveCell.Address
DatenLaufWerk = Left(Datenprog, 3)

’ Programmbereich BILDPROG

If CompName = „GERHARDTOLAR-PC“ Then
Bildprog = Sheets(„Steuerung“).Cells(6, 2).Value
ElseIf CompName = „PC2“ Then
Bildprog = Sheets(„Steuerung“).Cells(2, 2).Value
Else
Bildprog = DatenLaufWerk + „IrfanView\i_view32.exe“
'MsgBox („Geben sie in das Feld B1 des Tabellenblattes ‚Steuerung‘ den Aufruf ihres Bildbetrachtungsprogrammes ein“)
End If

SpalteBild = 2

Bild = Sheets(aktBlatt).Cells(ActiveCell.Row, SpalteBild)

If Bild = „“ Then ’ Fehlerbehandlung
MsgBox („Hier ist kein Bild vorhanden“)
GoTo Weiter
ElseIf ActiveCell.Column > 12 Then
MsgBox („Sie müssen einen Eintrag auswählen“)
ElseIf Left(ActiveCell.Column, 5) = „Bild“ Then
GoTo Weiter
End If

DatenortRelativ = Sheets(„Steuerung“).Range(„DatenortRelativ“)

If DatenortRelativ „“ Then
DatenortRelativ = „“ + DatenortRelativ
End If

If InStr(Bild, „Margarethen_“) Then
Bild = Bild + „.gif“
ElseIf Right(Bild, 4) = „.pdf“ Then
Bild = Bild
Else
Bild = Bild + „.jpg“
End If

Aufruf = Bildprog + " " + Datenprog + DatenortRelativ + „“ + Bild

Shell Aufruf, vbNormalNoFocus

On Error GoTo Weiter
Sheets(aktBlatt).Activate
Range(aktZelle).Select

Weiter:
End Sub
UNQOTE HILFE!

Hallo,

vielleicht hast Du vergessen, die Anwendung Excel wieder aufzurufen und dort den Focus auf das Worksheet zu legen.

Gruß,
Ptonka

Hallo Ptonka
Wie geht das Excel wieder aufrufen und den Focus auf das Worksheet zu legen? Ich finde dazu nichts.

Guten Tag,

schau mal diese zwei befehle an, Workbook_WindowDeactivate

schreibt in einer zelle Tabellenname und Zelle

Workbook_WindowActivate

liest die zelle wieder aus und aktiviert die Tabelle und Zelle

das war’s

Hallo symphony60,

soweit reichen meine Kenntnisse nicht. Da kann ich nicht helfen.

Gru Hugo

Diese Lösung, einfach das Tabelenbaltt und die Zelle wieder aufzurufen, hat geklappt. Neben shell kann man das machen. Mein weiteres Problem war nur, wenn ich das auf zwei verschiedenen Bildschirmen gemacht habe, hat es nicht geklappt. Wenn ich das auf dem gleichen Bildschirm begonnen habe, hat es auch auf zwei Bildschirmen geklappt. Die Größe des Bildfensters auf dem Bildschirm löse ich mit dem Bildbetrachtungsprogramm. Ich habe jetzt eine Lösung. Jedenfalls herzlichen Dank an das Forum. Habe wieder was dazugelernt.

Guten Tag,

schau mal diese zwei befehle an,
Workbook_WindowDeactivate

schreibt in einer zelle Tabellenname und Zelle

Workbook_WindowActivate

liest die zelle wieder aus und aktiviert die Tabelle und Zelle

das war’s

gruß fred