Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
936to940
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
936to940
936to940
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Pfade ändern und vervollständigen

Pfade ändern und vervollständigen
28.12.2007 19:10:17
Stefan
Hallo meine Lieben
Habe mal wieder ein Problem.
Ich lese den Pfad aus einem in einer Zelle enthaltenem Hyperlink aus. Dazu nutze ich folgenden SUB

Sub test()
Dim sString As String
Dim i As Integer
Dim Blattname As String
Blattname = InputBox("Liniennummer eingeben")
With ActiveWorkbook.Sheets(Blattname).Select
For i = 1 To Range("B65536").End(xlUp).Row 'alle Zellen prüfen
If Cells(i, 2).Hyperlinks.Count > 0 Then 'wenn Link vorhanden
sString = Cells(i, 2).Hyperlinks(1).Address
Cells(i, 6) = Split(sString, "\")
End If
Next i
End With
End Sub


Die ausgegebenen Pfade sehen z.B. wie folgt aus:
\\bdp800\ablage\MFO2\10_QS9000\FORMULAR\3653 .xls
diese habe ich nun mit suchen und ersetzen umgewandelt:
G:\MFO2\10_QS9000\FORMULAR\3653 .xls
Jetzt habe ich noch Pfade die z. B. nur "3666 .xls" heißen.
Wie bekomme ich es hin, das der Pfad zum Schluß so aussieht:
G:\MFO2\10_QS9000\FORMULAR\3666 .xls
Die ausgelesenen Pfade möchte ich dann in einer Textdatei(welche mit erstellt werden soll) speichern um sie dann irgendwann in in einer Userform durch Checkboxen zu aktivieren und auszudrucken.
Vielen Dank im Voraus.
Stefan

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Pfade ändern und vervollständigen
29.12.2007 08:38:47
Stefan
Hallo
Hat den keiner einen Lösungsansatz ? Habe gestern selber noch bis 0:35 Uhr gesessen und es nicht viel bei rausgekommen.
Stefan

AW: Pfade ändern und vervollständigen
29.12.2007 09:25:59
Holger
Hallo Stefan,
ich glaube nicht, dein Problem erkannt zu haben, da es mir zu trivial erscheint angesichts des mitgeschickten Codes.
Offenbar hast du in der Spalte F teilweise Einträge mit der Pfadangabe "G:\MFO2\10_QS9000\FORMULAR\" und teilweise ohne. Bevor du dann die Umwandlung der Einträge ohne Pfad durchführst, musst du prüfen, ob überhaupt umzuwandeln ist (ggf. auch mit einem längeren Teilstring, wenn keine Eindeutigkeit). Erweitere deinen Code um
...
Cells(i, 6) = Split(sString, "\")
If Left(Cells(i,6).Value,7) = "G:\MFO2" then
Cells(i,6).Value = "G:\MFO2\10_QS9000\FORMULAR\" & Cells(i,6).Value
End if
End If
...
Die Textdatei erzeugst/erweiterst du mit
Open Name_deiner_Datei For Append As #1
For i = 1 To Range("B65536").End(xlUp).Row
if Cells(i,6).value"" Then Write#1, Cells(i,6).value
Next i
Close #1
Dabei gehe davon aus, dass in der Spalte F nur leere Zellen oder solche mit den zu speichernden Einträgen stehen.
Viel Erfolg
Holger

Anzeige
AW: Pfade ändern und vervollständigen
29.12.2007 09:47:00
Christian
Hallo Stefan,
hier ein Ansatz, wie du den Dateinamen ausschneiden und den neuen Pfad verknüpfen kannst.
Gruß
Christian

Sub test()
Dim sString As String
Dim i As Integer
Dim Blattname As String
Dim sFile As String, sPath As String
Blattname = InputBox("Liniennummer eingeben")
With ActiveWorkbook.Sheets(1)
For i = 1 To Range("B65536").End(xlUp).Row         'alle Zellen prüfen
If Cells(i, 2).Hyperlinks.Count > 0 Then        'wenn Link vorhanden
sString = Cells(i, 2).Hyperlinks(1).Address
sPath = Left(sString, InStrRev(sString, "\"))
sFile = Right(sString, Len(sString) - InStrRev(sString, "\"))
.Cells(i, 6) = sPath
.Cells(i, 7) = sFile
.Cells(i, 8) = "G:\MFO2\10_QS9000\FORMULAR\" & sFile
End If
Next i
End With
End Sub


Anzeige
AW: Pfade ändern und vervollständigen
29.12.2007 10:48:22
Stefan
Vielen Dank an Holger und Christian
Habe eure Vorschläge übernommen und noch ein bischen angepaßt.
Funzt super. Nun noch meine nächste Frage: Ist es möglich die txt.Datei vorher zu erstellen?
sinngemäß

Sub Pfade_speichern()
erstelle txt.Datei mit Namen "Pfade.txt" in (z.B.) "C:\Dokumente und Einstellungen\Stefan\ _
Desktop"
Open "C:\Dokumente und Einstellungen\Stefan\Desktop\Pfade.txt" For Append As #1
For i = 1 To Range("B65536").End(xlUp).Row
If Cells(i, 8).Value  "" Then Write #1, Cells(i, 8).Value
Next i
Close #1
End Sub


Ich möchte dann nach Anzahl der Pfade in der txtDatei, in eine Userform Checkboxen einfügen und nach anklicken dieser die Datei aus dem Pfad drucken. Ist aber alles noch im entstehen.
Gruß, Stefan

Anzeige
AW: Pfade ändern und vervollständigen
29.12.2007 14:06:00
Christian
hallo Stefan,
Ist es möglich die txt.Datei vorher zu erstellen?
klar, bringt aber nur was, wenn du auch was einzutragen hast.
Wenn du die Daten nur zur Laufzeit benötigst, wäre es sinnvoller sie in ein Array zu schreiben, läuft schneller und du sparst dir das txt file. Ich fürchte aber, ich hab deine Frage nicht verstanden...
Gruß
Christian

AW: Pfade ändern und vervollständigen
29.12.2007 14:45:47
Stefan
Hallo Christian
Im prinzip hast du mich schon richtig verstanden. Die Pfade die ich (mit Hilfe deines Codes) auslese und nun in den Zellen H5 bis H20 in QI Liste stehen habe, sollen in einer Textdatei stehen, um die einzelnen Pfade dem Code je einer Checkbox zu übergeben.
Momentan habe ich eine Userform, in der ich Checkboxen anklicke , wenn ich dann den "Drucken" Button betätige werden die gewählten Dokumente aufgerufen und dann gedruckt. Der Pfad steht dort aber im Code für jede einzelne Datei. Den soll sich die Prozedur aber aus der Textdatei holen.
Hänge mal was an zum Verständnis.
If CheckBox7.Value = True Then
Workbooks.Open Filename:= _
"G:\MFO2\10_QS9000\FORMULAR\3644ftL714 P14Schlußprüfen.xls" ' Filename soll aus Textdatei kommen
Range("G3").Select
ActiveCell = team & Chr(10) & aktdate
Range("n3").Select
ActiveCell = team & Chr(10) & aktdate
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
ActiveWindow.Close savechanges:=False
End If
Dieser einzelne Code liegt hinter dem "Drucken" Button und das für 9 Checkboxen.
Gruß, Stefan

Anzeige
AW: Pfade ändern und vervollständigen
29.12.2007 18:51:27
Christian
Hallo,
sorry - ich schau heute nur recht sporadisch in's Forum...
Hier ein Vorschlag ohne txt file und ohne CheckBox:
ein Userform mit einer Listbox (ListBox1) und 2 CommanButtons (~1 für's einlesen, ~2 für's drucken).
Gruß
Christian

Option Explicit
Private Sub CommandButton1_Click()
'Liste einlesen
Dim sString As String
Dim i As Long, k As Long
Dim Blattname As String
Dim sFile As String, sArrFullName() As String
Blattname = InputBox("Liniennummer eingeben")
With ActiveWorkbook.Sheets(Blattname)
For i = 1 To .Cells(Rows.Count, 2).End(xlUp).Row         'alle Zellen prüfen
If .Cells(i, 2).Hyperlinks.Count > 0 Then             'wenn Link vorhanden
sString = .Cells(i, 2).Hyperlinks(1).Address
sFile = Right(sString, Len(sString) - InStrRev(sString, "\"))
ReDim Preserve sArrFullName(k)
sArrFullName(k) = "G:\MFO2\10_QS9000\FORMULAR\" & sFile
k = k + 1
End If
Next
End With
Me.ListBox1.List = sArrFullName
End Sub
Private Sub CommandButton2_Click()
'gewählte Eintrage
Dim i As Long
With Me.ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
'machwas - zB drucken (hier nur MsgBox als Demo)
MsgBox .List(i)
End If
Next
End With
End Sub
Private Sub UserForm_Initialize()
Me.ListBox1.MultiSelect = 2
End Sub


Anzeige
AW: Pfade ändern und vervollständigen
29.12.2007 22:14:00
Stefan
Hallo Christian
Das du nicht so oft ins Forum schaust ist nicht so schlimm;-) Sind ja schließlich Feiertage zum erholen....
Soll ich dir die Excel Datei mal senden, damit du mal ein ungefähres Bild von meinem Vorhaben bekommst?
Gruß, Stefan

AW: Pfade ändern und vervollständigen
30.12.2007 11:27:00
Christian
hallo Stefan,
stell doch eine (möglichst abgespeckte) Version deiner Datei hier ins Forum.
Gruß
Christian

AW: Pfade ändern und vervollständigen
30.12.2007 12:52:09
Stefan
Hallo Christian
Ich versuche mal ob ichs hinbekomme.
https://www.herber.de/bbs/user/48707.xls
Habe die Datei abgespeckt, sodas nur noch die Userform aufgerufen wird, um die es geht. Auf der Seite "Einstellungen" in der Userform, wird nach der Liniennummer gefragt und dann wird die Datei" QI-Liste.xls" aufgerufen. Dort werden dann die Pfade der Hyperlinks ausgelesen und in die txt.Datei gespeichert.
Ich möchte nun nach Anzahl der Pfade in der txt.Datei Checkboxen auf der Seite "Ausschußzettel" erstellen.
Ist zwar ziemlich schwer, aber sieh selbst......
Gruß, Stefan

Anzeige
AW: Pfade ändern und vervollständigen
30.12.2007 14:50:00
Christian
Hallo Stefan,
natürlich kannst du die Daten auch zunächst in einem Text File speichern und später wieder abrufen.
Aber wenn sich die Quelle (QI-Liste.xls) ändert nutzt das wenig, da du dann nicht die aktuellen Daten hast.
Wenn du sowieso bei jedem Durchlauf die Quelle abfragst, ist das txt file unnötig. Dann schreibst du besser die Daten in ein Array (wie in meinem Bsp) und arbeitest anschließend mit den Einträgen des Arrays statt mit denen des txt files.
Auf die Erstellung von Checkboxes zur Laufzeit würde ich verzichten. Das geht natürlich, aber da muss man schon sehr sauber scripten. Deshalb mein Vorschlag, die Einträge des Arrays (oder des txt files) in einer Listbox aufzuführen. Da bist du von der Anzahl unabhängig.
btw: mit dem Code "Open "C:\Pfade.txt" For Append As #1" werden neue Einträge an ein vorhandenes File angehängt. Wenn du die Abfrage wiederholst hast du alle Einträge doppelt. Ist das so gewollt?
Tipp: Verwende stets "Option Explicit", das hilft ungemein bei der Fehlersuche.
Du kannst dies im VBA-Edtor über "Extras - Optionen - Reiter "Editor": Häkchen setzen bei "Variablendeklaration erforderlich" fest einstellen.
noch ein Tipp: immer sauber referenzieren - siehe zB. die Basics von Hans Herber.
Grüße
Christian
falls du weiterhin mit der Text Datei arbeiten willst, hier noch ein Bsp zum erzeugen und _ auslesen derselben:

Option Explicit
Sub WriteTxtFile()
'Bsp: text file schreiben (überschreibt vorhandene)
Dim intFile As Integer, i As Long
Const TXTFILE = "D:\1.txt"
intFile = FreeFile
With ThisWorkbook.Sheets("Tabelle1")
Open TXTFILE For Output As #intFile
For i = 1 To .Cells(Rows.Count, 2).End(xlUp).Row
If .Cells(i, 2)  "" Then
Print #intFile, .Cells(i, 2).Value
End If
Next
Close #intFile
End With
End Sub
Sub ReadTxtFile()
'Bsp: text file in array einlesen
Dim intFile As Integer
Dim strTxt As String, arrTxt
Const TXTFILE = "D:\1.txt"
intFile = FreeFile
Open TXTFILE For Binary Access Read As #intFile
strTxt = String(LOF(intFile), 0)
Get #intFile, , strTxt
Close #intFile
arrTxt = Split(strTxt, vbCrLf)
End Sub

Anzeige
AW: Pfade ändern und vervollständigen
30.12.2007 21:36:00
Stefan
Hallo Christian
Ich bins schonwieder mal.(Hoffe das Letzte mal in diesem Jahr ;-)
Dein Code zum erstellen der txt.Datei funktioniert bestens.
Aber der Code zum einlesen in ein Array geht nicht, oder ich bin irgendwie zu doof. Wenn ich das Ganze mal debugge hat der Wert arrtxt bis zum Schluß den Wert "0". Sollten da am Ende nicht die einzelnen Pfade drin stehen und könnte ich sie sie mir nicht über eine FOR NEXT Schleife einzeln debug.printen können. Habe mir dem Auslesen aus Dateien noch keinerlei Erfahrung. Der Rest sollte kein Problem sein

AW: Pfade ändern und vervollständigen
30.12.2007 22:25:01
Christian
Hallo,
der Bsp-Code von WriteTxtFile ist nicht direkt auf deine Datei zugeschnitten - das musst du noch anpassen, aber den Code hierzu haste ja schon.
Beim ReadTxtFile wird das File auf einen Schlag in ein Array gelesen. Das passierst erst in der _ letzten Zeile. Du kannst auf die einzelnen Werte zB wie folgt zugreifen:

arrTxt = Split(strTxt, vbCrLf)
For i = 0 to UBound(arrTxt)
debug.print arrTxt(i)
next
End Sub

oder du schaust dir einzelnen Werte im Lokalfenster an.
Gruß
Christian

Anzeige
AW: Pfade ändern und vervollständigen
31.12.2007 00:21:00
Stefan
Hallo Christian
Vielen Danke erst mal für deine super Hilfe. Wenn ich weitere Hilfe benötige werde ich mich nochmal melden(mit Sicherheit).
Dann einen guten Rutsch ins neue Jahr 2008.
Gruß, Stefan

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige