Excel修改“来自文本的数据”的宏以打开对话框?
Posted
技术标签:
【中文标题】Excel修改“来自文本的数据”的宏以打开对话框?【英文标题】:Excel modify macro for "data from text" to open dialog box? 【发布时间】:2017-01-25 07:57:22 【问题描述】:所以我使用 CSV 文件,我需要打开 excel 转到数据 -> 从文本并以某种方式格式化某些列。 我录制了一个宏,但它总是打开我在录制宏时使用的文件。 如何修改宏以打开对话框并让我每次都选择一个文件? 我在互联网上找到了这段代码,但我不知道如何将它与我在 VBA 中录制的宏集成。
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
谢谢!
【问题讨论】:
【参考方案1】:嘿,我修改了你的代码:
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
在此粘贴此功能:
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 是否需要参考,告诉我它是否有效 :)
【讨论】:
谢谢!奇迹般有效。你能解释一下我把第 15 行 ".Name = "filename"" "filename" 放在那里检查我实际使用的文件名。当我第一次录制宏时,它曾经是 ".Name = "" 所以实际上,现在存在的这个“文件名”绝对没有任何关系,但它不会引起任何问题 - 为什么会这样?可以吗?在某些情况下会导致任何问题吗?谢谢! 您好,据我在文档link 中看到的,名称可以是您想要的任何名称:),因此您可以用任何内容替换该特定代码。如果你进入 Excel 数据 -> 连接,你会看到它在你的文件名下。但是,您可以使用此名称在 VBA 中引用它:ActiveSheet.QueryTables("filename")。【参考方案2】:试试这个:
Path = Application.GetOpenFilename()
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & Path, Destination:=Range("$A$1"))
【讨论】:
以上是关于Excel修改“来自文本的数据”的宏以打开对话框?的主要内容,如果未能解决你的问题,请参考以下文章