Das Clever-Excel-Forum.de - Treffen
findet vom 15. - 17. September 2017 in Thüringen / Region Großer Inselsberg statt. Hotelbuchung ab sofort möglich.


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
to 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

Excel 2007
to 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
to 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

Excel 2007
to 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 Benutzer sagt Danke an Kuwer für diesen Beitrag:
heli
to 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

Excel 2007
to 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
to 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

Excel 2007
[-] Folgende(r) 1 Benutzer sagt Danke an atilla für diesen Beitrag:
heli
to 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
to 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

Excel 2007
to top


Möglicherweise verwandte Themen...
Thema Verfasser Antworten Ansichten Letzter Beitrag
  WENN ODER Verknüpfung über mehrere Bedingungen? wies1617 8 167 11.11.2016, 17:22
Letzter Beitrag: schauan
  Verknüpfung mehrerer Tabellen APfeiffer 12 211 27.10.2016, 13:28
Letzter Beitrag: APfeiffer
Smile Verknüpfung mehrerer Tabellen APfeiffer 11 209 25.10.2016, 09:33
Letzter Beitrag: APfeiffer
  Verknüpfung funktioniert nicht mehr (Nach Neu-Installation) Thomas der Xte 5 87 24.10.2016, 10:33
Letzter Beitrag: neopa
Video SVerweis mit Wenn Dann Sonst Funktion Verknüpfung HollyBoy 16 465 14.10.2016, 05:56
Letzter Beitrag: WillWissen
  Verknüpfung zwischen Tabellenblättern Kobiii 2 137 06.10.2016, 09:51
Letzter Beitrag: Peter
  Verknüpfung fixieren marc01 7 220 02.10.2016, 06:58
Letzter Beitrag: schauan
  Verknüpfung Excel und Word zur Erstellung verschiedener Angebote im Hotel Jürgen Schon 1 152 01.09.2016, 17:35
Letzter Beitrag: schauan
  verschachtelte wenn verknüpfung Arielle999 2 180 30.08.2016, 16:15
Letzter Beitrag: Arielle999
  Abrechnungsliste per Makro mit Verknüpfung zu anderem Dokument Hawkeye 17 707 21.08.2016, 11:48
Letzter Beitrag: AlterDresdner

Gehe zu:


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