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

Dialogfenster Dateiöffnüngsreihenfolge bestimmen

Dialogfenster Dateiöffnüngsreihenfolge bestimmen
06.08.2015 13:26:19
Conelius
Hallo zusammen,
gibt es eine Möglichkeit die Reihenfolge der Dateiöffnung von den im Dialogfenster ausgewählten Dateien zu bestimmen?
D.h. es liegen jeweils drei Dateien vor mit unterschiedlichen Namen aber einem aufsteigenden Zählindex, wobei sich die Zahl immer an 9. letzten Stelle vom Dateinamen befindet z.B.:
Datei 1: Dateinamea_1_xyz.txt
Datei 2: Dateinameb_2_zyx.txt
Datei 3: Dateinamec_3_yzx.txt
Die Dateien sollen unabhängig von der Reihenfolge der Nutzerauswahl im Dialogfenster in der Reihenfole 1, 2, 3 geöffnet werden. Gibt es dafür eine Möglichkeit zur Umsetzung?
Hier mein Beispielcode:

Sub GetOpen_CHRs()
Application.DisplayAlerts = False
Application.ScreenUpdating = False
'Variablendeklaration
Dim varRetVal As Variant
Dim n, x         As Integer
x = 1
n = 1
'Dateiauswahlfenster und Definition des Startordnerpfads
ChDir "Beispielpfad"
varRetVal = Application.GetOpenFilename(FileFilter:="Microsoft Excel-Dateien (*.txt), *.txt",   _
_
Title:="Bitte wählen Sie die Dateien aus", MultiSelect:=True)
'Öffnen aller ausgewählten Dateien
If IsArray(varRetVal) Then
On Error Resume Next
For n = LBound(varRetVal) To UBound(varRetVal)
Workbooks.Open varRetVal(n)
With ActiveSheet.QueryTables.Add(Connection:=varRetVal(n), Destination:=Range("$A$1"))
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 1252
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,   _
_
1, 1, 1, _
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileThousandsSeparator = "'" 'dient der Beseitigung der Tausendertrennzeichen die   _
_
sonst automatisch gesetzt werden
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
'Übertragung der geöffneten Dateien in die Tabellenblätter
Range("A1").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Windows("Beispieldatei.xlsm").Activate
Sheets("Beispieltabellenblatt_" & x).Select
x = x + 1
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False,  _
Transpose:=False
'Schließen der geöffneten Importdateien
For Each Wkb In Workbooks
If Wkb.Name  ThisWorkbook.Name Then
Wkb.Close savechanges:=False
End If
Next Wkb
Next
On Error GoTo 0
End If
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Call Beispielsub
End Sub

Bin über jede Hilfe dankbar!
Beste Grüße
Cornelius

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Dateiöffnüngsreihenfolge bestimmen
06.08.2015 13:35:54
Rudi
Hallo,
sortiere varRetVal nach der 9. Stelle.
Gruß
Rudi

genau
06.08.2015 13:48:27
Michael
Hi zusammen,
z.B. so:
Sub minisort()
Dim varRetVal As Variant
Dim von&, bis&, i&
varRetVal = Range("B12:B14")      ' nur hier zur Bestückung des Arrays
von = 12: bis = UBound(varRetVal) - LBound(varRetVal) + von
Range("D" & von & ":D" & bis) = varRetVal
For i = von To bis
Range("E" & i & ":E" & i) = Mid(Range("D" & i & ":D" & i), 9, 1)
Next
Range("D" & von & ":E" & bis).Sort key1:=Range("E" & i)
varRetVal = Range("D" & von & ":D" & bis)
End Sub
Arrays haben leider keine eingebaute Sortierfunktion; wenn Du excel vba array sort recherchierst, findest Du alle möglichen Treffer, die mit Quicksort oder anderen Algorithmen hantieren, aber die Werte schnell irgendwohin (z.B. in ein verstecktes Tabellenblatt) zu schreiben, zu sortieren und wieder auszulesen geht fix und ohne großes Nachdenken.
Schöne Grüße,
Michael

Anzeige
AW: genau
06.08.2015 14:37:43
Conelius
Vielen Dank schon einmal an euch beide. Aber damit komm ich leider noch nicht richtig weiter.
Leider habe ich in jeder Zeile den gleichen Inhalt des Arrays. Wieso wird der Inhalt des Arrays nicht durchlaufen mit der For-Schleife?
Ich hab nun in Spalte "E" immer in allen Zeilen dieselbe Zahl stehen und kann dementsprechend auch nicht sortieren.
Sub Datei_oeffnen
'Dateiauswahlfenster und Definition des Startordnerpfads
ChDir "Beispielpfad"
varRetVal = Application.GetOpenFilename(FileFilter:="Microsoft Excel-Dateien (*.txt), *.txt",    _
_
_
Title:="Bitte wählen Sie die Dateien aus", MultiSelect:=True)
'Öffnen aller ausgewählten CHR-Dateien in separaten Importdateien
If IsArray(varRetVal) Then
For n = LBound(varRetVal) To UBound(varRetVal)
von = 1: bis = UBound(varRetVal) - LBound(varRetVal) + von
Range("D" & von & ":D" & bis) = varRetVal
For i = von To bis
Range("E" & i & ":E" & i) = Left(Right(Range("D" & i & ":D" & i), 9), 1)
Next
Range("D" & von & ":E" & bis).Sort key1:=Range("E" & i)
varRetVal = Range("D" & von & ":D" & bis)
'Range("D1:E3").Clear
Next
End If
'Workbooks.Open varRetVal(n)
End Sub

Anzeige
Array
06.08.2015 14:53:20
Rudi
Hallo,
varRetVal ist eindimensional, ein Zellbereich immer zweidimensional.
Range("D" & von & ":D" & bis) = WorksheetFunction.Transpose(varRetVal)
....
....
varRetVal = WorksheetFunction.Transpose(Range("D" & von & ":D" & bis))
Achtung: das Array beginnt dann mit Index 1!!!
Ich würde das Array per Code sortieren.
z.B.
Sub sortiere(a)
Dim i As Long, j As Long, tmp
For i = LBound(a) To UBound(a)
For j = i + 1 To UBound(a)
If CInt(Mid(a(i), 9, 1)) > CInt(Mid(a(j), 9, 1)) Then
tmp = a(i)
a(i) = a(j)
a(j) = tmp
End If
Next j
Next i
End Sub

Gruß
Rudi
Gruß
Rudi

Anzeige
richtige Einfügeposition
06.08.2015 15:25:20
Michael
Hi zusammen,
Du hast den Codeschnipsel zum Sortieren an der falschen Stelle eingefügt.
Richtig wäre er hier:
Sub Datei_oeffnen()
' bis hierher vorhandener Code incl. nächste Zeile
If IsArray(varRetVal) Then
' ***************** hier sortieren **********
von = 12: bis = UBound(varRetVal) - LBound(varRetVal) + von
Range("D" & von & ":D" & bis) = varRetVal
For i = von To bis
Range("E" & i & ":E" & i) = Mid(Range("D" & i & ":D" & i), 9, 1)
Next
Range("D" & von & ":E" & bis).Sort key1:=Range("E" & i)
varRetVal = Range("D" & von & ":D" & bis)
' ***************** hier sortieren **********
' ab hier vorhandener Code *************
On Error Resume Next
For n = LBound(varRetVal) To UBound(varRetVal)
' usw.
End Sub
Aber das nur der Vollständigkeit halber.
Rudis Codeschnipsel ist eine Implementation von Bubblesort, z.B. hier nachzulesen:
https://de.wikipedia.org/wiki/Bubblesort
Schöne Grüße,
Michael

Anzeige
das ist FALSCH!!!!
06.08.2015 16:08:20
Rudi
Hallo,
mit
Range("D" & von & ":D" & bis) = varRetVal

wird in alle Zellen immer das erste Element von varRetVal geschrieben, da varRetVal 1-dimensional ist (0 to 2).
varRetVal = Range("D" & von & ":D" & bis)

macht aus varRetval ein 2-dimensionales Array (1 to 3, 1 to 1)
Durch einfaches Transponieren wird daraus varRetVal(1 to 3)
Deshalb würde ich per Code sortieren, da die Dimensionen erhalten bleiben. Bei so wenigen Elementen ist die Methode wurscht.
Gruß
Rudi

Anzeige
AW: das ist FALSCH!!!!
07.08.2015 08:27:48
Conelius
Sehr gut! Vielen Dank Rudi Maintaire es klappt!!!

Vielen Dank für die Korrektur,
07.08.2015 13:30:34
Michael
Rudi,
Du hast ja Recht!
Entschuldigung, Cornelius, daß ich Dich auf den falschen Weg geführt habe.
Happy Exceling,
Michael

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige