Teil des Namens auslese_VBA

Hi zusammen;

möchte gerne in einem Makro für VBA in Word 2003, den Namen des aktiven Dokuments auslesen ohne den ersten 4 Stellen (sind Zahlen). Im Moment lese ich den kompetten Namen so aus:

Dateiname = ActiveDocument.Name

weiß aber nicht wie ich die ersten vier Stellen wegbekomme.

mfg M.

Hallo,

Dateiname = ActiveDocument.Name

weiß aber nicht wie ich die ersten vier Stellen wegbekomme.

abschneiden.

Dateiname = Right(ActiveDocument.Name, Len(ActiveDocument.Name) - 4)

Gruß Rainer

Danke ganau das wars.

Hab aber gleich noch ne Frage:

Ich muss einen Bestimmten Text aus einer .txt Datei auslesen.

Ich brauche immer genau den Text der in der Zeile steht in der eine bestimmte Nummer vorkommt (Nummer wird über UserForm eingegeben), und da die .txt aus einer Excel Tabelle stammt habe ich auch Spalten (halt nur durch Tabstopps getrennt), und mein Text steht in der Spalte „7“ (Die Zahl 7 kommt in dieser Spalte auch vor (in der ersten Zeile))

Hoffe ich habs verständlich geschrieben.

mfg M.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

Hoffe ich habs verständlich geschrieben.

ja, hast Du.

In VB6 würde das bei mir etwas so aussehen …
(ungetestet, ich habe keine Datei als Beispiel)

Private Sub RD()
 Dim Na As String
 Dim Txt As String
 Dim Zl() As String
 Dim Fld() As String
 Dim Tmp As String
 Dim ff As Integer
 Dim i As Integer

 Na = "C:\DeinPfad\Textdatei.txt"
 ff = FreeFile
 Txt = Space(FileLen(Na))

 Open Na For Binary As #ff
 Get #ff, , Txt
 Close #ff

 Zl = Split(Txt, vbCrLf)

 For i = LBound(Zl) To UBound(Zl)
 Tmp = Zl(i)
 Fld = Split(Tmp, vbTab)
 If InStr(Fld(6), "7") Then
 MsgBox "Gefunden in Zeile " + Str(i + 1)
 End If
 Next
End Sub

Das sollte in VBA auch so funktionieren.

Gruß Rainer

Hallo Rainer,

Hoffe ich habs verständlich geschrieben.

ja, hast Du.

naja, ich kam durcheinander was da mit Zeile oder Spalte gemeint war,zumindest
„Die Zahl 7 kommt in dieser Spalte auch vor (in der ersten Zeile“
deute ich Zeilen als Spalten und umgekehrt.

Achja, den Dateinamen würde ich so ermitteln:
Dateiname = mid(ActiveDocument.Name, 5)

Auch ungetestet:

Function RD(ByVal Nr As Integer)
Dim Na As String
Dim Txt As String
Dim Zl() As String
Dim Fld() As String
Dim ff As Integer
Dim i As Integer
Na = "C\DeinPfad\Textdatei.txt"
ff = FreeFile
Txt = Space(FileLen(Na))
Open Na For Binary As #ff
 Get #ff, , Txt
Close #ff
Zl = Split(Txt, vbCrLf)
For i = LBound(Zl) To UBound(Zl)
 Fld = Split(z1(i), vbTab)
 If Fld(0) = Nr Then 'oder if fld(0)=cstr(nr) o.ä.
 RD = Fld(6)
 Exit For
 End If
Next
End Function

Gruß
Reinhard

Hallo Reinhard,

naja, ich kam durcheinander was da mit Zeile oder Spalte
gemeint war,zumindest
„Die Zahl 7 kommt in dieser Spalte auch vor (in der ersten
Zeile“
deute ich Zeilen als Spalten und umgekehrt.

hmmm, ich glaube, da steht nur in der Kopfzeile die Spaltennummer.

Achja, den Dateinamen würde ich so ermitteln:
Dateiname = mid(ActiveDocument.Name, 5)

Stimmt! Das vergesse ich immer wieder, daß das auch geht. :smile:

Auch ungetestet:

… Da habe ich Deinen Pre Tag repariert, Du hattest Dich vertippt.

Gruß Rainer

Hallo,

habe hier mal ne Beispieldatei hochgeladen:

http://www.loaditup.de/293001.html

Meine sieht ungefähr so aus nur länger und es stehen sinnvolle Texte drinnen.

So ich benötige aus dieser Datei immer einen Pfad weil ich eine Bestimmte Datei via SaveAs abspeichere und der Pfad in dieser Textdatei hinterlegt ist.

Und zwar benötige ich immer den Pfad in der Spalte sieben (in der Spalte wo der Siebener steht; oder den Text nach dem 6.Tapstop).
Die Zeile wird dadurch gekennzeichnet, dass in der ersten Spalte eine 4-Stellige Nummer steht die zum Pfad gehört (Diese Nummer wird in eine Textbox in einer UserForm eingegeben (txtAuswahlnummer).

Das heißt Auswahlkriterien sind: Spalte 7(oder nach 6.Tapstop) und Zeile in der 5555 (txtAuswahlnummer) Steht.

Nur zur Info: Am Ende sollte ich den Pfad irgendwie so bekommen:

PfadAustxt = …

mfg MPunkt

Und zwar benötige ich immer den Pfad in der Spalte sieben (in
der Spalte wo der Siebener steht; oder den Text nach dem
6.Tapstop).
Die Zeile wird dadurch gekennzeichnet, dass in der ersten
Spalte eine 4-Stellige Nummer steht die zum Pfad gehört (Diese
Nummer wird in eine Textbox in einer UserForm eingegeben
(txtAuswahlnummer).

Moin M.,

starte mal die Prozedur Test.

Gruß
Reinhard

Option Explicit
'
Sub test()
Dim Pfadaustxt As String
Call Erzeugen
Pfadaustxt = RD(5555)
MsgBox Pfadaustxt
End Sub
'
Sub Erzeugen()
Dim Zei As Long, Spa As Long, ff As Long, Satz As String
ff = FreeFile
Open "H:\kwtest.txt" For Output As #ff
For Zei = 5552 To 5559
 Satz = Zei & vbTab
 For Spa = 2 To 6
 Satz = Satz & "Zei" & Zei - 5551 & "Spa" & Spa & vbTab
 Next Spa
 Satz = Satz & "C:\Dokumente und Einstellungen\Ordner" & Zei - 5551 & vbTab
 Satz = Satz & "Zei" & Zei - 5551 & "Spa" & 8
 Print #ff, Satz
Next Zei
Close #ff
End Sub
'
Function RD(ByVal Nr As Integer) As String
Dim Na As String
Dim Txt As String
Dim Z1
Dim Fld
Dim ff As Integer
Dim i As Integer
RD = Nr & " wurde nicht gefunden"
Na = "H:\kwtest.txt"
ff = FreeFile
Txt = Space(FileLen(Na))
Open Na For Binary As #ff
 Get #ff, , Txt
Close #ff
Z1 = Split(Txt, vbCrLf)
For i = LBound(Z1) To UBound(Z1) - 1
 Fld = Split(Z1(i), vbTab)
 If Fld(0) = Nr Then
 RD = Fld(6)
 Exit For
 End If
Next
End Function

Hab es ausgeführt und folgendes ist passiert:

  1. Es hat die Datei umgeschrieben und zwar so wie ich sie hochgeladen habe (ich hab sie nur umbenannt) (sollte eher nicht sein, da noch andere Programme darauf zugreifen)

http://www.loaditup.de/293012.html

  1. Die MsgBox gibt den Pfad von der Zeile in der 5555 steht aus also: „C:\Dokumente und Einstellungen\Ordner4“

Also irgendwie nicht ganz das Richtige, hoffe aber du machst weiter!
Ich weiß leider nicht wie es gehn sollte. (Hab auch erst vor 2 Wochen angefangen in VBA zu programmieren, und kenn mich dementsprechend schlecht aus)

mfg M.

Hallo,

Hab es ausgeführt und folgendes ist passiert:

  1. Es hat die Datei umgeschrieben und zwar so wie ich sie
    hochgeladen habe (ich hab sie nur umbenannt) (sollte eher
    nicht sein, da noch andere Programme darauf zugreifen)

das hat Reinhard nur zum Test eingefügt.

http://www.loaditup.de/293012.html

  1. Die MsgBox gibt den Pfad von der Zeile in der 5555 steht
    aus also: „C:\Dokumente und Einstellungen\Ordner4“

Also irgendwie nicht ganz das Richtige,

Jetzt verstehe ich gar nichts mehr. Du wolltest doch den Pfad angezeigt bekommen, in der in der ersten Spalte die Kennung ‚5555‘ steht?

Im Prinzip ist das immer noch der Code, den ich als erstes gepostet hatte. Du musst nur die spalten anpassen und das Suchkriterium richtig übergeben.

An Deinem Computer sitzt nur Du, etwas mitdenken, mitarbeiten musst Du schon. Nur kopieren und einfügen wird nicht reichen. Wir können nicht sehen, wo Du das Suchkriterium her nehmen möchtset.

Ich habe in meinem Code noch einmal ein paar Zeichen geändert, kein festes Suchkriterium angegeben, sondern ich rufe an der stelle jetzt eine Inputbox auf.

Die Zeile dann durch …

Su = txtEingabe.Text

… zu ersetzen wird hoffentlich klappen. Den namen Deines Steuerelements, aus dem Du das Suchkriterium holen möchtest, kennst nur Du.

Der Code ist nun mit Deinen Daten in VB6 getestet, läuft.
Deine Datei habe ich nach ‚C:‘ als ‚Test.txt‘ geschrieben.
Den Pfad dann zurückzugeben, statt in der Msgbox auszugeben bekommst Du hin?

Gruß Rainer

Private Sub RD()
 Dim Na As String
 Dim Txt As String
 Dim Zl() As String
 Dim Fld() As String
 Dim Tmp As String
 Dim Su As String
 Dim ff As Integer
 Dim i As Integer

 Na = "C:\Test.txt"
 ff = FreeFile
 Txt = Space(FileLen(Na))

 Su = InputBox("Bitte den zu suchenden Text eingeben", "Eingabe")

 Open Na For Binary As #ff
 Get #ff, , Txt
 Close #ff

 Zl = Split(Txt, vbCrLf)

 For i = LBound(Zl) To UBound(Zl)
 Tmp = Zl(i)
 Fld = Split(Tmp, vbTab)
 If InStr(Fld(0), Su) Then
 MsgBox Fld(6)
 End If
 Next
End Sub

Hi M.,

Hab es ausgeführt und folgendes ist passiert:

  1. Es hat die Datei umgeschrieben und zwar so wie ich sie
    hochgeladen habe (ich hab sie nur umbenannt) (sollte eher
    nicht sein, da noch andere Programme darauf zugreifen)

http://www.loaditup.de/293012.html

ich, andere,testen jden tag Fremdcode, weißt du wie meine Festplatte zugemüllt wäre, wenn ich da jedesmal die Dateipfade so errichten würde wie die Anfrager?

  1. Die MsgBox gibt den Pfad von der Zeile in der 5555 steht
    aus also: „C:\Dokumente und Einstellungen\Ordner4“

So hatte ich die Anfrage verstanden.

Also irgendwie nicht ganz das Richtige, hoffe aber du machst
weiter!
Ich weiß leider nicht wie es gehn sollte. (Hab auch erst vor 2
Wochen angefangen in VBA zu programmieren, und kenn mich
dementsprechend schlecht aus)

Manchmal kann man am VBA-Code nicht erkennen ob es Word, Excel, outlook Vba ist.

Scchau mal in die FAQs, Brettbeschreibungen der entsprechenden Bretter und schau mal ob es da Links auf VBA-Kurse zum Downladen gibt.

Gehe in eine große Stadtbücherei und leihe dir Bücher zu Vba aus.

Gehe zu Hugendubel oder sonst einem Büchermulti, schnapp dir da die dicken Bücher zu VBa un dprüfe am besten von konkreten Fragen, wie z.B. dieser Code, ob das Buch dir auch hilfreich wäre.
Notiere dir dann Verlag ,Autorenname, ggfs Titel, dann hole dir aus dieser Reihe ein altes Buch vom gleichen Autor zu VbA 97.

Gruß
Reinhard

For i = LBound(Zl) To UBound(Zl)
Tmp = Zl(i)
Fld = Split(Tmp, vbTab)
If InStr(Fld(0), Su) Then
MsgBox Fld(6)
End If
Next

Hallo Rainer,

hast du getestet? Ich wollte es erst wieder tun wenn M. nochmal Feedback gibt.

Ich habe ja deinen Code gemopst, mußte aber die For -Schleife so schreiben:

For i = LBound(Zl) To UBound(Zl) -1

ansonsten gab es Fehler bei Fld(0),

aber ich habe ja Fld auch anders dimensioniert als Du.

Gruß
Reinhard

Hallo Reinhard,

hast du getestet?

ja, läuft.

Ich wollte es erst wieder tun wenn M.
nochmal Feedback gibt.

Ich habe ja deinen Code gemopst,

Das ist doch OK, Deiner hätte ja auch nicht anders ausgesehen. Warum dann das selbe noch mal tippen?

mußte aber die For -Schleife
so schreiben:

For i = LBound(Zl) To UBound(Zl) -1

Dann prüfst Du die letzte Zeile nicht mit.

ansonsten gab es Fehler bei Fld(0),

Hmmm, verstehe ich nicht. :frowning:

aber ich habe ja Fld auch anders dimensioniert als Du.

Das darf eigentlich keine Rolle spielen.

Aber das ist ja egal, daß Details immer angepasst werden müssen ist normal. Im Prinzip beschreiben wir mit den Beispielen ja immer nur den Weg, den wir beschreiten würden, gehen muss ihn dann jeder selbst. Mehr als Hilfe zur Selbsthilfe soll das ja nicht werden.

Gruß Rainer

Hallo Rainer und Reinhard,

Danke für eure große Mühe, der letzte Code von Rainer funktioniert soweit. Habs auch schon in meinen Code eingebaut sodass ich es weiterverwenden kann. Ein Fehler kommt noch, es funktioniert aber trotzdem.

Beim Debuggen zeigt es in der Zeile
„If InStr(Fld(0), Su) Then“
einen Fehler an (Index auserhalb des zugelassenen Bereichs)
Warum weiß ich nicht, werd ich aber herausfinden.

Wie gesagt, habe mir eure Codes erst selber zu verstehen geben müssen (bin damit auch noch nicht ganz fertig ihn komplett zu verstehn). Teilweise fehlen mir auch noch grundlegende Sachen, suche mir aber schön langsam alles zusammen.

Wie gesagt: Danke nochmals, und hoffe ihr helft mir nocheinmal wenn ich den Fehler nicht wegbekomme.

mfg MPunkt

mußte aber die For -Schleife
so schreiben:
For i = LBound(Zl) To UBound(Zl) -1

Dann prüfst Du die letzte Zeile nicht mit.

ansonsten gab es Fehler bei Fld(0),

Hmmm, verstehe ich nicht. :frowning:

Es kommt Feheler Index außerhalb des Bereiches

aber ich habe ja Fld auch anders dimensioniert als Du.

Das darf eigentlich keine Rolle spielen.

Nachstehend der grad getestete Code, der Fehler kommt, wenn nach einer Nummer gesucht wird die es nicht gibt, hier die 5550.

Grundsätzlich interessiert mich eine andere Frage mehr, mein VB5.0 kennt kein Split, InstrRev.

Ich habe mir nun für Excel97, wo die beiden Funktionen auch unbekannt sind, Vba-Funktionen geschrieben, die sicher auch in VB5.0 funktionieren werden.

Wie/wo lege ich diese Funktionen ab, sodaß sie mir in jedem VB-Projekt von VB5.0 zur Verfügung stehen?

Danke ^ Gruß
Reinhard

Hallo Reinhard,

Es kommt Feheler Index außerhalb des Bereiches

dafür habe ich keine Erklärung. Sorry.

Grundsätzlich interessiert mich eine andere Frage mehr, mein
VB5.0 kennt kein Split, InstrRev.

Ich habe mir nun für Excel97, wo die beiden Funktionen auch
unbekannt sind, Vba-Funktionen geschrieben, die sicher auch in
VB5.0 funktionieren werden.

Wie/wo lege ich diese Funktionen ab, sodaß sie mir in jedem
VB-Projekt von VB5.0 zur Verfügung stehen?

Ohne weiteres Zutun in dem Projekt geht es nicht, Du musst die Funktion durch nachladen einbinden. Üblich ist, das dann in ein Modul zu packen, das Du dann immer in den Projekt lädtst. Dort deklarierst Du die Funktion Public und kannst sie jeweils verwenden.

Du musst Dich dann nur davor hüten, an dem Modul etwas zu ändern nachdem Du es in einem Projekt verwendet hast.

Packst Du die Funktion in ein eigenes Steuerelement kannst Du das dann mit VB5 und auch mit VBA verwenden, wenn ich mich nicht irre.

Gruß Rainer

Hallo,

Beim Debuggen zeigt es in der Zeile
„If InStr(Fld(0), Su) Then“
einen Fehler an (Index auserhalb des zugelassenen Bereichs)
Warum weiß ich nicht, werd ich aber herausfinden.

vermutlich hast Du über Deinem Projekt stehen:

Option Base 1

Dann beginnt Dein Array mit Fld(1) und nicht mit Fld(0).

Wie gesagt, habe mir eure Codes erst selber zu verstehen geben
müssen (bin damit auch noch nicht ganz fertig ihn komplett zu
verstehn). Teilweise fehlen mir auch noch grundlegende Sachen,
suche mir aber schön langsam alles zusammen.

Frag einfach, was unklar ist. Fragen können wir beantworten, erraten was Du weißt, können wir nicht so gut. :smile:

Gruß Rainer

Hallo,

Beim Debuggen zeigt es in der Zeile
„If InStr(Fld(0), Su) Then“
einen Fehler an (Index auserhalb des zugelassenen Bereichs)
Warum weiß ich nicht, werd ich aber herausfinden.

vermutlich hast Du über Deinem Projekt stehen:

Option Base 1

Nein hab ich nicht stehn, abgesehn davon ist bei mir der Index sowieso 1 also: Fld(1)

mfg MPunkt

Hallo Rainer,

Es kommt Fehler Index außerhalb des Bereiches

dafür habe ich keine Erklärung. Sorry.

ich habe kein Option Bbase 1 benutzt, Fld(0) gibt es halt nicht.

Wie/wo lege ich diese Funktionen ab, sodaß sie mir in jedem
VB-Projekt von VB5.0 zur Verfügung stehen?

Ohne weiteres Zutun in dem Projekt geht es nicht, Du musst die
Funktion durch nachladen einbinden. Üblich ist, das dann in
ein Modul zu packen, das Du dann immer in den Projekt lädtst.
Dort deklarierst Du die Funktion Public und kannst sie jeweils
verwenden.

Also über Rechtsklick auf die Form in der Liste, dann Hinzufügen—Modul.

Du musst Dich dann nur davor hüten, an dem Modul etwas zu
ändern nachdem Du es in einem Projekt verwendet hast.

Aha.

Packst Du die Funktion in ein eigenes Steuerelement kannst Du
das dann mit VB5 und auch mit VBA verwenden, wenn ich mich
nicht irre.

Wie mache ich das mit VB5.0? Ich dachte ocx kann ich damit nicht basteln.

Ja, ich weiß, Wasser predigen und selbst Wein predigen, sollte mir doch mal ein gutes Buch zu VB5.0 zulegen, anstatt dich oft zu löchern wegen Anfängerproblemen :smile:)

Gruß
Reinhard

vermutlich hast Du über Deinem Projekt stehen:
Option Base 1

Nein hab ich nicht stehn, abgesehn davon ist bei mir der Index
sowieso 1 also: Fld(1)

Hi M.,

Index 1 ist NICHT die erste Spalte einer durch Tab getrennten Zeile.

Zeige mal deinen grad aktuellen Code.

Gruß
Reinhard