2017-01-25 3 views
0

Also ich arbeite mit CSV-Dateien und ich muss Excel öffnen gehen Sie auf Daten -> Aus Text und formatieren bestimmte Spalten bestimmte Möglichkeiten. Ich habe ein Makro aufgenommen, das das tut, aber es öffnet immer die Datei, die ich beim Aufzeichnen des Makros benutzt habe. Wie ändere ich das Makro, so öffnet es das Dialogfeld und lassen Sie mich jedes Mal eine Datei auswählen? Ich habe dieses Stück Code im Internet gefunden, aber ich weiß nicht, wie ich es mit meinem aufgezeichneten Makro in VBA integrieren kann.Excel-Makro für "Daten aus Text" ändern, um das Dialogfeld zu öffnen?

Dim MyFile As String 
MyFile = Application.GetOpenFilename() 

Nun, wie und wo und was ersetze ich in der unten stehenden Makro (der Code für die erstellt wird, um die „Makro aufzeichnen“, um in Excel)?

Sub random_name() 
' 
' random_name Macro 
' 

' 
    With ActiveSheet.QueryTables.Add(Connection:= _ 
     "TEXT;MyFile = Application.GetOpenFilename()" _ 
     , Destination:=Range("$A$1")) 
     .Name = "filename" 
     .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, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _ 
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) 
     .TextFileTrailingMinusNumbers = True 
     .Refresh BackgroundQuery:=False 
    End With 
End Sub 

Vielen Dank!

Antwort

0

Hey Ich habe Ihren Code geändert:

Sub random_name() 
' 
' random_name Macro 
' 

' 
Dim connectioString As String 

connectioString = "TEXT;" & ListFile 


    With ActiveSheet.QueryTables.Add(Connection:= _ 
     connectioString _ 
     , Destination:=Range("$A$1")) 
     .Name = "filename" 
     .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, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _ 
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) 
     .TextFileTrailingMinusNumbers = True 
     .Refresh BackgroundQuery:=False 
    End With 
End Sub 

beneth diese diese Funktion einfügen:

Function ListFile() 
' ----- Creating a dialog object ----------------------------------- 
    Dim oDiag As FileDialog 
    Dim vrtSelectedItem As Variant 
    Dim i As Integer 
    Set oDiag = Application.FileDialog(msoFileDialogFilePicker) 
    i = 0 
    With oDiag 
' ----- Going thru all of the files -------------------------------- 
     .AllowMultiSelect = False 
     If .Show = -1 Then 

      ListFile = .SelectedItems(1) 

     End If 
    End With 

    Set oDiag = Nothing 

End Function 

Ich bin an dieser Stelle nicht zu 100% sicher, wenn filialialog benötigt eine Referenz sagen Sie mir, wenn es funktioniert :)

+0

Danke! Klappt wunderbar. Könnten Sie einfach Zeile 15 erklären ".Name =" Dateiname "" "Dateiname" wurde von mir dort gesetzt, um meinen tatsächlich verwendeten Dateinamen zu zensieren. Als ich das Makro zum ersten Mal aufzeichnete, war es ".Name =" " Also in Wirklichkeit bezieht sich dieser" Dateiname ", der gerade da ist, absolut noch nichts verursacht - warum ist das? Könnte es irgendwelche Probleme in einigen Situationen verursachen? Danke! –

+0

Hallo, soweit ich sehe in der Dokumentation [link] (https://msdn.microsoft.com/en-us/library/office/ff820914. aspx) Der Name kann alles sein, was Sie wollen, damit Sie dieses bestimmte Stück Code durch etwas ersetzen können.Wenn Sie in Excel Daten gehen -> Verbindungen werden Sie sehen, dass es unter Ihrem Dateinamen ist. Sie können jedoch verwenden Dieser Name verweist in VBA auf ActiveSheet.QueryTables ("Dateiname"). – Tackgnol

0

Try this:

Path = Application.GetOpenFilename() 
    With ActiveSheet.QueryTables.Add(Connection:= _ 
     "TEXT;" & Path, Destination:=Range("$A$1")) 
Verwandte Themen