Anzeige
Archiv - Navigation
620to624
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
620to624
620to624
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Dateiname nur mit Teilstring ansprechen?

Dateiname nur mit Teilstring ansprechen?
12.06.2005 16:25:58
Korl
Hallo,
ich möchte in meinem Code eine bestimmte Workbooks ansprechen von der nur ein bestimmter String relevant sein soll.
Zum Beispiel:
Set WksG = Workbooks("GEBSTAT.TXT").Worksheets("Gebstat")
Also Workbooks("GEBSTAT.TXT") ersetzen als Workbooks("GEBSTAT & *:TXT")
Leider lässt sich mit dieser schreibweise das Workbook nicht ansprechen.
Gibt es hierfür auch eine Lösung?
Gruß Korl

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dateiname nur mit Teilstring ansprechen?
12.06.2005 16:33:28
Ramses
Hallo
Platzhalter können hier nicht verwendet werden.
Workaround unmittelbar nach dem öffnen:
Set WksG = Workbooks(ActiveWorkbook.Name)

Ausserdem enthält eine geöffnete Text-Datei immer nur ein Sheet. Du kannst also auf "ActiveSheet" Bezug nehmen.
Gruss Rainer
AW: Dateiname nur mit Teilstring ansprechen?
12.06.2005 17:00:10
Korl
Hallo Rainer,
besten Dank für Deine Erläuterung, jetzt habe ich wohl ein Problem.
Die Daten aus der Textdatei werden mit einem anderem Workbook geprüft und in dieses kopiert.
Dann klappt es nicht mehr mit "Set WksG = Workbooks(ActiveWorkbook.Name"
Kann ich mir einen Hilfsordner anlegen, in der mein Textfile zunächst kopiert, umbenannt wird in einen bestimmten Namen und dann geöffnet wird.
Bekommt man diese Möglichkeit in einem Code unter?
Und bei schließen dieses Textfiles, diesen aus den Hilfsordner löschen?
Gruß Korl
Anzeige
AW: Dateiname nur mit Teilstring ansprechen?
12.06.2005 17:56:27
Stefan B.
Hallo Korl,
Kann sein dass ich Deine Frage nicht richtig verstehe. Aber moeglicherweise laesst sich Dein Problem damit loesen, dass Du WksG global definierst, dass heisst ausserhalb einer Funktion oder Prozedur. Wenn Du dann die Zuweisung "Set WksG = Workbooks(ActiveWorkbook.Name)" gleich machst nachdem Du Deine Textdatei oeffnest, kannst Du immer mit WksG genau auf diese Datei zugreifen, egal von welcher Funktion oder Prozedur aus.
Ich hoffe das hilft!
Schoene Gruesse
Stefan B.
AW: Dateiname nur mit Teilstring ansprechen?
12.06.2005 18:43:46
Korl
Hallo Steffan,
auch Dir erstmal ein Dankeschön für Deine Unterstützung.
Vielleicht stelle ich mal meinen komplette Code da:
Hiermit wird die Taxtdatei geöffnet und an Userform übergeben:
Sub testtextaufruf()
Dim x As String
ChDir "C:\Test"
x = Application _
.GetOpenFilename("Text Dateien (*.txt), *.txt")
Workbooks.OpenText Filename:=x, Origin:=xlMSDOS, StartRow _
:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False _
, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), _
Array(3, 1), Array(4, 1)), TrailingMinusNumbers:=True
UserForm1.Show
End Sub
Diese habe ich im nachfolgenden Code "WksG" benannt:

Private Sub CommandButton2_Click()
' OK-Button
Dim WksD      As Worksheet
Dim WksG      As Workbook
Dim WksK      As Worksheet
Dim lLetzteD  As Long
Dim lLetzteG  As Long
Dim Wert$
Dim WertZ     As Long
'Dim StrDatei As String
'  StrDatei = "GEBSTAT"
On Error GoTo zu
Set WksG = Workbooks
Set WksD = Workbooks("GebStat Test").Worksheets("DB")
Set WksK = Workbooks("GebStat Test").Worksheets("Kehrbezirke")
If ComboBox1.Value = "" Then
MsgBox ("Es muß schon eine Kehrbezirksnummer ausgesucht werden,") & vbLf & " " _
& vbLf & "die dann übernommen werden soll !"
Exit Sub
Else
WksG.Range("E1:E" & Range("A65536").End(xlUp).Row).Value = ComboBox1.Value
' Eintrag der Kehrbezirks-Nr.
Wert = ComboBox1.Value
rnge = Wert
WksG.Range("E1:E" & Range("A65536").End(xlUp).Row).Value = Wert
If WorksheetFunction.CountIf(WksD.Range("E1:E65536"), WksG.Range("E1").Value) > 0 Then
UserForm1.Hide
WksG.Activate
WksG.Close savechanges:=False
MsgBox "Der Kehrbezirk ist schon aufgenommen, darum Abruch!"
Exit Sub
Else
' Eintrag der Daten ins Sheet "DB"
lLetzteG = IIf(WksG.Range("A65536") <> "", 65536, WksG.Range("C65536").End(xlUp).Row)
lLetzteD = IIf(WksD.Range("A65536") <> "", 65536, WksD.Range("A65536").End(xlUp).Row)
WksG.Range("A1:E" & lLetzteG).Copy
WksD.Range("A" & lLetzteD + 1).PasteSpecial Paste:=xlValues
' ermittelt den letzten Wert aus "DB" und meldet den Vollzug
z = WksD.Cells(65536, 4).End(xlUp).Row ' letzter Wert in Spalte D
WertZ = Cells(z, 4)
Set d = WksK.Columns(3).Find(What:=Wert, LookIn:=xlValues, LookAt:=xlWhole)
If Not d Is Nothing Then d(1, 2) = "OK"
Application.CutCopyMode = False 'entfernt die Zwischenspeicherung
' die Datei GEBSTAT wird wieder geschlossen
WksG.Activate
WksG.Close savechanges:=False
' die Datenbank wird redimensioniert
ActiveWorkbook.Names.Add Name:="DB", RefersToR1C1:=Sheets("DB").Range("A1").CurrentRegion
ende:
'aktualisiert die Pivottabel
Worksheets("Zusammenfassung").PivotTables("PivotTable1").PivotCache.Refresh
Worksheets("Kehrbezirke").Select
Range("G5").Select
End If
End If
Unload Me
zu:
End Sub

Könnt Ihr etwas mit meinem zusammengebastelten Code anfangen?
Gruß Korl
Anzeige
AW: Dateiname nur mit Teilstring ansprechen?
12.06.2005 18:57:53
Ramses
Hallo
warum machst du es nicht einfach so
Diese Anweisung in einem Modul AUSSERHALB einer Prozedur an erster Stelle im Modul
Public Dim WksG As Workbook
Sub_DeinMakro()
ChDir "C:\Test"
x = Application _
.GetOpenFilename("Text Dateien (*.txt), *.txt")
Workbooks.OpenText Filename:=x, Origin:=xlMSDOS, StartRow _
:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False _
, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), _
Array(3, 1), Array(4, 1)), TrailingMinusNumbers:=True
Wksg = Workbooks(x.Name)
UserForm1.Show
End Sub

Private Sub CommandButton2_Click()
' OK-Button
Dim WksD As Worksheet
Dim WksK As Worksheet
Dim lLetzteD As Long
Dim lLetzteG As Long
Dim Wert$
Dim WertZ As Long
'Dim StrDatei As String
usw

Gruss Rainer
Anzeige
Sorry,...
12.06.2005 18:58:36
Ramses
Hallo
muss natürlich
Set Wksg = Workbooks(x.Name)
heissen
Gruss Rainer
AW: Sorry,...
12.06.2005 20:19:48
Korl
Hallo Rainer,
der Code bleibt auch hier "Set Wksg = Workbooks(x.Name)" stehen und sagt "Objekt erforderlich"

Gruß Korl
AW: Sorry,...
12.06.2005 20:42:53
Ramses
Hallo
irgendwie hätte ich wohl etwas weniger Wein zum Abendessen trinken sollen :-)
Sorry.
Probiers mal so:
In die erste Zeile
Public WksG As Workbook
Das hast du richtig gesehen, und im ersten CodeTeil
Set Wksg = Workbooks(ActiveWorkbook.Name)
Dann sollte es nun eigentlich tun :-)
Gruss Rainer
AW: Sorry,...
12.06.2005 21:30:41
Korl
Hallo Rainer,
gönne Dir noch ein Gläschen Wein, dann fühlst Du Dich vielleicht nicht so genervt von mir ;-)
Der erste Teile läuft gut an. Probleme habe ich jezt hier:

Private Sub CommandButton2_Click()
' OK-Button
Dim WksD      As Worksheet
Dim WksK      As Worksheet
Dim lLetzteD  As Long
Dim lLetzteG  As Long
Dim Wert$
Dim WertZ     As Long
Dim rnge      As Long
Dim z         As Long
Dim d                As   ?????????????????? ich weis nicht wie!
'Dim StrDatei As String
'  StrDatei = "GEBSTAT"
On Error GoTo zu
Set WksG = Workbooks
Set WksD = Workbooks("GebStat Test").Worksheets("DB")
Set WksK = Workbooks("GebStat Test").Worksheets("Kehrbezirke")
If ComboBox1.Value = "" Then
MsgBox ("Es muß schon eine Kehrbezirksnummer ausgesucht werden,") & vbLf & " " _
& vbLf & "die dann übernommen werden soll !"
Exit Sub
Else
WksG.Range("E1:E" & Range("A65536").End(xlUp).Row).Value = ComboBox1.Value
' Eintrag der Kehrbezirks-Nr.
Wert = ComboBox1.Value
rnge = Wert
WksG.Range("E1:E" & Range("A65536").End(xlUp).Row).Value = Wert
If WorksheetFunction.CountIf(WksD.Range("E1:E65536"), WksG.Range("E1").Value) > 0 Then
UserForm1.Hide
WksG.Activate
WksG.Close savechanges:=False
MsgBox "Der Kehrbezirk ist schon aufgenommen, darum Abruch!"
Exit Sub
Else
' Eintrag der Daten ins Sheet "DB"
lLetzteG = IIf(WksG.Range("A65536") <> "", 65536, WksG.Range("C65536").End(xlUp).Row)
lLetzteD = IIf(WksD.Range("A65536") <> "", 65536, WksD.Range("A65536").End(xlUp).Row)
WksG.Range("A1:E" & lLetzteG).Copy
WksD.Range("A" & lLetzteD + 1).PasteSpecial Paste:=xlValues
' ermittelt den letzten Wert aus "DB" und meldet den Vollzug
z = WksD.Cells(65536, 4).End(xlUp).Row ' letzter Wert in Spalte D
WertZ = Cells(z, 4)
er bleibt bei d stehen!
Set d = WksK.Columns(3).Find(What:=Wert, LookIn:=xlValues, LookAt:=xlWhole)
If Not d Is Nothing Then d(1, 2) = "OK"
Application.CutCopyMode = False 'entfernt die Zwischenspeicherung
' die Datei GEBSTAT wird wieder geschlossen
WksG.Activate
WksG.Close savechanges:=False
' die Datenbank wird redimensioniert
ActiveWorkbook.Names.Add Name:="DB", RefersToR1C1:=Sheets("DB").Range("A1").CurrentRegion
ende:
'aktualisiert die Pivottabel
Worksheets("Zusammenfassung").PivotTables("PivotTable1").PivotCache.Refresh
Worksheets("Kehrbezirke").Select
Range("G5").Select
End If
End If
Unload Me
zu:
End Sub

Ich habe hier erst jetzt "Option Explicit" gesetzt.
Hättest Du nochmal ein Auge für diesen Code frei um ihn zu prüfen ?
Gruß Korl
Anzeige
AW: Sorry,...
12.06.2005 21:38:51
Ramses
Hallo
Müsste
Dim d As Range
heissen.
Gruss Rainer
AW: Sorry,...
12.06.2005 21:52:41
Korl
Hallo Rainer,
ich habe jetzt das "On Error GoTo zu" herausgenommen um zu sehen wo der Code stehen bleibt.

Private Sub CommandButton2_Click()
' OK-Button
Dim WksD      As Worksheet
Dim WksK      As Worksheet
Dim lLetzteD  As Long
Dim lLetzteG  As Long
Dim Wert$
Dim WertZ     As Long
Dim rnge      As Long
Dim z         As Long
Dim d         As Range
'Dim StrDatei As String
'  StrDatei = "GEBSTAT"
'On Error GoTo zu
'Set WksG = Workbooks
Set WksD = Workbooks("GebStat Test").Worksheets("DB")
Set WksK = Workbooks("GebStat Test").Worksheets("Kehrbezirke")
If ComboBox1.Value = "" Then
MsgBox ("Es muß schon eine Kehrbezirksnummer ausgesucht werden,") & vbLf & " " _
& vbLf & "die dann übernommen werden soll !"
Exit Sub
Else
#######################  bleibt hier stehen #############
"Objekt unterstützt diese eigenschaft oder methode nicht"
WksG.Range("E1:E" & Range("A65536").End(xlUp).Row).Value = ComboBox1.Value
' Eintrag der Kehrbezirks-Nr.
Wert = ComboBox1.Value
rnge = Wert
WksG.Range("E1:E" & Range("A65536").End(xlUp).Row).Value = Wert
If WorksheetFunction.CountIf(WksD.Range("E1:E65536"), WksG.Range("E1").Value) > 0 Then
UserForm1.Hide
WksG.Activate
WksG.Close savechanges:=False
MsgBox "Der Kehrbezirk ist schon aufgenommen, darum Abruch!"
Exit Sub
Else
' Eintrag der Daten ins Sheet "DB"
lLetzteG = IIf(WksG.Range("A65536") <> "", 65536, WksG.Range("C65536").End(xlUp).Row)
lLetzteD = IIf(WksD.Range("A65536") <> "", 65536, WksD.Range("A65536").End(xlUp).Row)
WksG.Range("A1:E" & lLetzteG).Copy
WksD.Range("A" & lLetzteD + 1).PasteSpecial Paste:=xlValues
' ermittelt den letzten Wert aus "DB" und meldet den Vollzug
z = WksD.Cells(65536, 4).End(xlUp).Row ' letzter Wert in Spalte D
WertZ = Cells(z, 4)
Set d = WksK.Columns(3).Find(What:=Wert, LookIn:=xlValues, LookAt:=xlWhole)
If Not d Is Nothing Then d(1, 2) = "OK"
Application.CutCopyMode = False 'entfernt die Zwischenspeicherung
' die Datei GEBSTAT wird wieder geschlossen
WksG.Activate
WksG.Close savechanges:=False
' die Datenbank wird redimensioniert
ActiveWorkbook.Names.Add Name:="DB", RefersToR1C1:=Sheets("DB").Range("A1").CurrentRegion
ende:
'aktualisiert die Pivottabel
Worksheets("Zusammenfassung").PivotTables("PivotTable1").PivotCache.Refresh
Worksheets("Kehrbezirke").Select
Range("G5").Select
End If
End If
Unload Me
'zu:
End Sub

Kannst Du noch?
Gruß Korl
Anzeige
AW: Sorry,...
12.06.2005 22:56:20
Ramses
Hallo
Es fehlt natürlich die Worksheets-Anweisung !
Du verwendest es doch bei anderen Anweisungen auch
WksG.Worksheets(1).Range("E1:E" & Range("A65536").End(xlUp).Row).Value = ComboBox1.Value
Gruss Rainer
AW: Sorry,...
12.06.2005 23:24:54
Korl
Hallo Rainer,
Du kannst Dich jetzt entspannen und nochmal zum Gläschen Wein greifen ;-)
Rainer Du hast mir sehr geholfen!
Vielen Dank dafür.
Gruß Korl
Das Projekt unter Excel 97?
13.06.2005 09:58:51
Korl
Hallo,
ich versuche mein o.g. Projekt nun unter Excel 97 laufen zu lassen und es tun sich wieder Probleme auf. Etwas konnte ich ändern aber nun sagt er "Index liegt außerhalb des gültigen Bereichs"

Private Sub CommandButton2_Click()
' OK-Button
Dim WksD      As Worksheet
Dim WksK      As Worksheet
Dim WksSt     As Worksheet
Dim lLetzteD  As Long
Dim lLetzteG  As Long
Dim Wert$
Dim WertZ     As Long
Dim z         As Long
Dim d         As Range
'On Error GoTo zu
Set WksSt = WbG.Worksheets(1)
'###################### an dieser Stelle fängt es an #########################
Set WksD = Workbooks("GebStat Test").Worksheets("DB")
Set WksK = Workbooks("GebStat Test").Worksheets("Kehrbezirke")
If ComboBox1.Value = "" Then
MsgBox ("Es muß schon eine Kehrbezirksnummer ausgesucht werden,") & vbLf & " " _
& vbLf & "die dann übernommen werden soll !"
Exit Sub
Else
WksSt.Range("E1:E" & Range("A65536").End(xlUp).Row).Value = ComboBox1.Value
' Eintrag der Kehrbezirks-Nr.
Wert = ComboBox1.Value
WksSt.Range("E1:E" & Range("A65536").End(xlUp).Row).Value = Wert
If WorksheetFunction.CountIf(WksD.Range("E1:E65536"), WksSt.Range("E1").Value) > 0 Then
UserForm1.Hide
WbG.Activate
WbG.Close savechanges:=False
MsgBox "Der Kehrbezirk ist schon aufgenommen, darum Abruch!"
Exit Sub
Else
' Eintrag der Daten ins Sheet "DB"
lLetzteG = IIf(WksSt.Range("A65536") <> "", 65536, WksSt.Range("C65536").End(xlUp).Row)
lLetzteD = IIf(WksD.Range("A65536") <> "", 65536, WksD.Range("A65536").End(xlUp).Row)
WksSt.Range("A1:E" & lLetzteG).Copy
WksD.Range("A" & lLetzteD + 1).PasteSpecial Paste:=xlValues
' ermittelt den letzten Wert aus "DB" und meldet den Vollzug
z = WksD.Cells(65536, 4).End(xlUp).Row ' letzter Wert in Spalte D
WertZ = Cells(z, 4)
Set d = WksK.Columns(3).Find(What:=Wert, LookIn:=xlValues, LookAt:=xlWhole)
If Not d Is Nothing Then d(1, 2) = "OK"
Application.CutCopyMode = False 'entfernt die Zwischenspeicherung
' die Datei GEBSTAT wird wieder geschlossen
WbG.Activate
WbG.Close savechanges:=False
' die Datenbank wird redimensioniert
ActiveWorkbook.Names.Add Name:="DB", RefersToR1C1:=Sheets("DB").Range("A1").CurrentRegion
ende:
'aktualisiert die Pivottabel
Worksheets("Zusammenfassung").PivotTables("PivotTable1").PivotCache.Refresh
Worksheets("Kehrbezirke").Select
Range("G5").Select
End If
End If
Unload Me
'zu:
End Sub

Aufgerufen wird es mit diesem Code:
Sub GEBSTAT_Aufruf()
Dim x As String

ChDir "C:\Test"
x = Application _
.GetOpenFilename("Text Dateien (*.txt), *.txt")

'If x = False Then Exit Sub
Workbooks.OpenText Filename:=x, Origin:=xlMSDOS, StartRow _
:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False _
, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), _
Array(3, 1), Array(4,
Set WbG = Workbooks(ActiveWorkbook.Name)
UserForm1.Show
End Sub

Verträgt sich Excel 97 nicht mit diesem: "Set WbG = Workbooks(ActiveWorkbook.Name)"
Weis jemand Rat?
Gruß Korl
Anzeige
AW: Das Projekt unter Excel 97?
13.06.2005 22:54:18
Ramses
Hallo
".. "Index liegt außerhalb des gültigen Bereichs"..."
Das deutet darauf hin, dass der Name des Tabellenblattes nicht richtig geschrieben ist.
Probies mal mit Workbooks("GebStat Test.xls").
Gruss Rainer
AW: Das Projekt unter Excel 97?
14.06.2005 08:04:42
Korl
Hallo Rainer,
wiedermal besten Dank für Deine Unterstützung, ich habe mich riesig gefreut.
Ja, Deine vorgeschlagene Schreibweise hat geholfen.

Gruß Korl
AW: Dateiname nur mit Teilstring ansprechen?
12.06.2005 20:15:23
Korl
Hallo Rainer,
setze ich "Public Dim WksG As Workbook" in die erste Zeile des Moduls wird "Dim angemeckert. Fehler beim Kompilieren, Erwartet: Bezeichner
Lasse ich Dim aus, wird die Textdatei geöffnet und bleibt im Modul hier stehen "WksG = Workbooks(x.Name)" und meint "Objekt erforderlich".
Entschuldige bitte meine unerfahrenheit im VBA.
Gruß Korl

Anzeige
AW: Dateiname nur mit Teilstring ansprechen?
12.06.2005 17:07:24
Uwe Küstner
Hallo Korl,
eigentlich ginge das schon:
Option Explicit

Private Sub ATest()
  Dim WksG As Workbook
  Dim StrDatei As String
  StrDatei = "TEST"
  Set WksG = Workbooks("TEST" & ".TXT")
  'oder
  'Set WksG = Workbooks(StrDatei & ".TXT")
  MsgBox WksG.Sheets(1).Cells(2, 2)
End Sub

Gruß Uwe
Anzeige
AW: Dateiname nur mit Teilstring ansprechen?
12.06.2005 17:46:25
Korl
Hallo Uwe,
das Problem ist, das das Workbook und deren Sheet automatisch den gleichen Namen haben.
Ich bekomme es mit Deiner schreibweise auch nicht hin.
Trotzdem Danke für Deine Unterstützung
Gruß Korl

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige