Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1216to1220
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

Autofilter

Autofilter
Horst
Hallo Excel-Freaks,
Hallo Tino!
Der folgende Code filtert ein Arbeitsblatt nach bestimmten Kriterien (per Autofilter) und speichert das Ergebnis als .txt-Datei ab, was an und für sich problemlos funktioniert. Allerdings werden in der .txt-Datei die Datumsformate nicht richtig übernommen, Ländereinstellung ist Deutsch (mit Punkt als Dezimaltrennzeichen); Beispiel:
2/22/1991
2/27/1991
03.04.1991
3/22/1991
3/28/1991
06.05.1991
6/25/1991
07.01.1991
7/29/1991
8/20/1991
8/28/1991
09.05.1991
Muss an der Zeile:
.UsedRange.AutoFilter Field:=7, Criteria1:=" etwas verändert werden?
Anbei der vollständige Code:
Option Explicit
Sub Schreibe_TxT()
Dim oApp As Excel.Application, oWB_Ex As Workbook
Dim iCalc%
Dim sPath$, File_Test$, File_Train$, File_ReTrain$, File_XLX$
Dim tmpWS As Worksheet
Dim lngMaxRow&, nCount&, sString$, strInfo$
Dim F%
sPath$ = IIf(Right$(ThisWorkbook.Path, 1) = "\", ThisWorkbook.Path, ThisWorkbook.Path & "\")
File_XLX = sPath & "database.xls" 'evtl. Pfad anpassen
File_Test = sPath & "Test.txt" 'evtl. Pfad anpassen
File_Train = sPath & "Train.txt" 'evtl. Pfad anpassen
File_ReTrain = sPath & "ReTrain.txt" 'evtl. Pfad anpassen
'Text- File löschen, evtl. Zeilen löschen wenn nicht gewünscht
If Dir(File_Test, vbNormal)  "" Then Kill File_Test
If Dir(File_Train, vbNormal)  "" Then Kill File_Train
If Dir(File_ReTrain, vbNormal)  "" Then Kill File_ReTrain
On Error GoTo ErrorHandler:
Set oApp = New Excel.Application
oApp.Visible = False 'evtl. auf True setzen, wenn der Vorgang sichbar sein soll
Set oWB_Ex = oApp.Workbooks.Open(File_XLX, True, True)
iCalc = oApp.Calculation
oApp.EnableEvents = False
oApp.Calculation = xlCalculationManual
oApp.DisplayAlerts = False
With oWB_Ex
Set tmpWS = .Sheets.Add
With .Sheets("results")
.UsedRange.AutoFilter Field:=8, Criteria1:="1"
.UsedRange.AutoFilter Field:=7, Criteria1:=" 1 Then
With Application
F = FreeFile
Open File_Test For Append As #F
sString = Join(.Transpose(.Transpose(tmpWS.UsedRange.Rows(lngMaxRow))), vbTab)
Print #F, sString
Close #F
strInfo$ = Chr(149) & " " & Mid$(File_Test, InStrRev(File_Test, "\") + 1, Len(File_Test) _
) & vbCr
lngMaxRow = lngMaxRow - 1
If lngMaxRow > 1 Then
Open File_ReTrain For Append As #F
nCount = .Max(2, lngMaxRow - 49)
For lngMaxRow = nCount To lngMaxRow
sString = Join(.Transpose(.Transpose(tmpWS.UsedRange.Rows(lngMaxRow))),  _
vbTab)
Print #F, sString
Next lngMaxRow
Close #F
strInfo$ = strInfo$ & Chr(149) & " " & Mid$(File_ReTrain, InStrRev(File_ReTrain, "\" _
) + 1, Len(File_ReTrain)) & vbCr
End If
nCount = nCount - 1
If nCount > 1 Then
Open File_Train For Append As #F
For lngMaxRow = 2 To nCount
sString = Join(.Transpose(.Transpose(tmpWS.UsedRange.Rows(lngMaxRow))),  _
vbTab)
Print #F, sString
Next lngMaxRow
Close #F
strInfo$ = strInfo$ & Chr(149) & " " & Mid$(File_Train, InStrRev(File_Train, "\") +  _
1, Len(File_Train)) & vbCr
End If
End With
End If
ErrorHandler:
If iCalc  0 Then oApp.Calculation = iCalc
oApp.Quit
Set oApp = Nothing
If Err.Number  0 Then
MsgBox Err.Description, vbCritical + vbMsgBoxSetForeground + vbMsgBoxHelpButton, _
"Error: " & Err.Number, Err.HelpFile, Err.HelpContext
Else
MsgBox "Text- Files geschrieben!" & vbCr & vbCr & Left$(strInfo, Len(strInfo) - 1),  _
vbInformation
End If
End Sub
Besten Dank für Eure Hilfe!

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Autofilter
27.05.2011 09:59:43
Rudi
Hallo,
Steht das wirklich so in der .txt (mal mit Notepad öffnen) oder kommt das so in XL an, wenn du die .txt wieder einliest?
Ein Workaround ist, die Datumswerte als Long in die .txt zu schreiben.
Gruß
Rudi
AW: Autofilter
27.05.2011 22:51:11
Horst
also in der .txt steht es immer mit dem gleichen Format z.B. "1/3/2011" drin, allerdings kommte es beim Re-Import (Copy-Paste) nicht richtig an, womit könnte das zu tun haben?
lg, Horst
AW: Autofilter
27.05.2011 22:51:22
Horst
also in der .txt steht es immer mit dem gleichen Format z.B. "1/3/2011" drin, allerdings kommte es beim Re-Import (Copy-Paste) nicht richtig an, womit könnte das zu tun haben?
lg, Horst
Anzeige
AW: Version über Zwischenlager
29.05.2011 15:51:31
Horst
Hallo Tino,
hab' ich bereits probiert. Allerdings ist die Datumsformatierung in der ".txt" mit der ersten Variante ident. Das mit dem Datum ist aber mittlerweile auch kein großes Problem mehr, stellt eigentlich nur Zusatzinformation dar, wichtig waren mir die Werte in den gefilterten Zellen.
Ein aktuelleres Problem ist folgendes: Im sheet "database.xls", in dem das Makro läuft, befinden sich eine Menge Zellbezüge zu einer externen Arbeitsmappe ("hit.xls"). Diese externe "hit.xls" wird von einem externen Programm erstellt, wobei der Name der .xls gleich der Tabellenname "hit" ist. Dummerweise hat Excel 2003 die Eigenart, bei Zellbezügen, die sich auf eine .xls mit gleichnamigen Tabellenblatt beziehen, bei der Aktualisierung Bezugsfehler auszugeben. Eine Aktualisierung der Zellbezüge in der "database.xls" ist dann nur möglich, sofern diese externe "hit.xls" geöffnet ist.
Und nun die Frage: Kann man in das folgende Makro noch einbauen, dass sich die externe "hit.xls" kurz öffnet, die "database.xls" anschließend aktualisiert und danach alles wieder geschlossen wird?
Option Explicit
Sub generate_signal()
Dim oApp As Excel.Application, oWB_Ex As Workbook
Dim iCalc%
Dim sPath$, File_Test$, File_Train$, File_ReTrain$, File_XLX$
Dim tmpWS As Worksheet
Dim lngMaxRow&, nCount&, sString$, strInfo$
Dim F%
sPath$ = IIf(Right$(ThisWorkbook.Path, 1) = "\", ThisWorkbook.Path, ThisWorkbook.Path & "\")
File_XLX = sPath & "db.xls" 'evtl. Pfad anpassen
File_Test = sPath & "Test.txt" 'evtl. Pfad anpassen
File_Train = sPath & "Train.txt" 'evtl. Pfad anpassen
File_ReTrain = sPath & "ReTrain.txt" 'evtl. Pfad anpassen
' vorhandene Text- File löschen
If Dir(File_Test, vbNormal)  "" Then Kill File_Test
If Dir(File_Train, vbNormal)  "" Then Kill File_Train
If Dir(File_ReTrain, vbNormal)  "" Then Kill File_ReTrain
On Error GoTo ErrorHandler:
Workbooks.Open "C:\Dokumente und Einstellungen\User\Desktop\Test_Order\Test_Order"
Set oApp = New Excel.Application
oApp.Visible = False 'evtl. auf True setzen, wenn der Vorgang sichbar sein soll
Set oWB_Ex = oApp.Workbooks.Open(File_XLX, True, True)
iCalc = oApp.Calculation
oApp.EnableEvents = False
oApp.Calculation = xlCalculationManual
oApp.DisplayAlerts = False
With oWB_Ex
Set tmpWS = .Sheets.Add
With .Sheets("results")
.UsedRange.AutoFilter Field:=134, Criteria1:="1"
.UsedRange.AutoFilter Field:=126, Criteria1:=" 1 Then
With Application
F = FreeFile
Open File_Test For Append As #F
sString = Join(.Transpose(.Transpose(tmpWS.UsedRange.Rows(lngMaxRow))), vbTab)
Print #F, sString
Close #F
strInfo$ = Chr(149) & " " & Mid$(File_Test, InStrRev(File_Test, "\") + 1, Len(File_Test) _
) & vbCr
lngMaxRow = lngMaxRow - 1
If lngMaxRow > 1 Then
Open File_ReTrain For Append As #F
nCount = .Max(2, lngMaxRow - 49)
For lngMaxRow = nCount To lngMaxRow
sString = Join(.Transpose(.Transpose(tmpWS.UsedRange.Rows(lngMaxRow))),  _
vbTab)
Print #F, sString
Next lngMaxRow
Close #F
strInfo$ = strInfo$ & Chr(149) & " " & Mid$(File_ReTrain, InStrRev(File_ReTrain, "\" _
) + 1, Len(File_ReTrain)) & vbCr
End If
nCount = nCount - 1
If nCount > 1 Then
Open File_Train For Append As #F
For lngMaxRow = 2 To nCount
sString = Join(.Transpose(.Transpose(tmpWS.UsedRange.Rows(lngMaxRow))),  _
vbTab)
Print #F, sString
Next lngMaxRow
Close #F
strInfo$ = strInfo$ & Chr(149) & " " & Mid$(File_Train, InStrRev(File_Train, "\") +  _
1, Len(File_Train)) & vbCr
End If
End With
End If
ErrorHandler:
If iCalc  0 Then oApp.Calculation = iCalc
oApp.Quit
Set oApp = Nothing
If Err.Number  0 Then
MsgBox Err.Description, vbCritical + vbMsgBoxSetForeground + vbMsgBoxHelpButton, _
"Error: " & Err.Number, Err.HelpFile, Err.HelpContext
Else
MsgBox "Text- Files geschrieben!" & vbCr & vbCr & Left$(strInfo, Len(strInfo) - 1),  _
vbInformation
End If
End Sub

Hilft evtl. der folgende Code: (?)
Sub xl_open_with_no_links ()
Dim o As Object
' Neues Objekt anlegen und Datei öffnen
Set o = CreateObject("Excel.sheet")
o.application.workbooks.open "c:\Excel\Excel.xls", 3
End 

Sub

Anzeige
AW: Version über Zwischenlager
29.05.2011 16:20:40
Tino
Hallo,
bei mir wird es so wie in Excel dargestellt in die Textdatei geschrieben?!
Zur Deiner Frage
schreibe vor die Zeile
Set oWB_Ex = oApp.Workbooks.Open(File_XLX, True, True)
diese
'Pfad zur hit.xls anpassen !!!!!!!!!!!!!
oApp.Workbooks.Open "C:\Ordner\hit.xls", ReadOnly:=True 
Gruß Tino
AW: Version über Zwischenlager
29.05.2011 16:38:08
Horst
Hallo Tino,
jetzt bleibt die Prozedur in der Zeile "If iCalc 0 Then oApp.Calculation = iCalc" mit der Fehlermeldung:
"Laufzeitfehler 91: Objektvariable oder With-Blockvariable nicht festgelegt" hängen. Den Pfad hab ich angepasst. Woran kann das liegen?
Gruß, Horst
Anzeige
AW: Version über Zwischenlager
29.05.2011 18:16:27
Tino
Hallo,
mir fällt auf bei Dir im Code in der Zeile
Workbooks.Open "C:\Dokumente und Einstellungen\User\Desktop\Test_Order\Test_Order"
fehlt eine Datei, evtl. diese Zeile löschen.
Gruß Tino
AW: Version über Zwischenlager
29.05.2011 19:54:12
Horst
Hallo,
die Zeile habe ich bereits gelöscht, aber die Fehlermeldung bleibt. Keine Ahnung woran das liegt, die .xls-Dateien sind ziemlich groß, rund 100 MB.
hier die Test Dateien von damals
29.05.2011 21:46:10
damals
Hallo,
habe es hier mal eingebaut, mit den Daten die wir damals hatten.
https://www.herber.de/bbs/user/75069.zip
Gruß Tino
Anzeige
AW: hier die Test Dateien von damals owT
30.05.2011 21:51:57
damals
danke!

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige