Verknüpfung per VBA löschen
#1
Hallo liebes Forum !

Kann mir bitte jemand helfen. Ich möchte per VBA eine oder allenfalls mehrere Verknüpfungen löschen, krieg es aber nicht hin.
Habe mittels Makro-Recorder diesen Code versucht, aber funktioniert leider nicht.
[ActiveWorkbook.BreakLink Name:="C:\Geschäftsleitung\Daten\Stundenzettel 2013.xlsx"]

Ich verwende Windows 7 und Excel 2013.

Vielen Dank für Eure Hilfe.[/code]
Liebe Grüße aus Innsbruck
Helmut
Top
#2
Hallo Helmut,

unten stehenden Code habe ich aus dem Internet für Dich angepasst:

Code:
Sub Verknuepfungen_loeschen()
Dim alleLinks, i As Integer
Dim loeschLink As String

loeschLink = "C:\Geschäftsleitung\Daten\Stundenzettel 2013.xlsx"

'Verknüpfungen zu anderen Tabellenblättern
   alleLinks = ThisWorkbook.LinkSources(xlExcelLinks)
  
'Verknuepfungen löschen (Formelergebnisse werden in Werte umgewandelt)
   For i = UBound(alleLinks) To 1 Step -1
       If InStr(alleLinks(i), loeschLink) Then ThisWorkbook.BreakLink alleLinks(i), xlExcelLinks
   Next
    
End Sub

Teste mal, ob es reicht, und schön, wieder mal von Dir zu lesen.
Gruß Atilla
Top
#3
Hallo Atilla !

Vielen Dank für Deine Hilfe. Wer außer Dir ist noch so bewandert und hilfreich ?
Leider erscheint bei der Zeile

For i = UBound(alleLinks) To 1 Step -1

eine Fehlermeldung Nr.13 "Typen unverträglich", aber ich habe noch nicht herausgefunden an was es liegt, hatte aber auch noch wenig Zeit dafür aufgewandt.

Bei dieser Gelegenheit darf ich Dir noch ein Problem unterbreiten.
Gibt es eine Möglichkeit ein Firmensymbol, das als "Objekt 1" im Namensfeld bezeichnet ist in ein "Picture.." oder "Grafik .." umzuwandeln.
Ich habe alle Symbole als Grafik oder Bild oder Picture in den anderen Dateien und damit eine Dateigröße von nur 180kB bei der Datei mit dem Objekt jedoch 2500kB und würde das gerne ändern. Ich habe schon einiges versucht, aber es bleibt[/quote] immer ein Objekt.

Nochmals vielen Dank für Deine Hilfe, auf bald.
Liebe Grüße aus Innsbruck
Helmut
Top
#4
Hallo Helmut,

die Fehlermeldung deutet darauf hin, dass keine Verknüpfungen vorhanden sind.

zu Deiner zweiten Frage folgende Vorgehensweise:
-wähl das Objekt aus
-in der Ribbonleiste Start unter dem Symbol Einfügen das kleine Dreieck klicken
-es erscheint ein Kontextmenü, ganz unten "Als Bild" klicken und im nächsten Fenster "Als Grafik kopieren".

Dann der gleiche Ablauf nur am Ende "Als Grafik einfügen".

Diese Beschreibung oben ist aus folgender Seite : www.brighthub.com/computing/windows-platform/articles


So habe ich es auch hinbekommen:
Objekt kopieren -> Einfügen -> Inhalte einfügen dann im sich öffnenden Fenster Bild(erweiterte Methadaten) wählen.
Gruß Atilla
Top
#5
Hallo Helmut,

nochmal zur Fehlermeldung: Durch vorherige Abfrage, ob Links vorhanden sind, läuft es nicht mehr in einen Fehler.

Code:
Sub Verknuepfungen_loeschen()
Dim alleLinks, i As Integer
Dim loeschLink As String

loeschLink = "C:\Geschäftsleitung\Daten\Stundenzettel 2013.xlsx"

'Verknüpfungen zu anderen Tabellenblättern
   alleLinks = ThisWorkbook.LinkSources(xlExcelLinks)
  
'Verknuepfungen löschen (Formelergebnisse werden in Werte umgewandelt)
  If Not IsEmpty(alleLinks) Then
    For i = UBound(alleLinks) To 1 Step -1
      If InStr(alleLinks(i), loeschLink) Then ThisWorkbook.BreakLink alleLinks(i), xlExcelLinks
    Next
  End If
End Sub

Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • heli
Top
#6
Hallo zusammen,

Uwe, nach Helmuts Darstellung sollten Verknüpfung vorhanden sein. Deswegen hatte ich auch an keine
Fehlerbehandlung gedacht. Aber man sollte besser immer mit so etwas rechnen.

Damit Helmut auch informiert wird, ob welche vorhanden und ob welche gelöscht oder nicht gelöscht wurden, habe ich die Prozedur jetzt noch einmal dahingehend erweitert.

Code:
Option Explicit

Sub Verknuepfungen_loeschen()
   Dim alleLinks, i As Integer, j As Long
   Dim loeschLink As String
  
   loeschLink = "C:\Geschäftsleitung\Daten\Stundenzettel 2013.xlsx"
  
   'Verknüpfungen zu anderen Tabellenblättern
      alleLinks = ThisWorkbook.LinkSources(xlExcelLinks)
    
   'Verknuepfungen löschen (Formelergebnisse werden in Werte umgewandelt)
   If Not IsEmpty(alleLinks) Then
      For i = UBound(alleLinks) To 1 Step -1
          If InStr(alleLinks(i), loeschLink) Then
            ThisWorkbook.BreakLink alleLinks(i), xlExcelLinks
            j = j + 1
         End If
      Next
      If j > 0 Then
         MsgBox j & " Verknüpfung(en) gelöscht"
      Else
         MsgBox "Keine der Vorgabe entsprechende Verknüpfung gefunden."
      End If
   Else
      MsgBox "Keine Verknüpfungen vorhanden"
   End If
End Sub
Gruß Atilla
Top
#7
Hallo Atilla,

vielen Dank für Deine Mühe.
leider musste ich (durch meine Schuld) feststellen, dass mich das Löschen der Verknüpfung nichts nützen würde, warum?
Da ich mit einem Makro in einer andren Datei eine Reihe von ...xlsx-Dateien für einen Jahreswechsel aufrufe, sollte dieser Vorgang nicht durch die Meldung betreffend einer vorhandenen Verknüpfung unterbrochen werden, da dann mit jeder neuen Datei die Meldung mit "weiter" oder "bearbeiten" bestätigt werden müsste.
Außerdem kann das Löschen erst nach dem Öffnen der jeweiligen Datei durchgeführt werden, also zu spät.
Ich dachte, dass das Beste wäre die Anzeige der Meldung auszuschalten, die Verknüpfung kann bleiben:
"ActiveWorkbook.UpdateLinks = xlUpdateLinksNever"

Nun ist aber auch hier das Problem, dass das erst ausgeführt wird, wenn die Datei geöffnet ist, also auch zu spät.

Mein Code steht in einer anderen Datei und von dort sollte ich die Möglichkeit haben vor dem Öffnen der Dateien mit der Verknüpfung die Meldung auszuschalten. Ich erhalte alle ...xlsx-Dateien mit einer Verknüpfung.

Sollte es keine Lösung geben, muss ich eben alle ...xlsx-Dateien zuerst öffnen und manuell die Anzeige der Meldung ausschalten.

Vielleicht hast Du mit Deinem umfangreichen Wissen eine Lösung.
Vielen Dank.
Danke auch an Uwe.

Liebe Grüße
Helmut


Wenn
Top
#8
Hallo Helmut,

ich weiß nicht wie Dein Code zum Öffnen der Dateien aussieht, aber mit einer wie folgt aussehenden Anweisung, kannst Du das Aktualisieren beim Öffnen unterbinden:

Code:
Workbooks.Open Filename:="C:\Users\heli\Desktop\Mappe2.xlsx", _
        UpdateLinks:=0

und so würde sie beim Öffnen automatisch aktualisiert:

Code:
Workbooks.Open Filename:="C:\Users\heli\Desktop\Mappe2.xlsx", _
        UpdateLinks:=xlUpdateLinksAlways

Man könnte auch mit Application.DisplayAlerts = False Warnmeldungen abschalten.

Oder es gäbe noch die Möglichkeit alle Datein in einem Vertrauenswürdigen Ordner abzulegen und von dort zu öffnen.

Wenn Du nicht weiterkommst, dann zeig bitte Deinen Code zum Öffnen und schildere genau, was Du nach dem Öffnen machen möchtest.
Gruß Atilla
[-] Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:
  • heli
Top
#9
Hallo Atilla !

Entschuldige bitte meine verspätete Antwort.
Vielen Dank für Deine Hilfe.
Ich hatte leider übersehen für das Abschalten der Warnmeldung Application.DisplayAlerts = False einzufügen.

Leider habe ich aber nun ein anderes Problem:
Ich sollte für eine Zell-Hintergrundfarbe die ColorIndex-Nummer herausfinden.
Die Farbe ist im Excel 2013 in den Designfarben enthalten u.zw. links die erste hellgraue Farbe.
Ich habe schon alle ähnlichen ColorIndex-Nummern im VBA versucht, aber keine passt.
Hast Du bitte einen Tipp für mich?

Liebe Grüße
Helmut
Top
#10
Hallo Helmut,

wegen der neuen Frage hättest Du eigentlich ein neues Thema aufmachen sollen.
Auch was Dein Problem mit der Grafik betraf hätte ein neues Thema verdient gehabt. (ist das gelöst worden)
Denn bei späteren Suchanfragen sind die dann auch für andere Interessierte einfacher zu finden.

Nun zu Deiner letzten Frage:
Zetzt in eine Zelle Deine Wunsch-Hintergrundfarbe.
Wähle die Zelle aus und starte folgendes Makro:

Code:
Sub farbe_bekennen()
   ActiveCell.Value = "Interior.Color: " & ActiveCell.Interior.Color & vbLf _
                      & "ActiveCell.Interior.ColorIndex: " & ActiveCell.Interior.ColorIndex
End Sub

Der Code schreibt Dir dann die einzelnen Werte in die Zelle.
Du suchst eher nach Color als nach Colorindex denke ich.

Solche Dinge sind auch sehr einfach in der VBA Umgebung im Direktfenster abfragbar.
Z.B. eine Zelle ist ausgewählt, dann im Direktfenster folgenden Ausdruck hineinschreiben und mit
Enter abschließen:

?ActiveCell.Interior.Color

Das Fragezeichen am Anfang nicht vergessen!
Gruß Atilla
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste