Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
844to848
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
844to848
844to848
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Verknüpfungen entfernen

Verknüpfungen entfernen
14.02.2007 21:08:13
Thomas
Hallo auch,
eventuell ists bekannt, dass wenn man Tabellenblätter mit Formel in eine andere Datei kopiert, dass dann die Formeln mit Verknüpfung zum original Tabellenblatt eingefügt werden. Allerdings komm ich erst garnicht so weit, denn ich bekomm spätestens beim einfügen der kopierten Tabellenblätter einen "Laufzeitfehler 9 - Index liegt außerhalb des gültigen Bereichs".
Wäre wirklich äußerst nett, wenn mir jemand helfen könnte. Hier der Code:

Sub Verknüpfungen_Entfernen()
' Makro1 Makro
' Verknüpfungen_aus_einem_kopierten_Tabellenblatt_entfernen
' Lösche die beiden Tabellenblätter ohne Fehlermeldung
On Error Resume Next
ScreenUpdating = False
Application.DisplayAlerts = False
If Worksheets.Count >= 2 Then Worksheets(2).Delete
If Worksheets.Count >= 1 Then Worksheets(2).Delete
On Error GoTo 0
Application.DisplayAlerts = True
' Aktiviere Makro.xls - wähle das Tabellenblatt "Fotoblatt" aus und aktiviere es
Windows("Makro.xls").Activate
Sheets(Array("Fotoblatt")).Select
Sheets("Fotoblatt").Activate
On Error Resume Next
' Versuche "115615" im ungesicherten Status zu aktivieren
Workbooks("115615").Activate
' Versuche "115615" im gesicherten Status zu aktivieren
Workbooks("115615.xls").Activate
' End Error checking.
On Error GoTo 0
' Überprüfe ob "115615" bereits geöffnet ist, wenn nicht, öffne es
If Not ActiveWorkbook.Name = "115615.xls" And Not _
ActiveWorkbook.Name = "115615" Then
Workbooks.Open Filename:="115615.xls"
End If
' Kopiere das bereits ausgewählte Tabellenblatt "Fotoblatt" und kopiere es in die Datei "115615.xls" an 2.Stelle
Sheets(Array("Fotoblatt")).Copy _
Before:=Workbooks("115615.xls").Sheets(2)
' Gehe in die Datei "115615.xls" und dessen Tabellenblatt "Fotoblatt" und suche nach Verknüpfungen "[Verschleiß*] und ersetzte diese Verknüpfungen in den Zellen mit -nichts-
Windows("115615.xls").Activate
Worksheets(1).Activate
Sheets("Fotoblatt").Activate
Cells.Replace What:="[Verschleiß*]", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
ScreenUpdating = True
End Sub

" Sheets(Array("Fotoblatt")).Copy _
Before:=Workbooks("115615.xls").Sheets(2)" - hier wird der Fehler ausgegeben.
Thx & Grüße
Thomas

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Verknüpfungen entfernen
14.02.2007 21:18:00
Erich
Hallo Thomas,
hat Workbooks("115615.xls") vorher sicher schon ein 2. Blatt?
Do könnstest sonst statt
Before:=Workbooks("115615.xls").Sheets(2)
schreiben
after:=Workbooks("115615.xls").Sheets(1)
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: Verknüpfungen entfernen
14.02.2007 21:31:00
Thomas
Erich, der Einwand ist nicht schlecht, da ich wirklich kein 2. Tabellenblatt in "115615.xls" habe, da ich diese vorher löschen lasse. Dennoch funktioniert es auch so nicht. Der Ablauf bleibt an der gleichen Stelle stehen.
Greetings- Thomas
AW: Verknüpfungen entfernen
14.02.2007 21:49:00
Thomas
habs nun auch mal mit
After:=Sheets(Sheets.Count)
probiert - gleicher Fehler. Ich denke das Problem liegt nicht unbedingt daran, sondern eventuell schon vorher irgendwo. Nur ich komm nicht drauf :-(
Anzeige
AW: Verknüpfungen entfernen
15.02.2007 00:23:00
Erich
Hallo Thomas,
auch das nächste Problem steht in der Codezeile - im ersten Teil. Wenn du schreibst:
Sheets(Array("Fotoblatt")).Copy
meint das das (nicht existierende) Blatt "Fotoblatt" der aktiven Mappe,
nicht etwa irgend einer anderen Mappe, die vorher mal aktiv war.
(Davon könnte es ja auch mehrere Mappen geben, in denen es ein "Fotoblatt" gibt...)
Wofür ist das Array gut? Da du das "Fotoblatt" aus Makro.xls kopieren willst, schreibst du besser
Workbooks("Makro.xls").Sheets("Fotoblatt").Copy _ usw. (aber mit after...)
oder
ThisWorkbook.Sheets("Fotoblatt").Copy _ usw., wenn Makro.xls die Mappe ist, in der dieser Code steht.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Verknüpfungen entfernen
15.02.2007 15:20:45
Thomas
das Array brauch ich eigentlich, weil ich mehrere Tabellenblätter kopieren lasse. Hier in dem geposteten Code, habe ich dies nur etwas gekürzt. Trotzdem funktioniert die Lösung mit "Workbooks" auch nicht, obwohl ich da direkten bezug auf die Datei und dessen Tabelle nehme.
Problempunkt scheint immernoch, so zeigt er mir es beim Durchlaufen mit einem Laufzeitfehler 9 an, die Zeile "Workbooks("Makro.xls").Sheets("Fotoblatt").Copy _ ".
Um den Fall genauer zu schildern:
Ich habe ettliche XLS.Dateien, in diese das Fotoblatt (und noch mehr) kopiert werden sollen. Das sind rund 600Stück. Da die Formeln der Zellen in Fotoblatt aber mit Verknüpfungen versehen werden, müssen diese letztendlich auch noch gelöscht werden. Wie wir aber sehen, kommt er erst garnicht so weit und steigt schon beim Kopieren der Tabelle(n) aus.
Anzeige
AW: Verknüpfungen entfernen
15.02.2007 17:06:00
Erich
Hallo Thomas,
ich habe mir deinen Code noch mal insgesamt angesehen - und verstehe manches nicht.
Am Anfang:
    If Worksheets.Count >= 2 Then Worksheets(2).Delete
'   If Worksheets.Count >= 1 Then Worksheets(2).Delete     'geht schief, wenn nur 1 Blatt ex.
Welche Blätter in welcher Mappe sollen hier gelöscht werden?
Wenn du in der gerade aktiven Mappe das 2. und 3. Blatt - falls existent - löschen willst, dann ohne On Error ... so:
    If Worksheets.Count >= 2 Then Worksheets(2).Delete
If Worksheets.Count >= 2 Then Worksheets(2).Delete
Wofür sind die folgenden drei Zeilen?
    Workbooks("Makro.xls").Activate
Sheets(Array("Fotoblatt", "noch eins")).Select
Sheets("Fotoblatt").Activate
Für das Kopieren sind sie unnötig.
(Du testest damit, ob in Makro.xls die genannten Blätter existieren - wenn nicht, gibts einen Fehler.)
Bei den Zeilen
On Error Resume Next
' Versuche "115615" im ungesicherten Status zu aktivieren
Workbooks("115615").Activate
' Versuche "115615" im gesicherten Status zu aktivieren
Workbooks("115615.xls").Activate
' End Error checking.
On Error GoTo 0
' Überprüfe ob "115615" bereits geöffnet ist, wenn nicht, öffne es
If Not ActiveWorkbook.Name = "115615.xls" And Not _
ActiveWorkbook.Name = "115615" Then
Workbooks.Open Filename:="115615.xls"
End If
ist mir das mit dem gesicherten/ungesicherten Status noch nicht untergekommen.
Was bedeutet das, und wie funktioniert Workbooks("115615").Activate ?
Das Kopieren funzt bei mir mit
    Workbooks("Makro.xls").Sheets(Array("Fotoblatt", "noch eins")).Copy _
after:=Workbooks("115615.xls").Sheets(1)
Dabei ist es egal, welche Mappe gerade aktiv ist.
Da aber jetzt die 115615.xls die aktive Mappe ist, reicht das aus:
    Workbooks("Makro.xls").Sheets(Array("Fotoblatt", "noch eins")).Copy after:=Sheets(1)
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Verknüpfungen entfernen
15.02.2007 17:25:40
Erich
Hallo Thomas,
probier mal diesen Code:
Option Explicit
Sub Verknüpfungen_Entfernen2()
' Verknüpfungen_aus_einem_kopierten_Tabellenblatt_entfernen
'   Application.ScreenUpdating = False    ' zum Testen auskommentiert lassen
'              Lösche das 2. und 3. Tabellenblatt ohne Fehlermeldung - in welcher Mappe?
Application.DisplayAlerts = False
If Worksheets.Count >= 3 Then Worksheets(3).Delete
If Worksheets.Count >= 2 Then Worksheets(2).Delete
Application.DisplayAlerts = True
On Error Resume Next
Workbooks("115615.xls").Activate      ' Versuche "115615.xls" zu aktivieren
On Error GoTo 0
'                    Überprüfe ob "115615.xls" bereits geöffnet ist, wenn nicht, öffne es
If ActiveWorkbook.Name <> "115615.xls" Then Workbooks.Open Filename:="115615.xls"
'     Kopiere bestimmte Tabellenblätter in die Datei "115615.xls" hinter 1. Tabellenblatt
Workbooks("Makro.xls").Sheets(Array("Fotoblatt", "noch eins")).Copy after:=Sheets(1)
'              Gehe in Tabellenblatt "Fotoblatt", suche nach Verknüpfungen "[Verschleiß*]
'                 und ersetzte diese Verknüpfungen in den Zellen mit -nichts-
Sheets("Fotoblatt").Activate
Cells.Replace What:="[Verschleiß*]", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
Application.ScreenUpdating = True
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Verknüpfungen entfernen
15.02.2007 18:48:00
Thomas
Hi Erich,
der Code von dir funktionierte. Diesen hab ich noch stark umgeschrieben, da wie du auch gesehen hast viele Sachen überflüssig waren.
Allerdings häng ich jetzt noch an der Sache mit den Verknüpfungen. Die Verknüpfungen in den Zellen schaut beispielsweise so aus:
='[Verschleißblatt.xls]Verschleiß'!B127
es muss per Makro "[Verschleißblatt.xls]" und diese Anführungszeichen " ' " gelöscht werden. Zeichne ich da ein Makro auf und lasse diese Sachen ersetzten funktioniert das nicht so ganz.
Hmmm... :-(
Noch ne andere Sache:
wenn ich schreibe
Set geoeffnet = ActiveWorkbook
und mich später darauf beziehen will funktioniert dies nicht, denn zwischenzeitlich wurde bereits ein anderes Workbook geöffnet. Wie kann ich dies umgehen, dass meine Variable "geoeffnet" wieder funktioniert ?
Anzeige
AW: Verknüpfungen entfernen
15.02.2007 19:30:28
Erich
Hallo Thomas,
das Löschen der Verknüpfung(en) zu Verschleißblatt.xls kann nur funzen, wenn es in der aktiven Mappe (115615.xls)
auch ein Blatt "Verschleiß" gibt. Ist dem so?
Wenn ja, ginge das (besser als mit Replace) so
    ActiveWorkbook.ChangeLink "Verschleißblatt.xls", ActiveWorkbook.Name

(Du kannst das ja mal mit Makroaufzeichnung per Hand spielen:
Bearbeiten - Verknüpfungen - Quelle wechseln - und dann die aktive Mappe auswählen.)
zu "Set geoeffnet = ActiveWorkbook":
Ist geoeffnet als Workbook-Variable deklariert? Wäre gut.
Solange die betreffende Mappe nach dem Set nicht geschlossen wird, kannst du sie mit geoeffnet ansprechen.
(Den Namen der Variablen finde ich nicht so geschickt - alle offenen Mappen sind geöffnet...)
Schreib doch mal da, wo du die Mappe ansprechen willst, eine neue Zeile in den Code:
MsgBox geoeffnet.name
Dann sollte der Name der Mappe angezeigt werden.
Antwortest du mir noch auf die Frage, in welcher Mappe am Anfang des Makros das 2. und 3. Blatt gelöscht werden sollen?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Verknüpfungen entfernen
15.02.2007 20:30:07
Thomas
Erich, ich werd langsam depressiv :-) - zählt zwar zur Arbeitszeit, aber ein Erfolgserlebnis wäre trotzdem mal nicht schlecht :-)
Ich hab das Makro soweit abgeändert, dass es nun bis zu der "Verknüpfungs"-sache funktioniert. Deswegen nahm ich auch keinen Bezug auf deine Frage "in welcher Mappe am Anfang des Makros das 2. und 3. Blatt gelöscht werden sollen?".
Wie gesagt, es funktioniert nun soweit.
Hier mal der neue Code:
Dim geoeffnet As Variant

Sub Vorhandene_Tabellen_löschen()
Set geoeffnet = ActiveWorkbook
On Error Resume Next
ScreenUpdating = False
Application.DisplayAlerts = False
geoeffnet.Activate
i = 0
Do
If Worksheets.Count >= 1 Then Worksheets(2).Delete
If Charts.Count >= 1 Then Charts(1).Delete
i = i + 1
Loop Until i > 2
On Error GoTo 0
Application.DisplayAlerts = True
Call Vorlagetabellen_Kopieren
End Sub


Sub Vorlagetabellen_Kopieren()
Application.DisplayAlerts = False
On Error Resume Next
Workbooks.Open Filename:= _
"C:\Verschleißblatt.xls"
On Error GoTo 0
'    MsgBox geoeffnet.Name
Workbooks("Makro.xls").Sheets(Array("Fotoblatt 1", "Fotoblatt 2", "Auswertung Daten")).Copy After:=geoeffnet.Sheets(1)
Application.DisplayAlerts = True
Call Verknüpfungen_ändern
End Sub


Sub Verknüpfungen_ändern()
ActiveWorkbook.ChangeLink "Makro.xls", ActiveWorkbook.Name
Workbooks("Verschleißblatt.xls").Close
End Sub

Genau bei der "Verknüpfung_ändern" hängt er sich nun auf. Auch verständlich, da diese Variante des neuen Verknüpfungsquelle deklarieren auch nicht händisch funktioniert. Es kommt eine Fehlermeldung "Die Formel enthält einen ungültigen Bezug auf ein externes Arbeitsblatt..."
Die eine Sache müsste noch gelöst werden, dann bin erstens ich glücklich und dir sehr dankbar ;-)
Anzeige
AW: Verknüpfungen entfernen
15.02.2007 21:43:20
Erich
Hallo Thomas,
ich habs am Anfang noch mal zusammengeschrieben und deinen Code darunter kommentiert:
Option Explicit ' empfehle ich dir DRINGEND
Dim geoeffnet As Workbook ' wird nicht mehr gebraucht, warum war das Variant?
Sub Vorlagetabellen_Kopieren()
Dim i As Integer, wbkZiel As Workbook
Set wbkZiel = ActiveWorkbook
'    Application.ScreenUpdating = False  ' hier fehlte Application.
'        Die Bildschirmaktualisierung würde ich erst nach dem Austesten abschalten...
Application.DisplayAlerts = False
For i = 0 To 1
If Worksheets.Count >= 2 Then Worksheets(2).Delete
If Charts.Count >= 1 Then Charts(1).Delete
Next i
Application.DisplayAlerts = True
Workbooks("Makro.xls").Sheets(Array("Fotoblatt 1", "Fotoblatt 2", _
"Auswertung Daten")).Copy After:=Sheets(1)
Workbooks.Open Filename:="C:\Verschleißblatt.xls"
wbkZiel.ChangeLink "Makro.xls", wbkZiel.Name
Workbooks("Verschleißblatt.xls").Close False
'    Application.ScreenUpdating = True ' solltest du auch wieder einschalten
End Sub
Sub Vorhandene_Tabellen_löschen_ALT()
Dim i As Integer
Set geoeffnet = ActiveWorkbook
'    On Error Resume Next               ' überflüssig und schädlich
Application.ScreenUpdating = False  ' hier fehlte Application.
'    geoeffnet.Activate   ' geoeffnet ist doch schon aktiv!
Application.DisplayAlerts = False
For i = 0 To 1
'       If Worksheets.Count >= 1 Then Worksheets(2).Delete ' Fehler bei nur 1 Worksheet
If Worksheets.Count >= 2 Then Worksheets(2).Delete
If Charts.Count >= 1 Then Charts(1).Delete
Next i
Application.DisplayAlerts = True
'       On Error GoTo 0                ' überflüssig
Call Vorlagetabellen_Kopieren
Application.ScreenUpdating = True ' solltest du wieder einschalten
End Sub
Sub Vorlagetabellen_Kopieren_ALT()
'   Application.DisplayAlerts = False  ' überflüssig
'   On Error Resume Next               ' überflüssig und schädlich
Workbooks.Open Filename:="C:\Verschleißblatt.xls"
'Ab hier ist Verschleißblatt.xls die aktive Mappe!
'    On Error GoTo 0                ' überflüssig
'    MsgBox geoeffnet.Name
Workbooks("Makro.xls").Sheets(Array("Fotoblatt 1", "Fotoblatt 2", _
"Auswertung Daten")).Copy After:=geoeffnet.Sheets(1)
'   Application.DisplayAlerts = True    ' überflüssig
Call Verknüpfungen_ändern_ALT
End Sub
Sub Verknüpfungen_ändern_ALT()
'   Verschleißblatt.xls ist immer noch ActiveWorkbook
ActiveWorkbook.ChangeLink "Makro.xls", ActiveWorkbook.Name
Workbooks("Verschleißblatt.xls").Close
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Verknüpfungen entfernen
15.02.2007 22:16:00
Thomas
egal ob ich mein Code abändern nach deinen Angaben oder deinen Code anwende, kommt der gleiche Fehler "Die Formel enthält einen ungültigen Bezug auf ein externes Arbeitsblatt..." wie bereits vorher schon erwähnt.
Werde am Sonntag mich nochmal daran machen. Ich hoffe ich kann dann nochmal auf deine Hilfe hoffen.
Grüße und vielen Dank bis hier hin, Thomas !
AW: Verknüpfungen entfernen
16.02.2007 06:40:00
Erich
Hallo Thomas,
das Löschen der Verknüpfung(en) zu Verschleißblatt.xls kann nur funzen, wenn es in der aktiven Mappe (115615.xls)
auch ein Blatt "Verschleiß" gibt. Ist dem so?
(Diese Frage hatte ich dir schon im Beitrag 15.02.2007 19:30:28 gestellt...)
Auch eine weitere Frage noch einmal:
In welcher Mappe sollen am Anfang die Tabellen- und Chartblätter gelöscht werden?
Jetzt passiert das in der (zufällig?) bei Makrostart aktiven Mappe.
Im den drei Modulen deines letztes Beitrags kommt das Öffnen/Aktivieren der Zielmappe nicht mehr vor.
Deshalb ging ich davon aus, dass die Zielmappe schon vor Beginn des Vorhandene_Tabellen_löschen_ALT()
und damit auch meines Vorlagetabellen_Kopieren() aktiviert wurde.
Set wbkZiel = ActiveWorkbook sollte eine Mappe wie 115615.xls sein - eben dein "geoeffnet".
Ist diese Mappe jetzt bei Makrostart schon offen?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: Verknüpfungen entfernen
19.02.2007 00:02:44
Thomas
Hi Erich (hoffentlich liest du das noch - das Thema ist ja schon etwas nach unten gerutscht),
es tut mir Leid - hätte auf deine Frage gleich eingehen müssen. Sicherlich muss da in der Mappe 115615 eine Tabelle namens "Verschleiß" sein um die Verknüpfungen zu ändern. Ich hatte vergessen die originale "Tabelle1" in dieser Mappe umbennen zu lassen in "Verschleiß". Natürlich funktioniert nun auch alles wie es soll. Ich werde dies noch auf Herz und Nieren testen - bei weiteren Fragen wende ich mich nochmals an Dich hier an dieser Stelle.
Ansonsten Danke ich dir sehr für die schnelle Hilfe !
Grüße
Thomas

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige