Registriert seit: 20.06.2014
Version(en): 2013
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
Registriert seit: 14.04.2014
Version(en): 2003, 2007
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
Registriert seit: 20.06.2014
Version(en): 2013
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
Registriert seit: 14.04.2014
Version(en): 2003, 2007
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/articlesSo habe ich es auch hinbekommen: Objekt kopieren -> Einfügen -> Inhalte einfügen dann im sich öffnenden Fenster Bild(erweiterte Methadaten) wählen.
Gruß Atilla
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
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:1 Nutzer sagt Danke an Kuwer für diesen Beitrag 28
• heli
Registriert seit: 14.04.2014
Version(en): 2003, 2007
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
Registriert seit: 20.06.2014
Version(en): 2013
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
Registriert seit: 14.04.2014
Version(en): 2003, 2007
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:1 Nutzer sagt Danke an atilla für diesen Beitrag 28
• heli
Registriert seit: 20.06.2014
Version(en): 2013
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
Registriert seit: 14.04.2014
Version(en): 2003, 2007
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.ColorDas Fragezeichen am Anfang nicht vergessen!
Gruß Atilla
|