2017-01-25 9 views
0

Итак, я работаю с файлами CSV, и мне нужно открыть excel, перейдите в Data -> Из текста и отформатируйте определенные столбцы определенным образом. Я записал макрос, который делает это, но он всегда открывает файл, который я использовал при записи макроса. Как изменить макрос, чтобы он открывал диалоговое окно и позволял мне выбирать файл каждый раз? Я нашел этот кусок кода в Интернете, но я не знаю, как его интегрировать с моим записанным макросом в VBA.Excel изменить макрос для «данных из текста», чтобы открыть диалоговое окно?

Dim MyFile As String 
MyFile = Application.GetOpenFilename() 

Теперь, как и где и что я заменю в приведенном ниже макросе (код, для которого создается с помощью кнопки «Запись макроса» в 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 

Спасибо!

ответ

0

Эй я изменил код:

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 это вставить эту функцию:

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 

Я не в этот момент 100% конечно, если filedialog требуется ссылка, скажите мне, если это работает :)

+0

Спасибо! Работает как шарм. Не могли бы вы объяснить строку 15 «.Name =« filename »« «filename» был помещен мной там, чтобы подвергнуть цензуре мое фактическое используемое имя файла. Когда я впервые записал макрос, он использовался как «.Name =» <фактическое имя моего файла> » Так что на самом деле это« имя файла », которое есть прямо сейчас, абсолютно ничего не вызывает, но оно не вызывает никаких проблем. что? Может ли это вызвать какие-либо проблемы в некоторых ситуациях? Спасибо! –

+0

Привет, насколько я вижу в документации [link] (https://msdn.microsoft.com/en-us/library/office/ff820914. aspx) Имя может быть любым, что вы хотите, чтобы оно было :), чтобы вы могли заменить какой-то конкретный фрагмент кода. Если вы перейдете в Excel Data -> Connections, вы увидите, что оно находится под вашим именем. Вы можете использовать это имя ссылается на него в VBA: ActiveSheet.QueryTables ("filename"). – Tackgnol

0

Попробуйте это:

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