Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1276to1280
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
Inhaltsverzeichnis

@Franz - Verknüpfungen - bassi

@Franz - Verknüpfungen - bassi
bassi2008
Guten Abend Franz,
Leider ist unser Dialog nach meinem gestrigen Text “verschwunden”. Er erscheint zwar noch unter "meine Beiträge", aber nicht mehr in der Forumsliste. Schade.
Ich hoffe mein Versuch den Beitrag wieder aufleben zu lassen bzw weiter zu führen gelingt.
Ich hatte gestern Abend schon eine Antwort verfasst – diese will ich ganz am Schluss noch mit anfügen.
Leider konnte ich heut nur ganz kurz unsere Codezusammenstellung testen. Aber ich bin schon schwer begeistert.
So stellt sich das ganze nun dar:
• Pfad in der Formel falsch: wird korrigiert – MessageBox – ok Klick – die folgende Excel Fehlermeldung wegen der fehlenden Verknüpfung hab mit
"Application.DisplayAlerts = False" am Anfang und
"Application.DisplayAlerts = True" am Ende unterdrückt.
• Dateinamen in der Formel falsch: MessageBox – Datei wird geschlossen
• Datei fehlt komplett: MessageBox – Datei wird geschlossen
• Speichern unter: MessageBox – ok klick
Wo ich nicht so recht weiterkomme ist dies hier:
• Datei in Verwendung: Messagebox – Später bitte versuchen –
Nun kommt die Frage ob ich die Datei trotzdem öffnen möchte. Bei klick auf nein kommt die Debuggen Meldung. Markiert ist „Workbooks.Open Filename:…“
Das Debuggen Fenster könnte ich mit
"On Error GoTo"
umgehen.
Die Frage ob ich die Datei trotzdem öffnen möchte mit
"application.displayalerts=false".
Allerdings wird dann die Frage automatisch mit ja beantwortet – die Datei wird geöffnet.
An dieser Stelle stehe ich ein wenig auf dem Schlauch.
Kannst du mir hier nocheinmal unter die Arme greifen?
LG bassi
Nachfolgend der Text von gestern Abend:
Guten Abend Franz,
ich konnt's nicht lassen, es kribbelte zu sehr in den Fingern, ich musste nochmal ein bisschen mit dem Code rumexceln. Morgen werde ich auf Arbeit wohl kaum dazu kommen. Ich hoffe ich schaffe es wenigstens ihn noch in meine Test Dateien einzubauen.
Franz du hast du Recht. Die fehlende Datei war bisher noch kein Thema.
Aber in meinem laienhaften Leichtsinn nahm ich an das der Code welcher die inkorrekte Datei ausfindig macht, auch dann - oder gerade dann anspricht, wenn die Datei ganz fehlt. Aber das war offensichtlich ein Denkfehler.
Der Tipp mit der F8 Funktion gefällt mir ausgezeichnet. Dass mir der nach den ganzen Jahren Excelleidenschaft entgangen ist ärgert mich richtig.
Ich habe nun zu Haus ein Testkonstrukt gebastelt und könnte mir ein Loch in den Bauch freuen. Es funktioniert alles tadellos. Ich bin gespannt was das Netzwerk dazu sagt.
Wenn das ok ist würd ich dich gern noch etwas fragen was ich ganz am Anfang kurz angerissen hatte:
Die Aktualisierung einer Verknüpfung welche ich via Makro mit diesem Code versucht habe zu _ erreichen:

Private Sub Workbook_Activate()
Application.ScreenUpdating = True
Application.AskToUpdateLinks = False
Application.ScreenUpdating = True
End Sub

scheint nicht so recht so zu funktionieren wie ich es angedacht hatte.
Wenn sich die Stammdaten oder die Daten von P1 verändern (es handelt sich um reine Zahlenwerte – keine Formelabhängigkeiten welche z.b. über die Zeit berechnet würden), erscheint in der Hauptansicht die Änderung nicht über diesen Code, geschweige denn von allein, sondern erst wenn ich die Verknüpften Dateien wirklich öffne.
Ist es tatsache so, dass man diese Werte nur über das öffnen der anderen Datei aktualisieren kann? Aber das wär doch unsinnig dann überhaupt mit Verknüpfungen zu arbeiten…
Ich habe dazu einen Beitrag mit einer Antwort von Dir gefunden wo es um zweifache Verknüpfungen geht, was in etwa dem entspricht was ich hier vorliegen habe:
https://www.herber.de/forum/archiv/1164to1168/t1165430.htm#1165480
In deiner Antwort schreibst du folgendes:
„Ideal wäre, wenn alle Abteilungsdateien in einem Verzeichnis liegen und DIR-Funktion gefunden werden. Dann kann das in einer einfachen Schleife abgearbeitet werden“
Leider reagierte der Fragesteller hierauf nicht mehr.
Könnte ich diese Form für meinen Zweck benutzen? Und wenn ja – wie könnte ich das anstellen?
Ich wünsche Dir noch einen schönen Abend.
LG bassi

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: @Franz - Verknüpfungen - bassi
13.09.2012 23:40:46
fcs
Hallo Bassi,
das wird aber langsam eine never ending Story.
1. Links einer Arbeitsmappe aktualisieren - Beispiele hier
Sub Links_AKtualiseren()
With Workbooks("ABCD.xls")
.UpdateLink Name:=.LinkSources
end with
ActiveWorkbook.UpdateLink Name:=ActiveWorkbook.LinkSources
End Sub

2. Links über 2 Ecken
Links per Formel in eine andere geschlossene Exceldatei schauen nur auf die Werte in den Zellen unabhängig davon, ob in den Zellen Werte oder Formeln stehen. Eine Aktualisierung der Formeln in geschlossenen Datei erfolgt nicht, wenn in der geöffneten Datei die Berechnungen/Links aktualisert werden.
Die von mir in dem anderen Thread beschriebene Methode kannst du natürlich anwenden, aber es funktioniert nur, wenn diese Dateien nicht von anderen Usern geöffnet sind.
Sub Links_AKtualiseren()
Dim wbk As Workbook, arrFiles, intI As Integer
Dim strPfad As String, StrSep As String, strFile As String
strPfad = "C:\Users\Public\Test\Zwischenordner"
StrSep = Application.PathSeparator
arrFiles = Array("1.xls", "DateiABC.xls", "FormelDatei3 - Kopie.xlsm")
Application.EnableEvents = False
Application.ScreenUpdating = False
For intI = LBound(arrFiles) To UBound(arrFiles)
strFile = strPfad & StrSep & arrFiles(intI)
If Dir(strFile) = "" Then
MsgBox "Datei """ & strFile & """ nicht gefunden!"
Else
If IsFileOpen(Path:=strFile) = True Then
MsgBox "Datei """ & strFile _
& """ ist zur Zeit geöffnet, Links können nicht aktualisiert werden!"
Else
Set wbk = Workbooks.Open(Filename:=strFile, UpdateLinks:=True)
If wbk.ReadOnly = True Then
MsgBox "Datei """ & strFile _
& """ ist schreibgeschützt geöffnet - keine Link-Aktualiserung möglich!"
Else
wbk.UpdateLink Name:=wbk.LinkSources
wbk.Close Savechanges:=True
End If
End If
End If
Next intI
ActiveWorkbook.UpdateLink Name:=ActiveWorkbook.LinkSources
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
3. Prüfen ob eine Datei schon geöffnet ist/Datei wurde schreibgeschützt geöffnet.
Hast du denn die andere Methode mit der benutzerdefinierten Funktion "IsFileOpen" in der von mir zuletzt geposteten Variante inzwischen mal probiert?
Bei lokal geöffneter Datei funktioniert es - Netzwerk ?
Ansonsten kannst du nach dem Öffnen immer noch Prüfen, ob die Datei schreibgeschützt geöffnet wurde.
Beispiel siehe oben im Code für die Linkaktualisierung.
Gruß
Franz

Anzeige
AW: @Franz - Verknüpfungen - bassi
18.09.2012 10:28:45
bassi2008
Hallo Franz,
sorry das ich so nervig bin mit meinem Kram.
Leider ist alles was ich zu meinem Problem in Inet finde nicht das was ich wirklich verwenden könnte. Selbst wenn ich mir einen abbreche, bekomme ich das allein kaum so umgestellt, als dass ich es gebrauchen könnte.
Darum möchte ich mich an dieser Stelle auch nochmals herzlich für die Unterstützung bedanken.
Das eigentliche Hauptproblem funktioniert mittlerweile hervorragend. Ändert Excel nach einem Netzwerkfehler die Formeln auf C um, korrigiert der Code das. Absolut genial.
Bei zwei Sachen scheitere ich aber noch :-(
Teil 1
Hast du denn die andere Methode mit der benutzerdefinierten Funktion "IsFileOpen" in der von  _
mir zuletzt geposteten Variante inzwischen mal probiert?
Bei lokal geöffneter Datei funktioniert es - Netzwerk ?

Ja. Hab ich verwendet. Den ersten Teil ins Modul. Den zweiten in das ausführende Makro.
Dim strFile As String
strFile = ThisWorkbook.Path & "\" & "WZ Stammdaten.xls" 'zu prüfende Pfad + Datei
If IsFileOpen(strFile) = True Then
MsgBox "Die Datei " & vbLf & strFile & vbLf _
& " ist zur Zeit geöffnet. Bitte später nochmals probieren!", _
vbInformation, "Daten speichern"
Else
'MsgBox zum Testen
MsgBox "Die Datei " & vbLf & strFile & vbLf _
& " ist zur Zeit nicht geöffnet. " & vbLf & vbLf & "OK = Speichern!", _
vbInformation, "Daten speichern"
'Daten speichern
'...
Workbooks.Open Filename:="G:\Maschinenverwaltung\WZ Stammdaten.xls"

Bei lokal geöffneter Datei funktioniert es - Netzwerk ?
Hier muss ich passen. Ich habe am WE nochmals in aller Ruhe aus/rumprobiert. Es passiert lokal wie auch im Netzwerk dasselbe.
Ist die Datei nicht geöffnet, dann läuft das Makro super durch.
Ist sie offen entsteht der Ablauf wie ich Ihn schon beschrieb:
Ist die Datei in Verwendung: Messagebox – Später bitte versuchen –
Nun kommt die Frage ob ich die Datei trotzdem öffnen möchte. Bei klick auf -nein- kommt die Debuggen Meldung. Markiert ist
„Workbooks.Open Filename:…“
Das Debuggen Fenster könnte ich vielleicht mit
"On Error GoTo"
umgehen. Die Frage ob ich die Datei trotzdem öffnen möchte könnte ich mit
"application.displayalerts=false" ausblenden.
Allerdings wird dann die Frage automatisch mit -ja- beantwortet. Die Datei wird geöffnet - schreibgeschützt.
An dieser Stelle stehe ich ein wenig auf dem Schlauch.
Ansonsten kannst du nach dem Öffnen immer noch Prüfen, ob die Datei schreibgeschützt geöffnet wurde.

Wäre es nicht einfacher - wenn denn möglich - die Excelfrage auszublenden und gleichzeitig automatisch mit -nein- zu beantworten?
Dann mit "On Error GoTo" vielleicht den Code "unausgeführt" und sozusagen "zur Wiederholung vorbereitet" ans Ende zu setzen?
Teil 2
Betrifft die Linkaktualisierung. Ich habe beide Versionen probiert.
Beide hängen sich auf.
Link aktualisieren 1:
Sub Links_AKtualiseren()
With Workbooks("WZ Stammdaten.xls")
.UpdateLink Name:=.LinkSources
End With
ActiveWorkbook.UpdateLink Name:=ActiveWorkbook.LinkSources
End Sub

Dieser hier bei der Zeile
.UpdateLink Name:=.LinkSources

Ich vermute mal ganz vorsichtig hier fehlt ihm eine Angabe wo er nach den Links suchen soll?
Meine Anweisungen dazu verlaufen sich jedoch in endlosen Fehlermeldungen :-(
Link aktualisieren 2:
Dim wbk As Workbook, arrFiles, intI As Integer
Dim strPfad As String, StrSep As String, strFile As String
strPfad = "C:\Users\KP\Documents"
StrSep = Application.PathSeparator
arrFiles = Array("P1.xls", "WZ Stammdaten.xls")
Application.EnableEvents = False
Application.ScreenUpdating = False
For intI = LBound(arrFiles) To UBound(arrFiles)
strFile = strPfad & StrSep & arrFiles(intI)
If Dir(strFile) = "" Then
MsgBox "Datei """ & strFile & """ nicht gefunden!"
Else
If IsFileOpen(Path:=strFile) = True Then
MsgBox "Datei """ & strFile _
& """ ist zur Zeit geöffnet, Links können nicht aktualisiert werden!"
Else
Set wbk = Workbooks.Open(Filename:=strFile, UpdateLinks:=True)
If wbk.ReadOnly = True Then
MsgBox "Datei """ & strFile _
& """ ist schreibgeschützt geöffnet - keine Link-Aktualiserung möglich!"
Else
wbk.UpdateLink Name:=wbk.LinkSources
wbk.Close Savechanges:=True
End If
End If
End If
Next intI
ActiveWorkbook.UpdateLink Name:=ActiveWorkbook.LinkSources
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub

Dieser hier läuft komplett durch wenn die Linkdatei geöffnet ist. Es kommt die MessageBox das eine Aktualisierung nicht möglich ist.
Ist die Linkdatei geschlossen stoppt der Code in dieser Zeile:
wbk.UpdateLink Name:=wbk.LinkSources

Hier kann ich mir überhaupt keinen Reim drauf machen was der Fehler sein sollte/könnte...
Sorry :-(
Kannst du mir nocheinmal unter die Arme greifen?
LG bassi

Anzeige
AW: @Franz - Verknüpfungen - bassi
18.09.2012 18:06:34
bassi2008
oh... Hab ich wohl den Haken vergessen... ich glaub ohne den findet man das schlecht :-(
Sorry

AW: @Franz - Verknüpfungen - bassi
19.09.2012 06:55:49
fcs
Hallo bassi,
ich kann jetzt an Hand deiner Beschreibungen nicht die genauen Problemstellen identifizieren.
Damit es nicht zu unkontrolliertem Ausführen der Workbook_Open oder anderer Ereignismakros kommt, sollten immer dann wenn das Makro eine Arbeitsmappe öffnen soll vordem Öffnen die Ereignismakros deaktiviert und nach dem Schliessen wieder aktiviert werden.
Ist sie offen entsteht der Ablauf wie ich Ihn schon beschrieb:
Ist die Datei in Verwendung: Messagebox – Später bitte versuchen –
Nun kommt die Frage ob ich die Datei trotzdem öffnen möchte. Bei klick auf -nein- kommt die Debuggen Meldung. Markiert ist
„Workbooks.Open Filename:…“

Das verstehe ich nicht. Entweder hast du hier EndIf falsch plaziert oder da ist etwas anderes nicht stimmig.
Liefert "IsFileOpen(strFile)" bei dir ein falsches Ergebnis?
Das kannst du doch mal mit einer anderen einfachen Datei mit dem Beispiel-Makro und einem Kollegen testen.
Zu UpdateLink
  • Ist die Linkdatei geschlossen stoppt der Code in dieser Zeile:
    wbk.UpdateLink Name:=wbk.LinkSources

  • Die Aktualisierung der Links kann in Excel wie fast alles andere nur ausgeführt werden, wenn die entsprechende Arbeitsmappe geöffnet ist.
    Falls die Datei mit den Links Ereignismakros enthält, dann sollten ei dem Öffnen per Makro wie oben schon geschrieben die Ereignismakros zeitweise deaktiviert werden.
    Mehr kann ich hierzu nicht schreiben. Ich hab es in einer einfach Testumgebung probiert und da klappt es.
    Gruß
    Franz

    Anzeige
    bassigedankenstütze
    19.09.2012 10:31:09
    bassi2008
    ins allgemeine Modul
    Public Function IsFileOpen(ByRef Path As String) As Boolean
    'Funktion prüft, ob eine Datei geöffnet ist.
    Dim FileNr As Integer
    Dim ErrorNr As Long
    'open file for testing
    On Error Resume Next
    FileNr = FreeFile
    Open Path For Input Lock Write As #FileNr
    ErrorNr = Err.Number
    Close #FileNr
    On Error GoTo 0
    If ErrorNr  0 Then
    IsFileOpen = True
    End If
    Err.Clear
    End Function
    

    Ins makro
    Sub offenzu()
    'prüft ob datei offen oder zu - wirft entsprechende messagebox aus
    Dim strFile As String
    strFile = ThisWorkbook.Path & "\" & "WZ Stammdaten.xls" 'zu prüfende Pfad + Datei
    If IsFileOpen(strFile) = True Then
    MsgBox "Die Datei " & vbLf & strFile & vbLf _
    & " ist zur Zeit geöffnet. Bitte später nochmals probieren!", _
    vbInformation, "Daten speichern"
    Else
    'MsgBox zum Testen
    MsgBox "Die Datei " & vbLf & strFile & vbLf _
    & " ist zur Zeit nicht geöffnet. " & vbLf & vbLf & "OK = Speichern!", _
    vbInformation, "Daten speichern"
    'Daten speichern
    '...
    End If
    'ist datei offen wird ohne nachfrage/schreibgeschütz öffnen/schließen o.dergleichen der punkt übergangen
    ist die datei zu wird sie geöffnet, daten können übertragen werden
    Dim wb As Workbook
    On Error Resume Next
    Set wb = Workbooks("WZ Stammdaten.xls")
    On Error GoTo 0
    If wb Is Nothing Then
    Workbooks.Open Filename:="G:\boninfo\VTest\WZ Stammdaten.xls"
    Windows("WZ Stammdaten.xls").Activate
    End If
    End Sub

    Anzeige
    AW: Prüfung-Datei geöffnet
    19.09.2012 21:59:53
    fcs
    Hallo bassi,
    in deinem Makro "offenzu" ist die Logik der Prüfungen nicht korrekt umgesetzt. Unabhänig vom Ergebnis der 1. Prüfung wirde immer der Teil abgearbeitet in dem die Datei geöffnet werden soll.
    Außerdem bin ich kein Freund von "On Error Resume Next", da ein Makro dann unkontrolliert immer weiter ausgeführt wird. Besser ist es, den möglichen Fehler durch Prüfungen (bei dir Prüfung, ob Datei am Rechner des Users schon geöffnet ist) abzufangen, oder eine besondere Fehlerprüfung einzubauen.
    Ich hab zur Prüfung ob Arbeitsmappe geöffent eine weitere kleine Function eingebaut.
    Gruß
    Franz
    Textdatei mit Code
    https://www.herber.de/bbs/user/81898.txt
    Anzeige

    Links zu Excel-Dialogen

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige