Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Direktfenster oder TXT-Datei? Problem damit.

Forumthread: Direktfenster oder TXT-Datei? Problem damit.

Direktfenster oder TXT-Datei? Problem damit.
24.05.2007 10:56:00
Andreas
Hallo,
ich habe zwei Prozeduren geschrieben, durch welche ein Ordner mit all seinen Exceldateien durchsucht wird. Dabei werden in das Direktfenster alle vorkommenden Verknüpfungen (siehe auch Bearbeiten -> Verknüpfungen…) geschrieben. Jetzt hab ich aber mitbekommen, dass das Direktfenster nur eine begrenzte Anzahl von Zeilen anzeigt. In den Fällen, wo mehr Verknüpfungen vorkommen, werden dann immer schon die ersten wieder gelöscht.
Kann man das irgendwo einstellen, dass mehr Zeilen angezeigt werden sollen? Wenn nicht, hab ich mir gedacht, das Problem über eine TXT-Datei zu lösen und die Verknüpfungen da hinein zu schreiben. Meine Versuche dazu sind aber alle gescheitert, denn das funktioniert in der rekursiven Prozedur nicht so leicht. Oder ich stell mich einfach zu dumm an!
Kann mir vielleicht jemand weiterhelfen?
Nachfolgend die beiden Prozeduren:
Option Explicit
Dim z As Long
' Rekursive Prozedur

Public Sub xDirFile(xpath As String)
Dim xa As Long
Dim xDir As String
ReDim xt(0) As String
Dim xi As Long
Dim xAc As String
Dim wb As Workbook
Dim aLinks
Dim i As Integer
Dim newlink As String
xDir = Dir(xpath & "\*.*", vbNormal Or vbReadOnly Or vbHidden _
Or vbSystem Or vbVolume Or vbDirectory Or vbArchive)
xa = 0
If Len(xDir) > 0 Then
xt(0) = xDir
End If
Do While Len(xDir) > 0
xDir = Dir
If Len(xDir) > 0 And Not xDir = "." And Not xDir = ".." Then
xa& = xa& + 1
ReDim Preserve xt(xa)
xt(xa) = xDir
End If
Loop
On Error GoTo Schleife
For xi& = 0 To xa&
If Len(xt(xi)) = 0 Then
Exit For
ElseIf Not xt(xi) = "." And Not xt(xi) = ".." Then
If Len(Dir$(xpath$ & "\" & xt$(xi&), vbNormal Or vbReadOnly Or vbHidden _
Or vbSystem Or vbVolume Or vbDirectory Or vbArchive)) > 0 Then
If Not (GetAttr(xpath & "\" & xt(xi)) And vbDirectory) = vbDirectory Then
'wenn Exceldatei
If UCase(Right(xt(xi), 3)) = "XLS" Then
Set wb = Workbooks.Open(xpath & "\" & xt(xi), 0, True)
aLinks = wb.LinkSources(xlExcelLinks)
If Not IsEmpty(aLinks) Then
' Zählvariable -> kann weggelassen werden
z = z + 1
For i = 1 To UBound(aLinks)
' Ausgabe der verwendeten Links im Direktfenster
Debug.Print aLinks(i)
Next i
End If
wb.Close savechanges:=False
Set wb = Nothing
End If
Else
Call xDirFile(xpath & "\" & xt(xi))
End If
End If
End If
Schleife:
Next xi&
On Error GoTo 0
End Sub


' Aufrufprozedur zum Start
Sub test()
Application.ScreenUpdating = False
z = 0
' der hier angegebene Pfad wird mit all seinen Unterpfaden durchgegangen
xDirFile "C:\Test"
Application.ScreenUpdating = True
' Ausgabe der Zählvariable im Direktfenster
Debug.Print z
End Sub


Gruss
Andreas

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Direktfenster oder TXT-Datei? Problem damit.
24.05.2007 11:44:06
Philipp
Hallo Andreas
Das Direktfenster kann max. 200 Zeilen anzeigen. Mehr geht nicht (auch nicht einstellbar).
In eine Textdatei schreiben geht am einfachsten so:
Anstelle der Zeile
Debug.Print aLinks(i)
verwende
Open "C:\Datei.txt" For Append As #1
Print aLinks(i)
Close #1
Wichtig ist das Öffnen mit "For Append". Das ständige Öffnen und Schliessen der Textdatei benötigt zwar ein bisschen Zeit, dafür aber funktioniert es problemlos.
Philipp von Wartburg
www.xlam.ch

Anzeige
AW: Direktfenster oder TXT-Datei? Problem damit.
24.05.2007 11:51:00
Oberschlumpf
Hi Andreas
Versuch mal so:
(habe jetzt nur die For/Next-Schleife aus deinem Code hier eingefügt - du musst deinen Code entsprechend anpassen)

Open ThisWorkbook.Path & "\links.txt" For Append As #1
For i = 1 To UBound(aLinks)
' Ausgabe der verwendeten Links in eine Textdatei
Print #1, aLinks(i)
Next i
Close


Konnte ich helfen?
Ciao
Thorsten

Anzeige
Danke
24.05.2007 12:44:00
Andreas
Danke euch beiden, das hat mir wirklich weitergeholfen.
Gruss
Andreas
;
Anzeige
Anzeige

Infobox / Tutorial

Direktfenster oder TXT-Datei: Lösungen für dein Problem


Schritt-für-Schritt-Anleitung

  1. Verstehe das Problem: Das Direktfenster in VBA kann maximal 200 Zeilen anzeigen. Wenn du mehr Verknüpfungen hast, werden die ältesten gelöscht.

  2. Ändere den Code: Anstatt die Verknüpfungen im Direktfenster auszugeben, kannst du sie in eine Textdatei schreiben. Ersetze die Zeile:

    Debug.Print aLinks(i)

    durch:

    Open "C:\Datei.txt" For Append As #1
    Print #1, aLinks(i)
    Close #1
  3. Führe die Prozedur aus: Starte deine Hauptprozedur, um die Verknüpfungen zu sammeln und in die Datei zu schreiben.


Häufige Fehler und Lösungen

  • Fehler beim Öffnen der Datei: Stelle sicher, dass der Pfad zur Textdatei korrekt ist und die Datei nicht von einem anderen Prozess verwendet wird.

  • Probleme mit der rekursiven Prozedur: Wenn du die rekursive Prozedur verwendest, achte darauf, dass du die Datei nicht zu oft öffnest und schließt. Das kann die Performance beeinträchtigen.


Alternative Methoden

Wenn du die Verknüpfungen nicht in eine Textdatei schreiben möchtest, gibt es auch andere Ansätze:

  • Verwendung von Excel-Tabellen: Du kannst die Verknüpfungen auch in ein Arbeitsblatt schreiben, anstatt sie ins Direktfenster oder in eine Datei zu schreiben. Das geht so:

    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Verknüpfungen")
    ws.Cells(z + 1, 1).Value = aLinks(i)
  • Export in CSV: Du könntest auch die Verknüpfungen in einer CSV-Datei speichern, die dann in anderen Programmen wie Excel oder Notepad geöffnet werden kann.


Praktische Beispiele

Hier ist ein vollständiges Beispiel, wie du die Verknüpfungen in eine Textdatei schreiben kannst:

Sub test()
    Application.ScreenUpdating = False
    z = 0
    xDirFile "C:\Test"
    Application.ScreenUpdating = True
    Debug.Print z
End Sub

Public Sub xDirFile(xpath As String)
    ' ... (Dein bestehender Code)
    For i = 1 To UBound(aLinks)
        ' Ausgabe der verwendeten Links in eine Textdatei
        Open "C:\Datei.txt" For Append As #1
        Print #1, aLinks(i)
        Close #1
    Next i
    ' ... (Rest deines Codes)
End Sub

Tipps für Profis

  • Verwende Variablen effektiv: Achte darauf, dass du deine Variablen sinnvoll benennst, um den Code lesbarer zu machen. Zum Beispiel könntest du aLinks in verknuepfungen umbenennen.

  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung, um sicherzustellen, dass dein Code auch bei unerwarteten Ereignissen stabil bleibt. Nutze On Error Resume Next oder spezifische Fehlerbehandlungen.

  • Modularer Code: Überlege, deine Prozeduren in kleinere, modulare Einheiten zu unterteilen, die spezifische Aufgaben erledigen. Das erleichtert das Testen und die Wartung.


FAQ: Häufige Fragen

1. Kann ich das Direktfenster nicht einfach vergrößern? Leider kann die Anzahl der Zeilen im Direktfenster nicht angepasst werden. Du musst die Ausgabe daher in eine Datei umleiten.

2. Was ist der Vorteil, die Verknüpfungen in eine Datei zu schreiben? Das Speichern in einer Datei ermöglicht dir eine unbegrenzte Anzahl an Verknüpfungen zu speichern, ohne dass ältere gelöscht werden.

3. Welche Excel-Version benötige ich? Die beschriebenen Techniken sind in den meisten modernen Excel-Versionen ab Excel 2003 verfügbar.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige