Nach Hyperlink zurück zum Tabellenblatt

Hallo zusammen,

ich benötige mal wieder eure Hilfe.
Folgendes Problem:

Mit dem folgenden Makro stelle ich fest, ob sich in D30
ein Hyperlink befindet,
z.B. c:\daten\exceldat\Datei_A.dwg.

Sub Schaltfläche328\_BeiKlick()
Range("d30").Select
 Dim rng As Range
 For Each rng In Selection.Cells
 If Not IsEmpty(rng) Then
 If Dir(rng.Value) "" Then
 rng.Hyperlinks.Add \_
 anchor:=rng, \_
 Address:=rng.Value
 End If
 End If
 Next rng

If Dir(Range("D30").Hyperlinks(1).Address) = "" Then
 Beep
 MsgBox "Hyperlink-Adresse wurde nicht gefunden!"
 Else
 Range("D30").Hyperlinks(1).Follow
 End If
End Sub

Ist das der Fall, wird die Datei im verknüpften
Programm geöffnet.

Wenn ich das Programm wieder schließe, ist Excel in der Taskleiste verschwunden.

Wie sage ich Excel, dass es maximiert bleiben soll??

(Xl2000)

Gruß und danke schonmal.
Rolf

Mit dem folgenden Makro stelle ich fest, ob sich in D30
ein Hyperlink befindet,
z.B. c:\daten\exceldat\Datei_A.dwg.
Ist das der Fall, wird die Datei im verknüpften
Programm geöffnet.
Wenn ich das Programm wieder schließe, ist Excel in der
Taskleiste verschwunden.
Wie sage ich Excel, dass es maximiert bleiben soll??
(Xl2000)

Hallo Rolf,

mit XL200 getestet. Ich habe kein Autocad (dwg) deshalb nahm ich einen Link zu einer .txt.

Excel bleibt im Hintergrund bestehen, der Editor mit der .txt kommt in den Vordergrund.

Ich kann also deine Problematik nicht nachvollziehen.

Gruß
Reinhard

Hallo Reinhard,

richtig, mit einer .txt habe ich das auch getestet - funktioniert.
bei ACAD leider nicht. Danke trotzdem.

Gruß
Rolf

richtig, mit einer .txt habe ich das auch getestet -
funktioniert.
bei ACAD leider nicht. Danke trotzdem.

Hallo Rolf,

du hast geschrieben, Excel wäre nicht mehr in der Taskleiste.
Läuft denn Excel noch.
Mach mal den Affengriff, Strg+Alt+Entf, siehst du da noch EXCel.exe im Taskmanage bzw. Prozessen?

Es gibt meiner Erinnerung nach da eine API-Funktion o.ä., sie müßte „ShellAndWait“ heißen, such mal danach bzw. deren Codes.

Sehr vereinfacht arbeite sie wie Vba-Shell, aber mit API.
D.h. sie startet ein Fremdprogramm, wartet dann bis dieses beendet wird und arbeitet dann weiter, z.B. in deinem Fall um Excel wieder in den Vordergrund zu holen.

Das wäre ein beipiel für die Vba-Shell:

Sub notepadstart()
Dim N
N = Shell(„notepad.exe“, vbMaximizedFocus)
MsgBox „Huhu“
End Sub

N = Shell(„C:…Pfad…\autocad.exe c:\daten\exceldat\Datei_A.dwg“, vbMaximizedFocus)
wäre dann der autocad-Aufruf.

Gruß
Reinhard

richtig, mit einer .txt habe ich das auch getestet -
funktioniert.
bei ACAD leider nicht. Danke trotzdem.

Hallo Reinhard,
danke für Deine Mühe.

du hast geschrieben, Excel wäre nicht mehr in der Taskleiste.
Läuft denn Excel noch.

Da hab ich mich blöd ausgedrückt - sorry: Excel bleibt minimiert in der
Taskleiste, statt nach dem Schließen von ACAD wieder maximiert zu sein.

Mit einer weiteren Schaltfläche öffne ich PDF-Dateien im
Adobe Reader. Nach dem Schließen ist Excel wieder
maximiert im Vordergrund, so, wie es sein soll. Nur nach dem
Schließen von ACAD bleibt Excel minimiert in der Taskleiste.

Es funktioniert also mit anderen Anwendungen, nur mit ACAD nicht.

Es gibt meiner Erinnerung nach da eine API-Funktion o.ä., sie
müßte „ShellAndWait“ heißen, such mal danach bzw. deren Codes.

An ShellAndWait habe ich mich schonmal versucht, habe ich aber
nicht hinbekommen.

Sehr vereinfacht arbeite sie wie Vba-Shell, aber mit API.
D.h. sie startet ein Fremdprogramm, wartet dann bis dieses
beendet wird und arbeitet dann weiter, z.B. in deinem Fall um
Excel wieder in den Vordergrund zu holen.

Das wäre ein beipiel für die Vba-Shell:

Sub notepadstart()
Dim N
N = Shell(„notepad.exe“, vbMaximizedFocus)
MsgBox „Huhu“
End Sub

N = Shell(„C:\MeinVerzeichnis\autocad.exe“)

Dann öffnet er mir ACAD im Hintergrund aber das Makro bleibt
hängen mit der Fehlermeldung
Laufzeitfehler in ‚6‘: Überlauf

c:\daten\exceldat\Datei_A.dwg", vbMaximizedFocus)
wäre dann der autocad-Aufruf.

Soll sich der User doch Excel aus der Taskleiste zurückholen,
oder hast Du noch eine Idee?

Gruß
Rolf

Da hab ich mich blöd ausgedrückt - sorry: Excel bleibt
minimiert in der
Taskleiste, statt nach dem Schließen von ACAD wieder maximiert
zu sein.
Es funktioniert also mit anderen Anwendungen, nur mit ACAD
nicht.

Hallo Rolf,

füge nachstehenden Code in das Modul „DieseArbeitsmappe“ ein.
Dann starte per Hyperlink ACAD. Wenn es nix bewirkt hat nach dem Schließen von ACAD, aktiviere die zweite Sub , wenn das auch nix bringt, die dritte Sub.
(Hochkomma=Deaktivierte Codezeile, Hochkomma weg= aktivierte Codezeile.)

Gruß
Reinhard

Option Explicit
'
Private Sub Workbook\_Deactivate()
Windows(ThisWorkbook.Name).Visible = True
End Sub
'
'Private Sub Workbook\_WindowDeactivate(ByVal Wn As Window)
'Windows(ThisWorkbook.Name).Visible = True
'End Sub
'
'Private Sub Workbook\_WindowResize(ByVal Wn As Window)
'Windows(ThisWorkbook.Name).Visible = True
'End Sub

Da hab ich mich blöd ausgedrückt - sorry: Excel bleibt
minimiert in der
Taskleiste, statt nach dem Schließen von ACAD wieder maximiert
zu sein.
Es funktioniert also mit anderen Anwendungen, nur mit ACAD
nicht.

Hallo Rolf,

füge nachstehenden Code in das Modul „DieseArbeitsmappe“ ein.
Dann starte per Hyperlink ACAD. Wenn es nix bewirkt hat nach
dem Schließen von ACAD, aktiviere die zweite Sub , wenn das
auch nix bringt, die dritte Sub.
(Hochkomma=Deaktivierte Codezeile, Hochkomma weg= aktivierte
Codezeile.)

Option Explicit

Private Sub Workbook_Deactivate()
Windows(ThisWorkbook.Name).Visible = True
End Sub

'Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
'Windows(ThisWorkbook.Name).Visible = True
'End Sub

'Private Sub Workbook_WindowResize(ByVal Wn As Window)
'Windows(ThisWorkbook.Name).Visible = True
'End Sub

Moin Reinhard,

danke für den neuen Versuch, leider alle 3 ohne Reaktion.
Ich habe drüber eine Workbook_Open() Ereignis stehen.
hat es vielleicht damit zu tun?

Gruß
Rolf

VBA ShellandWait warten bis Fremdprogramm beendet

danke für den neuen Versuch, leider alle 3 ohne Reaktion.
Ich habe drüber eine Workbook_Open() Ereignis stehen.
hat es vielleicht damit zu tun?

Hallo Rolf,

nein.

Scheinbar kannst du das Minimieren des Excelfensters mit Normal-Vba nicht abfangen.

Es soll möglich sein mit der API-Funktion das Excel-Fenster auf maximiert zu halten, weiß das aber nicht genau.

Nimm mal den Code von hier.
Kopiere ihn dann komplett in ein Standardmodul.

Das ist viel Code, normal bei API :smile:
Was dich daran interessieren sollte ist unten die zweizeilige Sub.
Rufe da ACAD mit der gewünschten datei auf.

Anstatt der MsgBox, die würde im übrigen im minimierten Fenster erscheinen *gg*, maximierst du das Excel-Fenster.

Kriegste es hin?

Gruß

Reinhard

Application.WindowState = xlMaximized o.w.T.

Moin Reinhard,

Code in ein Modul kopiert,
Aufruf:
ShellAndWait „C:\Mein Verzeichnis\Datei.dwg“
Application.WindowState = xlMaximized
erstmal an eine neue Schaltfläche gehängt und…

nix passiert. Keine Reaktion beim Klick auf die Schaltfläche.

Gruß
Rolf

ShellAndWait „C:\Mein Verzeichnis\Datei.dwg“
Application.WindowState = xlMaximized
erstmal an eine neue Schaltfläche gehängt und…

Moin Rolf,

probiere es mal so:

ShellAndWait „c:…Pfad…\ACAD-ProgrammName.exe C:\Mein Verzeichnis\Datei.dwg“
Application.WindowState = xlMaximized

Gruß
Reinhard

ShellAndWait „C:\Mein Verzeichnis\Datei.dwg“
Application.WindowState = xlMaximized
erstmal an eine neue Schaltfläche gehängt und…

probiere es mal so:

ShellAndWait „c:…Pfad…\ACAD-ProgrammName.exe C:\Mein
Verzeichnis\Datei.dwg“
Application.WindowState = xlMaximized

Hallo Reinhard,
Code hinter einer Schaltfläche aus der Formularleiste:

Option Explicit

Sub Schaltfläche351_BeiKlick()

ShellAndWait „C:\Daten\Verzeichnis\Datei.dwg“
Application.WindowState = xlMaximized

End Sub

Nix - keine Reaktion

Reinhard, lass uns das hier beenden, ist nicht lebenswichtig.
Wäre „nice to have“ gewesen.

Ich komme lieber mal wieder, wenns brennt.

Gruß, danke und allen ein schönes Wochenende
Rolf

ShellAndWait „c:…Pfad…\ACAD-ProgrammName.exe C:\Mein
Verzeichnis\Datei.dwg“
Application.WindowState = xlMaximized

Hallo Reinhard,
Code hinter einer Schaltfläche aus der Formularleiste:

Option Explicit
Sub Schaltfläche351_BeiKlick()
ShellAndWait „C:\Daten\Verzeichnis\Datei.dwg“
Application.WindowState = xlMaximized
End Sub
Nix - keine Reaktion

Reinhard, lass uns das hier beenden, ist nicht lebenswichtig.
Wäre „nice to have“ gewesen.

Hallo Rolf,

nix da, das wird jetzt durchgezogen :smile:

Setz doch bitte das mal um was ich dir vorschlage.
Ich kann es selbst nicht testen.

Du startest eine dwg-Datei.
Ich möchte aber, daß du ein Programm, acad startest mit der dateiangabe als Parameter.

also diese Grundsyntax:

ShellAndWait „ACAD-ProgrammName.exe Datei.dwg“

D.h., innerhalb der Gänsefüßchen trägst du Vorne den gesamten Pfad samt genauem Namen der ACAD-Exe ein, dann ein Leerzeichen, dann den kompletten Pfad samt genauem Namen der dwg-Datei.

Wodran häng es daß du dies nicht machst?

Falls das nicht funktioniert, könnt es noch am Leerzeichen liegen.
Ich meine damit das Leerzeichen in deinen Ordnernamen im Pfad zur dwg.
Also stelle sie sicherheitshalber, also kopieren/verschieben in einen Ordner mit einem überall gültigen Namen.

Also im Pfad zum Ordner oder im Ordnernamen kein Leerzeichen, keine Sonderbuchstaben wie äöü usw.
Und grundsätzlich bei Namensvergaben in dem Zusammenhang, vermeide diese zeichen, bringen nur eines, Ärger :frowning:
Mag zu 95% klappen, was logischerweise bedeutet in jedem 20ten fall krachst.
Krachen = Datei wird nicht gefunden.

Also, probiere jetzt nochmal und gib bitte Feedback.
Und gib dem Ganzen eine Chance, also keine Schreibfehler im Pfad usw.
Obwohl, ich sehe an 351 daß du schon zäh bist *grins*

Gruß
Reinhard

ShellAndWait „c:…Pfad…\ACAD-ProgrammName.exe C:\Mein
Verzeichnis\Datei.dwg“
Application.WindowState = xlMaximized

Hallo Reinhard,
Code hinter einer Schaltfläche aus der Formularleiste:

Option Explicit
Sub Schaltfläche351_BeiKlick()
ShellAndWait „C:\Daten\Verzeichnis\Datei.dwg“
Application.WindowState = xlMaximized
End Sub
Nix - keine Reaktion

Reinhard, lass uns das hier beenden, ist nicht lebenswichtig.
Wäre „nice to have“ gewesen.

Hallo Reinhard,

nix da, das wird jetzt durchgezogen :smile:

ja, ich mach ja schon - menn :smile:
nein - schön, dass Du noch Lust hast, hatte ich nicht
mit gerechnet.

Setz doch bitte das mal um was ich dir vorschlage.
Ich kann es selbst nicht testen.

Du startest eine dwg-Datei.
Ich möchte aber, daß du ein Programm, acad startest mit der
dateiangabe als Parameter.

also diese Grundsyntax:

ShellAndWait „ACAD-ProgrammName.exe Datei.dwg“

D.h., innerhalb der Gänsefüßchen trägst du Vorne den gesamten
Pfad samt genauem Namen der ACAD-Exe ein, dann ein
Leerzeichen, dann den kompletten Pfad samt genauem Namen der
dwg-Datei.

Wodran häng es daß du dies nicht machst?

Falls das nicht funktioniert, könnt es noch am Leerzeichen
liegen.
Ich meine damit das Leerzeichen in deinen Ordnernamen im Pfad
zur dwg.
Also stelle sie sicherheitshalber, also kopieren/verschieben
in einen Ordner mit einem überall gültigen Namen.

Also im Pfad zum Ordner oder im Ordnernamen kein Leerzeichen,
keine Sonderbuchstaben wie äöü usw.
Und grundsätzlich bei Namensvergaben in dem Zusammenhang,
vermeide diese zeichen, bringen nur eines, Ärger :frowning:
Mag zu 95% klappen, was logischerweise bedeutet in jedem 20ten
fall krachst.
Krachen = Datei wird nicht gefunden.

Also, probiere jetzt nochmal und gib bitte Feedback.

Ich hänge mich morgen früh im Büro gleich wieder dran.
Wie komme ich eigentlich aus diesem Archivbereich wieder nach oben?

Obwohl, ich sehe an 351 daß du schon zäh bist *grins*

Wer zum Frell ist 351 ???

Gruß
Rolf

Sub Schaltfläche351_BeiKlick()

Hallo Rolf,

ja, ich mach ja schon - menn :smile:
nein - schön, dass Du noch Lust hast, hatte ich nicht
mit gerechnet.

interresiert mich grad aus Interesse (sicher gutes Deutsch *gg*) warum das bei Acad nicht klappt, bzw. warum da Ecel minimiert bleibt.
Wenn du das was ich sagte umsetzt und testet und es so auch nicht geht, dann weiß ich eh nicht weiter.

Was bedeutet, mein Interesse geht schlagartig auf Null.

Was mir noch einfällt, es gibt da so Einstellungen in Windows, „andere Anwendungen ignorieren“ oder „diese Anwendung im maximierten Fenster öffnen“ usw., vielleicht hängt es da bei Acad an sowas von Windows?

Ich hänge mich morgen früh im Büro gleich wieder dran.
Wie komme ich eigentlich aus diesem Archivbereich wieder nach
oben?

Obwohl, ich sehe an 351 daß du schon zäh bist *grins*

Wer zum Frell ist 351 ???

Sub Schaltfläche351_BeiKlick()

Gruß
Reinhard

Moin Reinhard,

Erfolgsmeldung:
ShellAndWait „C:\Programme\AutoCAD LT 2007\acadlt.exe C:\Pfad\Datei.dwg“

Das funktioniert. Excel ist nach dem Schließen von ACAD
wieder maximiert dahinter - super :smile:

Ich will natürlich nicht immer dieselbe Datei öffnen.

Der Dateiname, wenn erforderlich auch mit Pfad, wird per
SVERWEIS in Zelle D30 eingetragen.

Wie bringe ich ihn nun dazu, dass er den dort eingetragenen
Dateinamen verwendet? (Zur Erinnerung: vorher mit
„Range(„D30“).Hyperlinks(1).Follow“ gelöst.)

Hast Du noch eine Idee?

Gruß
Rolf

Erfolgsmeldung:
ShellAndWait „C:\Programme\AutoCAD LT 2007\acadlt.exe
C:\Pfad\Datei.dwg“

Das funktioniert. Excel ist nach dem Schließen von ACAD
wieder maximiert dahinter - super :smile:
Ich will natürlich nicht immer dieselbe Datei öffnen.
Der Dateiname, wenn erforderlich auch mit Pfad, wird per
SVERWEIS in Zelle D30 eingetragen.

Moin Rolf,

da gibt es viele Möglichkeiten.

Klicke mit rechts unten auf den Blattnamen, dann Code anzeigen.
Dortrein den Code reinkopieren.

Das ist automatischer Ereigniscode, zur Auswahl hast du drei Möglichkeiten wann der Code loslaufen soll.
Also entweder Doppelklick auf D30, oder Rechtsklick auf D30 oder einfacher Klick auf D30.
Letzterer läuft auch los wenn du mit der tastatur die D30 erreichst.

Zum Inhalt von D30, auch da sind drei Varianten was drin stehen muß.
Nur der reine Dateiname, nur Dateipfad und dateiname, komplett mit Programm.

Such dir was aus, die vier nicht benötigten Zeilen dann löschen oder mit Hochkomma deaktiviert lassen.

'Private Sub Worksheet\_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'Private Sub Worksheet\_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Private Sub Worksheet\_SelectionChange(ByVal Target As Range)
If Target.Address(0, 0) "D30" Then Exit Sub
ShellAndWait "C:\Programme\AutoCAD LT 2007\acadlt.exe C:\Pfad\" & Target.Value
'ShellAndWait "C:\Programme\AutoCAD LT 2007\acadlt.exe " & Target.Value
'ShellAndWait Target.Value
End Sub

Gruß
Reinhard

Ich will natürlich nicht immer dieselbe Datei öffnen.
Der Dateiname, wenn erforderlich auch mit Pfad, wird per
SVERWEIS in Zelle D30 eingetragen.

Klicke mit rechts unten auf den Blattnamen, dann Code
anzeigen.
Dortrein den Code reinkopieren.

Das ist automatischer Ereigniscode, zur Auswahl hast du drei
Möglichkeiten wann der Code loslaufen soll.
Also entweder Doppelklick auf D30, oder Rechtsklick auf D30
oder einfacher Klick auf D30.
Letzterer läuft auch los wenn du mit der tastatur die D30
erreichst.

Zum Inhalt von D30, auch da sind drei Varianten was drin
stehen muß.
Nur der reine Dateiname, nur Dateipfad und dateiname, komplett
mit Programm.

Such dir was aus, die vier nicht benötigten Zeilen dann
löschen oder mit Hochkomma deaktiviert lassen.

'Private Sub Worksheet_BeforeDoubleClick(ByVal Target As
Range, Cancel As Boolean)
'Private Sub Worksheet_BeforeRightClick(ByVal Target As Range,
Cancel As Boolean)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address(0, 0) „D30“ Then Exit Sub
ShellAndWait „C:\Programme\AutoCAD LT 2007\acadlt.exe
C:\Pfad“ & Target.Value
'ShellAndWait "C:\Programme\AutoCAD LT 2007\acadlt.exe " &
Target.Value
'ShellAndWait Target.Value
End Sub

Hallo Reinhard,

auch das hat geklappt, habe die Doppelklick-Variante genommen.
Funktioniert nun wie gedacht.
War ne schwere Geburt. Danke für Deine Geduld.

Frohes Schaffen noch

Gruß
Rolf