Per VBA in andere Arbeitsmappe?

Moin zusammen,

ich hätt’ gern ein Problem:

Mit folgendem Code öffne ich die vorhandene Datei2.xls
im Verzeichnis C:\Daten\Exceldat\ und aktiviere Zelle B5:

Sub Schaltfläche25\_BeiKlick()

'Datei Öffnen
Workbooks.Open "C:\Daten\Exceldat\Datei2.xls"

'Arbeitsblatt und Zelle auswählen
Sheets("Birnen").Select
 Range("B5").Select

End Sub

Das Problem:
Ist Datei2.xls bereits geöffnet, fragt er zunächst:
Datei2 ist bereits geöffnet. Wenn Sie es erneut … Soll Deitei2.xls
erneut geöffnet werden?

Ich antworte mit nein und erhalte die VBA-Fehlermeldung:
Laufzeitfehler ‚1004‘
Die Methode ‚Open‘ für das Objekt ‚Workbooks‘ ist fehlgeschlagen.

Frage:
Lässt sich das abfangen, so dass er doch in die geöffnete
Datei springt?

Danke schonmal

Gruß
Rolf

Hallo Rolf

ich hätt’ gern ein Problem:

Und ich wäre froh, wenn ich keine hätte!! :smile:)

Sub Schaltfläche25_BeiKlick()

'Datei Öffnen
Workbooks.Open „C:\Daten\Exceldat\Datei2.xls“

'Arbeitsblatt und Zelle auswählen
Sheets(„Birnen“).Select
Range(„B5“).Select

End Sub

Das Problem:
Ist Datei2.xls bereits geöffnet, fragt er zunächst:
Datei2 ist bereits geöffnet. Wenn Sie es erneut … Soll
Deitei2.xls
erneut geöffnet werden?

Lässt sich das abfangen, so dass er doch in die geöffnete
Datei springt?

Schau mal, ob es damit klappt:

Sub Datei_oeffnen()

On Error GoTo offn

Windows(„Datei2.xls“).Activate
goto blattwahl

offn:
Workbooks.Open Filename:= _
„C:\Daten\Exceldat\Datei2.xls“

blattwahl:
'Arbeitsblatt und Zelle auswählen
Sheets(„Birnen“).Select
Range(„B5“).Select

End Sub

Das Vorgehen in diesem Makro ist im Grunde genommen „verkehrt“: Ich gehe davon aus, dass die betr. Datei bereits geöffnet ist. Wenn sie nicht geöffnet ist, dann soll sie geöffnet werden. - Anders konnte ich die Fehlermeldung nicht abfangen.

Ich hoffe, es geht auch bei Dir.
Viele Grüsse
Niclaus

Danke :smile:
Hallo Niclaus,

das klappt prima.

Vielen Dank für die schnelle Hilfe.

Hast Du vielleicht noch einen Tipp für mich?

Wie kann ich aus Datei2.xls in die aufrufende Datei, ich nenne
sie mal Datei1.xls, zurückspringen?

Datei 2 steht immer im selben Verzeichnis C:\Daten\Exceldat\Datei2.xls. Datei 1 aber nicht.

Hast Du eine Idee?

Gruß
Rolf

Das Problem:
Ist Datei2.xls bereits geöffnet, fragt er zunächst:
Datei2 ist bereits geöffnet. Wenn Sie es erneut … Soll
Deitei2.xls
erneut geöffnet werden?

Ich antworte mit nein und erhalte die VBA-Fehlermeldung:
Laufzeitfehler ‚1004‘

Hallo Rolf,

vielleicht so:

Option Explicit

Sub Schaltfläche25\_BeiKlick()
Dim wkb As Workbook, Vorh As Boolean
Const Pfad As String = "C:\Daten\Exceldat\"
Const Datei As String = "DATEI2.XLS"
For Each wkb In Workbooks
 If UCase(wkb.Name) = Datei Then
 Vorh = True
 Exit For
 End If
Next wkb
'Datei Öffnen
If Vorh = False Then Workbooks.Open Pfad & Datei
'Arbeitsblatt und Zelle auswählen
With Workbooks("Datei").Worksheets("Birnen")
 Application.Goto .Range("B5")
End With
End Sub

Gruß
Reinhard

Wie kann ich aus Datei2.xls in die aufrufende Datei, ich nenne
sie mal Datei1.xls, zurückspringen?

Datei 2 steht immer im selben Verzeichnis
C:\Daten\Exceldat\Datei2.xls. Datei 1 aber nicht.

Hast Du eine Idee?

Hallo Rolf,

eine ungetestete Idee wäre, du setzt in Datei1 einen kompletten Hyperlink auf
C:\Daten\Exceldat\Datei2.xls
in Datei2 nur einen Hyperlink auf Datei1 ohne Pfadangabe.

Gruß
Reinhard

Wie kann ich aus Datei2.xls in die aufrufende Datei, ich nenne
sie mal Datei1.xls, zurückspringen?

Datei 2 steht immer im selben Verzeichnis
C:\Daten\Exceldat\Datei2.xls. Datei 1 aber nicht.
Hast Du eine Idee

Hallo Rolf

Die Datei 1 ist aber immer offen? Habe ich das richtig verstanden?
Wenn ja, dann mit einem Hyperlink, wie es Reinhard vorschlägt. Oder mit folgendem Makro:

Sub offnen_Datei1()
Windows(„Datei1.xls“).Activate
End Sub

Grüsse Niclaus

Neues Problem
Danke euch beiden,

ich hatte verschwiegen, dass die Datei1 vorher
umbenannt wird - sorry :frowning:

Der Name von Datei1 ist unbestimmt.
Hyperlink oder Makro auf den Dateinamen klappt daher nicht.
Er müsste sich die aufrufende Datei „merken“, um sie wiederzufinden.

Gruß
Rolf

ich hatte verschwiegen, dass die Datei1 vorher
umbenannt wird - sorry :frowning:

Der Name von Datei1 ist unbestimmt.
Hyperlink oder Makro auf den Dateinamen klappt daher nicht.
Er müsste sich die aufrufende Datei „merken“, um sie
wiederzufinden.

Hallo Rolf,

bevor dann später noch was vergessenes auftaucht.
Beschreibe mal bitte exakt was vorliegt.

Fest ist der Pfad zu Datei2 und bekannt?
Diese Datei soll aus einer Datei mit unbekanntem Namen aufgerufen werden bzw dort soll B5angesprungen werden.
Aus Datei2 willst du wieder in die aufrufende Datei1 zurückspringen?

Ist das soweit völlig exakt oder was verschweigst du uns noch? :smile:

Gruß
Reinhard

Hallo Reinhard,

bevor dann später noch was vergessenes auftaucht.
Beschreibe mal bitte exakt was vorliegt.

Fest ist der Pfad zu Datei2 und bekannt?

Ja

Diese Datei soll aus einer Datei mit unbekanntem Namen
aufgerufen werden bzw dort soll B5angesprungen werden.

Ja

Aus Datei2 willst du wieder in die aufrufende Datei1
zurückspringen?

Ja

Ist das soweit völlig exakt

Ja

oder was verschweigst du uns noch?

-)

Nein, das ist die ganze Wahrheit :smile:

Gruß
Rolf

oder was verschweigst du uns noch?

-)

Nein, das ist die ganze Wahrheit :smile:

Hallo Rolf,

okay, dann teste mal dieses, es gehört ins Modul des Tabellenblattes wo du mit einem Hyperlink datei2!B5 anspringst.
Es eerzeugt in Datei2 in Blatt1!A1 einen „Zurück“-Hyperlink.

Option Explicit

Private Sub Worksheet\_FollowHyperlink(ByVal Target As Hyperlink)
Dim strMappe As String, strTab As String, Adresse As String
Worksheets("Tabelle1").Range("A2").Value = Target.Parent
Adresse = Replace(Target.Parent, "'", "")
strMappe = Split(Adresse, "[")(1)
strMappe = Left(strMappe, InStr(strMappe, "]") - 1)
strTab = Split(Adresse, "]")(1)
strTab = Left(strTab, InStr(strTab, "!") - 1)
With Workbooks(strMappe).Worksheets(strTab)
 .Hyperlinks.Add Anchor:=.Range("A1"), Address:="", SubAddress:= \_
 "[Mappe1]Tabelle1!A1", TextToDisplay:="Zurück"
End With
End Sub

Gruß
Reinhard

Windows bzw. workbooks hilft hier ganz einfach
Hi,

man kann doch Dateien generisch ansprechen. Es gibt eine Liste der Dateien: workbooks(1), workbooks(2). Diese listet die vorhandenen Dateien in der Reihenfolge der Öffnung. Genauso für Fenster.
Mache zwei Dateien auf und teste mal diesen Makrotext:
sub test()
Windows(2).Activate 'öffnen das entsprechende 2.Fenster
Windows(1).Activate
Workbooks(1).Activate 'öffnet die entsprechende 1.Excel-Datei
Workbooks(2).Activate
end sub

Manfred

Hallo Reinhard,

okay, dann teste mal dieses, es gehört ins Modul des
Tabellenblattes wo du mit einem Hyperlink datei2!B5
anspringst.
Es eerzeugt in Datei2 in Blatt1!A1 einen „Zurück“-Hyperlink.

Option Explicit

Private Sub Worksheet_FollowHyperlink(ByVal Target As
Hyperlink)
Dim strMappe As String, strTab As String, Adresse As String
Worksheets(„Tabelle1“).Range(„A2“).Value = Target.Parent
Adresse = Replace(Target.Parent, „’“, „“)
strMappe = Split(Adresse, „[“)(1)
strMappe = Left(strMappe, InStr(strMappe, „]“) - 1)
strTab = Split(Adresse, „]“)(1)
strTab = Left(strTab, InStr(strTab, „!“) - 1)
With Workbooks(strMappe).Worksheets(strTab)
.Hyperlinks.Add Anchor:=.Range(„A1“), Address:="",
SubAddress:= _
„[Mappe1]Tabelle1!A1“, TextToDisplay:=„Zurück“
End With
End Sub

danke für Deine Mühe.

Du dröselst augenscheinlich den Blattnamen auf, auf dem
der „Zurück“-Hyperlink erzeugt werden soll.

Habe versucht, das anzupassen, krieg ich aber nicht hin :frowning:

Das Blatt, wo der „zurück“-Hyperlink hin soll, heisst links im
VBA Projektbrowser Tabelle26(Schnecken).

Würdest Du mir das noch anpassen bitte?

Tabelle1 ist ausgeblendet und heisst links im VBA Projektbrowser
Tabelle1(Irgendwas). Da ist der „Zurück“-Hyperlink
nicht angekommen.

Gruß
Rolf

Hallo Manfred,

man kann doch Dateien generisch ansprechen. Es gibt eine Liste
der Dateien: workbooks(1), workbooks(2). Diese listet die
vorhandenen Dateien in der Reihenfolge der Öffnung. Genauso
für Fenster.
Mache zwei Dateien auf und teste mal diesen Makrotext:
sub test()
Windows(2).Activate 'öffnen das entsprechende 2.Fenster
Windows(1).Activate
Workbooks(1).Activate 'öffnet die entsprechende 1.Excel-Datei
Workbooks(2).Activate
end sub

Das klappt prima, solange der User nicht zwischendurch
eine andere Datei öffnet. Dann landet er plötzlich
ganz woanders. Aber das ist dann wohl „Erziehungssache“.

Danke Dir

Gruß
Rolf

Hallo Rolf,

Du dröselst augenscheinlich den Blattnamen auf, auf dem
der „Zurück“-Hyperlink erzeugt werden soll.

ja, ich muß ja wissen wohin der Hyperlink springen will um dort dann den Zurück-Hyperlink anlegen zu müssen.

Das Blatt, wo der „zurück“-Hyperlink hin soll, heisst links im
VBA Projektbrowser Tabelle26(Schnecken).

Das ermittelt der Code sich schon selbst.

Tabelle1 ist ausgeblendet und heisst links im VBA
Projektbrowser
Tabelle1(Irgendwas). Da ist der „Zurück“-Hyperlink
nicht angekommen.

Doch, der neue Zurück-Hyperlink wurde eingetragen, aber wenn das Blatt ausgeblendet ist siehste das nicht, blende es ein…
Oder, auch kein Akt, soll der Code das einblenden?

Das vor der Klammer ist der Codename des Blattes, den kannst du nur mit Vba abändern. Ansonsten bleibt er fest solange das Blatt existiert.
Das in Klammern ist der Blattname, den siehst du in Excel und kannst ihn nach Wunsch abändern.

Generell ist überall mit Blattname dieser Blattname gemeint.
Wenn jmd. den Codenamen meint muß er es dazu sagen/schreiben.
In der Syntax Worksheets(„Name“) ist auch der Blattname gemeint.

Nachstehend neuer Coide, kommentiere den alten aus oder lösche ihn.
Der Code gehört in das Modul „DieseArbeitsmappe.“
Der Code wird schiefgehen, wenn du Hyperlinks auf PDFs, Webseiten o.ä. hast, muß ich noch coden.

Option Explicit

Private Sub Workbook\_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink)
Dim strMappe As String, strTab As String, Adresse As String
Dim Ziel As String
Adresse = Replace(Target.SubAddress, "'", "")
If InStr(Adresse, "[") \> 0 Then
 strMappe = Split(Adresse, "[")(1)
 strMappe = Left(strMappe, InStr(strMappe, "]") - 1)
 strTab = Split(Adresse, "]")(1)
 strTab = Left(strTab, InStr(strTab, "!") - 1)
Else
 strMappe = ThisWorkbook.Name
 strTab = Left(Adresse, InStr(Adresse, "!") - 1)
End If
With Workbooks(strMappe).Worksheets(strTab)
 Ziel = "'[" & ThisWorkbook.Name & "]" & Sh.Name & "'!A1"
 .Hyperlinks.Add Anchor:=.Range("A1"), Address:="", SubAddress:= \_
 Ziel, TextToDisplay:="Zurück", ScreenTip:=Ziel
End With
End Sub

Name kann VBA abfragen
Guten Tag,

Hi Rolf;

dann müßte man per VBA den gegenwärtigen Namen der Dateien abfragen:

Datei1 = workbooks(1).name
Datei2 = workbooks(2).name

Dann wieder wie oben wechseln mit „workbooks(Datei1).activate“

Die Reihenfolge, also welche Datei workbooks(1) usw. ist, sollte sich aber nicht ändern. Hier werden auch nur Excel-Dateien angesprochen im Gegensatz zu windows(datei1), welcher Befehl Fenster wechselt. Wie „ALT+TAB“.

Gruß
Manfred

Hallo Reinhard,

Du dröselst augenscheinlich den Blattnamen auf, auf dem
der „Zurück“-Hyperlink erzeugt werden soll.

ja, ich muß ja wissen wohin der Hyperlink springen will um
dort dann den Zurück-Hyperlink anlegen zu müssen.

Das Blatt, wo der „zurück“-Hyperlink hin soll, heisst links im
VBA Projektbrowser Tabelle26(Schnecken).

Das ermittelt der Code sich schon selbst.

Tabelle1 ist ausgeblendet und heisst links im VBA
Projektbrowser
Tabelle1(Irgendwas). Da ist der „Zurück“-Hyperlink
nicht angekommen.

Doch, der neue Zurück-Hyperlink wurde eingetragen, aber wenn
das Blatt ausgeblendet ist siehste das nicht, blende es ein…

Hab’ ich doch, ist trotzdem nicht da.

Oder, auch kein Akt, soll der Code das einblenden?

Neiiiin :smile:

Das vor der Klammer ist der Codename des Blattes, den kannst
du nur mit Vba abändern. Ansonsten bleibt er fest solange das
Blatt existiert.
Das in Klammern ist der Blattname, den siehst du in Excel und
kannst ihn nach Wunsch abändern.

Generell ist überall mit Blattname dieser Blattname gemeint.
Wenn jmd. den Codenamen meint muß er es dazu sagen/schreiben.
In der Syntax Worksheets(„Name“) ist auch der Blattname
gemeint.

Nachstehend neuer Coide, kommentiere den alten aus oder lösche
ihn.
Der Code gehört in das Modul „DieseArbeitsmappe.“

Der Code wird schiefgehen, wenn du Hyperlinks auf PDFs,
Webseiten o.ä. hast, muß ich noch coden.

Nein, nein, nur auf die 2. Excel-Datei.

Option Explicit

Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object,
ByVal Target As Hyperlink)
Dim strMappe As String, strTab As String, Adresse As String
Dim Ziel As String
Adresse = Replace(Target.SubAddress, „’“, „“)
If InStr(Adresse, „[“) > 0 Then
strMappe = Split(Adresse, „[“)(1)
strMappe = Left(strMappe, InStr(strMappe, „]“) - 1)
strTab = Split(Adresse, „]“)(1)
strTab = Left(strTab, InStr(strTab, „!“) - 1)
Else
strMappe = ThisWorkbook.Name
strTab = Left(Adresse, InStr(Adresse, „!“) - 1)
End If
With Workbooks(strMappe).Worksheets(strTab)
Ziel = „’[“ & ThisWorkbook.Name & „]“ & Sh.Name & „’!A1“
.Hyperlinks.Add Anchor:=.Range(„A1“), Address:="",
SubAddress:= _
Ziel, TextToDisplay:=„Zurück“, ScreenTip:=Ziel
End With
End Sub

Beim Klick auf den Hyperlink in Tabelle1 fragt er zunächst, ob er
die Makros in Tabelle2 aktivieren soll. --> makros aktivieren

Dann kommt die Fehlermeldung:
Laufzeitfehler 5
Ungültiger Prozeduraufruf oder ungültiges Argument.

Die Zeile
strTab = Left(Adresse, InStr(Adresse, „!“) - 1)
ist gelb markiert.

Gruß
Rolf

Hallo Rolf,

Der Code wird schiefgehen, wenn du Hyperlinks auf PDFs,
Webseiten o.ä. hast, muß ich noch coden.

Nein, nein, nur auf die 2. Excel-Datei.

zu spät :smile:, ist schon im nachstehenden allerneuesten Code drin.

Beim Klick auf den Hyperlink in Tabelle1 fragt er zunächst, ob
er
die Makros in Tabelle2 aktivieren soll. --> makros aktivieren

Das bedeutet, wie so waren es anfangs zwei Mappen jetzt zwie Blätter?, jedenfalls so gesehen hat nur eine Mappe Makros die man (de-) aktivieren kann, also muß Excel da eine Pappe aktivieren.

Das ist vwas anderes als bislang wo ich davon ausging, daß beide Mappen offen sind.

Dann kommt die Fehlermeldung:
Laufzeitfehler 5
Ungültiger Prozeduraufruf oder ungültiges Argument.
Die Zeile strTab = Left(Adresse, InStr(Adresse, „!“) - 1)
ist gelb markiert.

Das kannst nur du klären wenn es auftritt, Klick auf "Debuggen und fahr mit der Maus über „Adresse“ und alle relevanten Variablen…
Oder/und setz ein Msgbox Adresse davor usw. und beende die Codeausführung und aktiviere wieder den Hyperlink.
Alles Dinge die ich so allmählich bei dir voraussetze…

Option Explicit

Private Sub Workbook\_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink)
Dim strMappe As String, strTab As String, Adresse As String, Ziel As String
If Target.SubAddress = "" Then Exit Sub
Adresse = Replace(Target.SubAddress, "'", "")
If InStr(Adresse, "[") \> 0 Then
 strMappe = Split(Adresse, "[")(1)
 strMappe = Left(strMappe, InStr(strMappe, "]") - 1)
 strTab = Split(Adresse, "]")(1)
 strTab = Left(strTab, InStr(strTab, "!") - 1)
Else
 strMappe = ThisWorkbook.Name
 strTab = Left(Adresse, InStr(Adresse, "!") - 1)
End If
With Workbooks(strMappe).Worksheets(strTab)
 Ziel = "'[" & ThisWorkbook.Name & "]" & Sh.Name & "'!"
 Ziel = Ziel & Sh.Cells(Target.Parent.Row, Target.Parent.Column).Address(0, 0)
 .Hyperlinks.Add Anchor:=.Range("A1"), Address:="", SubAddress:= \_
 Ziel, TextToDisplay:="Zurück", ScreenTip:=Ziel
End With
End Sub

Nachtrag @Reinhard
Hallo Reinhard,

ich habe gerade den Rücksprung-Hyperlink entdeckt, allerdings in
Mappe1, Blatt 1 und im Absprungblatt (Mappe1) zu Mappe2.

Er springt also Innerhalb der Mappe1, aber nicht in Mappe2
und zurück.

Gruß
Rolf

ich habe gerade den Rücksprung-Hyperlink entdeckt, allerdings
in
Mappe1, Blatt 1 und im Absprungblatt (Mappe1) zu Mappe2.

Er springt also Innerhalb der Mappe1, aber nicht in Mappe2
und zurück.

Hallo Rolf,

die neueste Version habe ich von Blatt zu BLatt einer Mappe und von Mappe zu Mappe getestet.

Soll da jetzt noch eingebaut werden, daß ggfs. die Zielmappe geöffnet werden soll wenn geschlossen?

Gruß
Reinhard.

Hallo Reinhard,

ich habe gerade den Rücksprung-Hyperlink entdeckt, allerdings
in
Mappe1, Blatt 1 und im Absprungblatt (Mappe1) zu Mappe2.

Er springt also Innerhalb der Mappe1, aber nicht in Mappe2
und zurück.

Hallo Rolf,

die neueste Version habe ich von Blatt zu BLatt einer Mappe
und von Mappe zu Mappe getestet.

Soll da jetzt noch eingebaut werden, daß ggfs. die Zielmappe
geöffnet werden soll wenn geschlossen?

Das wäre hübsch, weil wenn der User das erste mal von Mappe1
in Mappe2 springt, ist diese immer gesxchlossen.

Gruß
Rolf
(Danke für Deine Geduld)