Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1848to1852
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

Fehler mit Multiselect:=True

Fehler mit Multiselect:=True
30.09.2021 10:07:48
Walter
Hallo,
ich habe folgendes Problem. Bei meiner Makro wird eine G-Code Datei in Excel importiert, was auch einwandfrei funktioniert.
Jetzt möchte ich jedoch die Möglichkeit haben, mehrere Dateien zu importieren.
Also habe ich bei Application.GetOpenFilename am Ende MultiSelect:=True hinzugefügt.
Jedoch kommt jetzt immer, auch wenn ich nur eine Datei importieren will ein Laufzeitfehler 13.
https://www.herber.de/bbs/user/148361.txt
Danke

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehler mit Multiselect:=True
30.09.2021 10:57:14
Rudi
Hallo,
als Anregung:

Sub Test()
Dim i As Integer
Dim strTMP As String, strFILE As String
Dim vntFILES
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = True
.InitialFileName = "*.xlsx"
If .Show Then
For i = 1 To .SelectedItems.Count
strTMP = strTMP & vbTab & .SelectedItems(i)
Next i
End If
End With
If Len(strTMP) Then
vntFILES = Split(Mid(strTMP, 2), vbTab)
For i = 0 To UBound(vntFILES)
strFILE = vntFILES(i)
'dein Code
MsgBox strFILE
Next i
End If
End Sub
Gruß
Rudi
AW: Fehler mit Multiselect:=True
30.09.2021 12:14:05
Walter
Hallo Rudi,
danke für die Antwort. Leider kommt immer noch die Fehlermeldung : Typen unverträglich.
Zudem öffnet sich der Explorer zweimal. (Wahrscheinlich durch das Verbinden unserer beiden Codes)
Gruß Walter
Anzeige
AW: Fehler mit Multiselect:=True
30.09.2021 12:34:43
Rudi

Zudem öffnet sich der Explorer zweimal. 
du musst natürlich dein GetOpenFilename rausschmeißen.

Sub Test()
Dim i As Integer
Dim strTMP As String, strFILE As String
Dim vntFILES
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = True
.InitialFileName = "*.xlsx"
If .Show Then
For i = 1 To .SelectedItems.Count
strTMP = strTMP & vbTab & .SelectedItems(i)
Next i
End If
End With
If Len(strTMP) Then
vntFILES = Split(Mid(strTMP, 2), vbTab)
For i = 0 To UBound(vntFILES)
strFILE = vntFILES(i)
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & strFILE, Destination:=Range("A1"))
End With
Next i
End If
End Sub

Anzeige
AW: Fehler mit Multiselect:=True
30.09.2021 12:39:20
Daniel
Hi
Wenn du MultiSelect = True hast, ist das Ergebnis ein Array, auch wenn du nur einen Wert auswählst.
Dh die Aufnehmende Variable sollte vom Typ Variant sein und auch in der Folge musst du entsprechend programmieren, bspw mit einer Schleife über die Elemente des Arrays laufen.
Bzw, den Code kannst du auch hier direkt in den Beitrag einfügen, dann muss man nicht extra die Datei öffnen.
Wenn ihn als "Zitat" formatiert, wird er auch als Code angezeigt mit Einrückungen und in Courier.
Gruß Daniel
AW: Fehler mit Multiselect:=True
01.10.2021 09:49:58
Walter
Hallo,
erstmal danke für die Antworten.
@Daniel varName habe ich als Variant definiert
@Rudi habs mit deinem neuen Code versucht, jedoch kommt jetzt folgende Fehlermeldung: Laufzeitfehler '1004'
Hier der aktuelle Stand, ich hoffe ich füge den Code dieses mal richtig ein:

https://www.herber.de/bbs/user/148382.txt

Anzeige
AW: Fehler mit Multiselect:=True
01.10.2021 13:01:28
Daniel
Naja, die Deklaration als Variant reicht noch nicht.
Wenn die Variable dann ein Array ist, musst du sie in der Programmierung anders handhaben als einen Einzelwert.
Hast du das in der Programmierung berücksichtigt?
Zeig mal deinen Code, aber bitte nicht als Textfile.
Gruß Daniel
AW: Fehler mit Multiselect:=True
01.10.2021 09:51:33
Walter

Dim i As Integer
Dim strTMP As String, strFILE As String
Dim vntFILES
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = True
.InitialFileName = "*.gcode"
If .Show Then
For i = 1 To .SelectedItems.Count
strTMP = strTMP & vbTab & .SelectedItems(i)
Next i
End If
End With
If Len(strTMP) Then
vntFILES = Split(Mid(strTMP, 2), vbTab)
For i = 0 To UBound(vntFILES)
strFILE = vntFILES(i)
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & strFILE, Destination:=Range("A1"))
' Import
Dim varName As Variant
ChDrive Left(ActiveWorkbook.Path, 4)
ChDir ActiveWorkbook.Path
ChDir "S:\.......\" & Ordnername & ""
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & varName, Destination:=Range("A1"))
.Name = "Spray_Can.gcode"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileOtherDelimiter = "="
.TextFileColumnDataTypes = Array(2, 2)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End With
Next i
End If

Anzeige
AW: Fehler mit Multiselect:=True
01.10.2021 11:54:51
Yal
Hallo Walter,
viele unnötige Variablen.
Versuch mehr Struktur und Klarheit reinzubringen, in dem der Auswahl und Durchlauf in einem Sub und das Laden in einem anderen stattfindet.
Wenn es mehrere Dateien sind, dann muss Du in verschiedene Blätter laden.

Sub Datei_behandeln()
Dim i As Integer
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = True
.InitialFileName = "*.gcode"
If .Show Then
For i = 1 To .SelectedItems.Count
Datei_öffnen .SelectedItems(i)
Next i
End If
End With
End Sub
Private Sub Datei_öffen(Dateiname As String)
ChDrive Left(ActiveWorkbook.Path, 4)
ChDir ActiveWorkbook.Path
ChDir "S:\.......\" & Ordnername & ""
ThisWorkbook.Worksheets.Add
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & Dateiname, Destination:=Range("A1"))
.Name = "Spray_Can.gcode"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileOtherDelimiter = "="
.TextFileColumnDataTypes = Array(2, 2)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End Sub
VG
Yal
Anzeige
AW: Fehler mit Multiselect:=True
01.10.2021 12:30:01
Walter
Hallo Yal,
danke für die Antwort, jedoch kommt bei deinem Code immer die Fehlermeldung:
Fehler beim Kompilieren:
Sub oder Function nicht definiert

Dabei wird: Datei_öffnen im ersten Sub blau hinterlegt.
Habe auch schon versucht Datei_öffnen im ersten Sub als String zu definieren, hat jedoch auch nichts gebracht.
Danke schonmal im voraus.
Walter
AW: Fehler mit Multiselect:=True
01.10.2021 15:17:51
Yal
Hallo Walter,
"Sub oder Function nicht definiert" bedeutet Sub oder Funktion nicht definiert.
Also in der For-Schelife wird versucht eine Sub oder Function zu rufen, die "Datei_öffnen" heissen soll.
Wenn Du genau schaust, gibt es ein paar Zeilen drunter eine Sub (Private Sub) die "Datei_öffen" heisst.
Warum wird diese nicht gefunden? Weil Computer eine Unterschied zwischen "Datei_öffen" und "Datei_öffnen" machen.
Es ist eine Fehler von mir, ich habe mich vertippt, habe aber gedacht, Du kommst damit zu recht.
Ändere entweder den Name des Subs "Datei_öffen" in "Datei_öffnen" oder nehme den "n" weg in dem Aufruf innerhalb der For-Schleife.
VG
Yal
Anzeige
AW: Fehler mit Multiselect:=True
04.10.2021 12:06:02
Walter
Hallo Yal,
Danke für die Hilfe, habe so viel umherprobiert, dass ich das komplett übersehen habe.
Der Code funktioniert größtenteils so wie er sollte jedoch hätte ich noch zwei Fragen.
1. Die Vereichnisauswahl: ChDir "S:\............\" & Ordnername & "" wird ignoriert, und es wird immer, der zuletzt verwendete Ordner, ausgewählt.
Zuvor, als ich die Dateien noch mit: varName = Application.GetOpenFilename("G-Code-Dateien,*.gcode,Alle Dateien,*.*") importiert habe ging das noch.
2. Gibt es eine Möglichkeit, dass die neu erstellten Tabellenblätter benannt werden, also (Import1, Import2, Import3,....)
Vielen Dank im vorraus
Walter
Anzeige
AW: Fehler mit Multiselect:=True
04.10.2021 12:38:22
Yal
Hallo Walter,
für ein feinere Steuerung verwede lieber den FileDialog

Sub test()
Dim fd As Office.FileDialog
Dim D
Set fd = Application.FileDialog(msoFileDialogOpen)
fd.InitialFileName = "C:\Users.......\" & Ordnername
fd.Filters.Clear
fd.Filters.Add "G-Code-Dateien", "*.gcode"
fd.Filters.Add "Alle Dateien", "*.*"
fd.AllowMultiSelect = True
If fd.Show Then
For Each D In fd.SelectedItems
Next
End If
End Sub
VG
Yal
AW: Fehler mit Multiselect:=True
04.10.2021 15:48:01
Walter
Hallo Yal,
sry für meine teilweise dummen Fragen, aber ich bin ein kompletter Neuling in Sachen vba.
Mit dem FileDialogOpen, muss ich bei fd.InitialFileName immer den kompletten Dateipfad einfügen anstatt nur den Order anzugeben, sonst kommt immer ein Laufzeitfehler 1004.
Gibt es eine Möglichkeit, dass ich hier mit einem Art Platzhalter arbeite? \*.gcode" funktioniert leider nicht.
Vielen Dank
Walter

Sub test3()
Dim fd As Office.FileDialog
Dim D
Set fd = Application.FileDialog(msoFileDialogOpen)
fd.InitialFileName = "S:\Mechanik.......\*.gcode"
fd.Filters.Clear
fd.Filters.Add "G-Code-Dateien", "*.gcode"
fd.Filters.Add "Alle Dateien", "*.*"
fd.AllowMultiSelect = True
If fd.Show Then
For Each D In fd.SelectedItems
ThisWorkbook.Worksheets.Add
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & fd.InitialFileName, Destination:=Range("A1"))
.Name = ".gcode"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileOtherDelimiter = "="
.TextFileColumnDataTypes = Array(2, 2)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
Next
End If
End Sub

Anzeige
AW: Fehler mit Multiselect:=True
04.10.2021 17:52:33
Yal
Hallo Walter,
eigentlich gibst Du bei Initialname nur einen Pfad auf einem Verzeichnis, nicht auf einen Datei. Der Dateityp *.gcode wird durch den Filter beschränkt.
Ich würde weiterhin die Verarbeitung der Power Query-Abfrage in einem separaten Sub ablegen, um ein bessere Übersicht innerhalb des Codings zu haben, Siehe mein ersten Vorschlag.
Du übergibst nicht
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & fd.InitialFileName, Destination:=Range("A1"))
Sondern:

Sub test3()
Dim fd As Office.FileDialog
Dim Dateiname
Set fd = Application.FileDialog(msoFileDialogOpen)
fd.InitialFileName = "S:\Mechanik.......\"
fd.Filters.Clear
fd.Filters.Add "G-Code-Dateien", "*.gcode"
fd.Filters.Add "Alle Dateien", "*.*"
fd.AllowMultiSelect = True
If fd.Show Then
For Each Dateiname In fd.SelectedItems
NeueDatei_abfragen Dateiname
Next
End If
End Sub
Sub NeueDatei_abfragen(ByVal Dateiname As String)
ThisWorkbook.Worksheets.Add
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & Dateiname, Destination:=Range("A1"))
.Name = ".gcode"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileOtherDelimiter = "="
.TextFileColumnDataTypes = Array(2, 2)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End Sub
VG
Yal
VG
Yal
Anzeige
AW: Fehler mit Multiselect:=True
05.10.2021 08:16:27
Walter
Hallo Yal,
danke für die Antwort. Hab das davor mit und ohne \*.gcode am Ende versucht, aber der neue Code funktioniert jetzt.
Jetzt hab ich noch eine letzte Frage: Ist es möglich, dass die Tabellenblätter, die erstellt werden auch benannt werden mit: Import1, Import2, Import3,.....?
Vielen Dank im vorraus
Walter
AW: Fehler mit Multiselect:=True
05.10.2021 08:52:01
Walter
Ok hab es selber hinbekommen:
Vielen Dank für deine ganze Hilfe Yal, ohne dich wäre ich aufgeschmissen

' Import (Start von Private Sub)
Dim fd As Office.FileDialog
Dim Dateiname
Dim Dateicounter As Variant
Set fd = Application.FileDialog(msoFileDialogOpen)
fd.InitialFileName = "S:\Automotive\PC\DE\100_AZPS\45_Technik\420_3D_Additive Fertigung\04_Auftragsübersicht\" & Ordnername & ""
fd.Filters.Clear
fd.Filters.Add "G-Code-Dateien", "*.gcode"
fd.Filters.Add "Alle Dateien", "*.*"
fd.AllowMultiSelect = True
If fd.Show Then
For Each Dateiname In fd.SelectedItems
NeueDatei_abfragen Dateiname
'Umbenennung
Dateicounter = Dateicounter + 1
If Dateicounter = 1 Then
ActiveSheet.Name = "Import1"
ElseIf Dateicounter = 2 Then
ActiveSheet.Name = "Import2"
End If
Next
End If

AW: Fehler mit Multiselect:=True
05.10.2021 10:11:55
Yal
Hallo Walter,
Vorschlag (aber nur wenn Du verstehst, was da passiert):

For Each Dateiname In fd.SelectedItems
NeueDatei_abfragen Dateiname
'Umbenennung (DateiCounter-Zahl wird am Name des Imports hinzugefügt. Autokonvertierung von Zahl zu Text)
Dateicounter = Dateicounter + 1
ActiveSheet.Name = "Import" & DateiCounter
Next
VG
Yal
AW: Fehler mit Multiselect:=True
05.10.2021 10:32:55
Walter
Hallo Yal,
dass ist natürlich die schlauere und schönere Lösung.
Danke
Walter

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige