Ich bin sehr verwirrt, nachdem ich versucht habe, herauszufinden, wie das geht. Es ist sehr einfach, aber ich kann noch keine Lösung finden.
Was ich wissen möchte, ist Folgendes. Ich habe drei separate Dokumente, die alle in gewissem Maße verknüpft sind. Die Daten werden aus einem Dokument (1. Haupteingabe) eingegeben und in den drei Tabellenblättern zusammengefasst.
Jedes Dokument ist identisch aufgebaut, die einzigen variablen Faktoren sind die Daten und für die Haupteingabe haben wir numerische Werte.
In einer Illustrationsform sieht das so aus:
a. 1 Master-Eingang --> (führt zu) 2,3 b. 2 --> (führt zu) 3 und 4 c. 3 --> (führt zu) 4
Was ich wissen möchte, ist, dass sich die Daten in den Dokumenten 2, 3 und 4 jedes Jahr ändern. Ich habe als Beispiel viele „Hyperlinks“ der Tabelle:
2015 =" \Täglicher Umsatz\2015[Umsatz 2015.xls]Jahresübersicht'!$C$160"
2016 =" \Täglicher Umsatz\2016[Umsatz 2016.xls]Jahresübersicht'!$C$160"
2017 =" \Täglicher Umsatz\2017[Umsatz 2017.xls]Jahresübersicht'!$C$160"
Von den oben genannten Variablen muss ich nur das Jahr ändern. Gibt es einen Code/Makro usw., mit dem ich das ersetzen kann?JAHRinnerhalb des Hyperlinks. Bedenken Sie, dass der Dateipfadstetsbleibt gleich.
Ich bin mir voll und ganz bewusst,suchen und ErsetzenFunktion, ich möchte es jedoch benutzerfreundlich und einfach gestalten.
Bitte helfen Sie mir, danke!
Antwort1
Erstens sprechen Sie immer wieder von Hyperlinks. Ich denke, Sie meinen Formeln, die auf andere Dateien verweisen. Das sind keine Hyperlinks. Hier ist die Lösung, wenn Sie wirklich Hyperlinks gemeint haben:
Um Ihre eigentliche Frage zu beantworten: Ja, dafür gibt es ein Makro. Sicher. Ich denke, was Sie wissen müssen, ist das Worksheet.Hyperlinks
Objekt. Sie können jeden Hyperlink in jedem Arbeitsblatt durchlaufen und die Adresse durch alles ersetzen, was Sie wollen. Hier ist ein Beispielausschnitt:
Sub ChangeHyperlinks()
Dim ws As Worksheet
Dim hyp As Hyperlink
For Each hyp In ws.Hyperlinks
hyp.Address = Replace(hyp.Address, "2015", "2016")
Next
End Sub
Sie müssen es ändern, wenn Sie es nicht ändern möchtenjedenHyperlink, indem Sie bedingte Anweisungen wie hinzufügen If InStr(1, hyp.Address, "\Daily Revenue\2015") Then
. Sie könnten das Workbook_Open
Ereignis verwenden, um es jedes Mal auszuführen, wenn die Datei geöffnet wird, das richtige Jahr basierend auf dem Dateinamen zu ermitteln und dann das Ersetzen für die Hyperlinks auszuführen. Ja, dies würde ausgelöstjedenwenn die Datei geöffnet wird, auch wenn sie bereits korrekt ist. Je nachdem, wie viele Hyperlinks Sie haben, kann das kein Problem sein oder alles zum Stillstand bringen.
Und hier ist ein Codeausschnitt, falls Sie eigentlich Formeln gemeint haben. Auch hier müssen Sie es weiter an Ihre Bedürfnisse anpassen, aber das sollte Ihnen den Einstieg erleichtern.
Private Sub Workbook_Open()
Dim i As Integer
Dim srcArray As Variant
srcArray = ThisWorkbook.LinkSources(xlLinkTypeExcelLinks)
For i = 1 To UBound(srcArray)
Debug.Print srcArray(i)
ThisWorkbook.ChangeLink srcArray(i), Replace(srcArray(i), "2015", "2016")
Next
End Sub
Wenn Sie Formeln meinten, dann ist Ihre Frage ein Duplikat vonPaketüberfluss.
Antwort2
Ihre Frage enthält einige Unklarheiten. Diese Antwort geht davon aus, dass Sie von Zellbezügen in anderen Arbeitsmappen sprechen, wie in Ihren Beispielen dargestellt, und nicht von Hyperlinks, und dass die Aufgabe darin besteht, die Bezüge so einzurichten, dass sie nach Jahr anpassbar sind, anstatt jedes Jahr alle Formeln neu zu schreiben.
Zuerst brauchen Sie irgendwo einen Jahresbezug. Es ist nicht klar, wann oder auf welche Weise das Jahr geändert werden soll (automatisch am 1. Januar jedes Jahres? An einem Datum Ihrer Wahl? Sie möchten das Jahr jederzeit ändern können?). Ich werde also eine allgemeine Lösung wählen. Wählen Sie eine Zelle für den Jahresbezug. Für mein Beispiel verwende ich die Zelle Z1
des Arbeitsblatts, die die Zellbezüge in Ihrem Beispiel enthält. Wenn Sie das Jahr nach Belieben oder an einem Datum Ihrer Wahl ändern möchten, geben Sie einfach Z1
das vierstellige Jahr ein. Wenn das Jahr automatisch am 1. Januar geändert werden soll, verwenden Sie =YEAR(TODAY())
.
Anstatt das Jahr in jede Formel fest zu codieren, verketten Sie einen Verweis Z1
und verwenden die Funktion INDIREKT, um die Textzeichenfolge in einen Zellverweis umzuwandeln. Beispiel:
'\Daily Revenue\2015[Revenue 2015.xls]Year Summary'!$C$160 becomes
INDIRECT("'\Daily Revenue\"&Z1&"[Revenue "&Z1&".xls]Year Summary'!$C$160")
Bei einem bestehenden Arbeitsblatt müssten Sie einmalig die Zellbezüge anpassen. Danach können Sie das Jahr jederzeit durch Ändern des Z1
Eintrags ändern.