Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
308to312
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
308to312
308to312
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Problem mit verwaisten Verweisen

Problem mit verwaisten Verweisen
16.09.2003 17:56:27
Peter
Hallo zusammen,

ich komme im Moment nicht weiter:

In einer umfangreichen Arbeitsmappe erstelle ich per VBA-Code neue Arbeitsblätter, die auch automatisch benannt werden. In einigen Fällen gilt es, gleichnamige alte Arbeitsblätter zu ersetzen. Um mit der Namensgleichheit nicht in Konflikt zu kommen, lösche ich diese vor der Neuerstellung von Hand.

Leider gibt es Zellverweise in anderen Tabellen, die dann mit #Bezug! ihr Waisendasein kundtun. Ich möchte nun nicht mühselig alle Verweise auf die neue (wie gesagt: gleichnamige) Seite von Hand umstellen. Mit benannten Bereichen bin ich da auch nicht viel weiter gekommen.

Weiß jemand Rat?

Vielen Dank und Gruß

Peter

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Problem mit verwaisten Verweisen
16.09.2003 19:45:06
andre
hallo peter,
du musst erst die neuen blätter anlegen, dann die bezüge ändern, dann die alten löschen und dann die indizees der blätter wegnehmen.
zum bezüge ändern geht z.b. das:
aus einem anderen makro hier aus dem forum abgeleitet

Sub FormelErsetzen()
'verknüpfte Dateien bitte schliessen!
'zuerst Blätter kopieren - Index der neuen Blätter muss hier
'im Beispiel " (2)" sein
'Beispiel funktioniert nur bei Syntax "=Blattname!..." richtig
'steht der Name weiter hinten oder kommt mehrfach vor geht's nicht
Dim Tab1 As Object
Dim Zelle1 As Object
Dim AlleFormeln As Object
On Error GoTo FehlerVerknüpfungAuflösen
For Each Tab1 In ActiveWorkbook.Worksheets
Set AlleFormeln = Tab1.Cells.SpecialCells(xlFormulas, 23)
For Each Zelle1 In AlleFormeln
'Formeln in denen Punkt und anführungsstriche stehen sind vermutlich Verknüpfungen
If InStr(Zelle1.Formula, ".") = 0 And InStr(Zelle1.Formula, "'") = 0 Then
'Formeln mit Ausrufezeichen sind wahrscheinlich Bezüge
If InStr(Zelle1.Formula, "!") > 0 Then
'Blattname und rechten Teil extrahieren
blatt = Mid$(Zelle1.Formula, 2, InStr(Zelle1.Formula, "!") - 2)
rechts = Right$(Zelle1.Formula, Len(Zelle1.Formula) - InStr(Zelle1.Formula, "!"))
Zelle mit Formel mit neuem Blattname füllen
Zelle1.Formula = "='" & blatt & " (2)'!" & rechts
End If
End If
Next Zelle1
Next Tab1
Exit Sub
FehlerVerknüpfungAuflösen:
If Err = 1004 Or Err = 424 Or Err = 91 Or Err = 92 Then Resume Next Else MsgBox ("Keine Zellen mit externen Verknüpfungen gefunden")
End Sub

gruss andre
Anzeige
AW: Problem mit verwaisten Verweisen
17.09.2003 09:45:16
Peter
Hallo Andre,

erst Mal vielen Dank für deine Antwort. Zum Thema "Bezüge ändern" wird mir das Code-Beispiel auf jeden Fall weiterhelfen. Wahrscheinlich könnte ich auch die jeweils neu erstellte Tabelle nach Anpassung der Bezüge umbenennen.

Bleiben noch folgende Punkte unklar:

1. Es gibt nur 4 Arbeitsblätter(nennen wir sie hier Tabellen A - D), in denen die Formeln angepasst werden müssten. Zu jedem dieser 4 gehört eine Gruppe von ca. 6 Tabellen, auf die in den Formeln Bezug genommen wird (Tabellen A1..A6, B1..B6 etc.). (Die besser verständlichen sprechenden Namen kann ich hier nicht öffentlich machen).

Die Anpassung darf also jeweils nur in dem einen Arbeitsblatt passieren, dass zu der betreffenden Gruppe gehört, und da auch nur in den Formeln, die sich auf das neu erstellte Blatt beziehen. Wenn also das Blatt A2 neu erstellt wird, gibt es in Blatt A einige Formeln, die auf Blatt A2 Bezug nehmen (die müssten geändert werden), es gibt aber auch Formeln, die sich auf die Blätter A1, A3 etc. beziehen, die nicht geändert werden dürfen, von B, C etc. ganz zu schweigen.

2. Deine Variable "blatt" enthält nach
blatt = Mid$(Zelle1.Formula, 2, InStr(Zelle1.Formula, "!") - 2)
den alten Blattnamen, der ja auch der Name des neu erstellten werden soll.

Die Zeile
Zelle1.Formula = "='" & blatt & " (2)'!" & rechts
verstehe ich nicht, weil hier der Blattname aus der Variablen als String eingefügt wird und der Index (?) Was kommt da raus? Und woher weiß ich den Index des neu erstellten Blattes?

Ich hoffe, das ist einigermaßen verständlich rübergekommen. Wenn Du Lust hast, da noch ein paar Gedanken drauf zu verwenden, bin ich dir sehr dankbar.

Gruß

Peter
Anzeige
@Andre: Habe selbst eine einfache Lösung gefunden
17.09.2003 11:22:53
Peter
Hallo Andre,

es geht (zum Glück) viel einfacher:

Wenn ich in den Formeln benannte Bereiche verwende, kann ich in dem neu erstellten
Blatt den schon vergebenen Namen sehr einfach neu zuweisen.

In einer kleinen Testdatei sieht das dann so aus:

Das alte Blatt heißt z.B. "Blatt" und enthält einen benannten Bereich namens "test".
Ich erstelle ein neues Blatt und lasse automatisch den Namen "Blatt#" vergeben, um den Namenskonflikt zu vermeiden.

Der Rest erledigt sich so:

With Cells(anzma + 2, 1)
.Value = "hurra"
.Name = "test"
End With
Application.DisplayAlerts = False
Worksheets("Blatt").Delete
Worksheets(Worksheets.Count).Name = Left(Name1, Len(Name1) - 1)
Application.DisplayAlerts = True

Wobei hier das neu erzeugte Blatt am Ende steht und der Name "Blatt#" in der Variablen
Name1 gespeichert wurde.

In meiner echten Anwendung starte ich das Ganze immer von der entsprechenden Tabelle aus,
so dass der korrekte Name ausgelesen werden kann.

Noch mal Dank für deine Mühe

Peter
Anzeige
AW: @Andre: Habe selbst eine einfache Lösung gefunden
17.09.2003 19:57:25
andre
hallo peter,
1. wäre ja mit deiner lösung erledigt oder?
2. ist i.o. - siehe 3.
3. wenn man ein blatt kopiert wird in der regel der name des blattes erneut genommen plus der index " (2)". beim nächsten kopieren des ursprungsblattes, wenn nicht zwischendurch der name geändert wurde, kommt der index (3) usw. usf. ich tue das also mit dieser zeile nachvollziehen. die hochkommas müssen sein, weil dann ein leerzeichen im blattnamen ist.
gruss andre
AW: @Andre: Habe selbst eine einfache Lösung gefunden
18.09.2003 09:40:51
Peter
Hallo Andre,

ja, es ist mit meiner Lösung erledigt.

Danke noch mal und vielleicht bis demnächst.

Peter
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige