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修改“来自文本的数据”的宏以打开对话框?的主要内容,如果未能解决你的问题,请参考以下文章

WORD中的宏被禁止怎么办?

如何去除excel的宏保护?

使用 VBA 将包含 Excel 文件 (.xlsm) 的宏保存为不包含宏的文件 (.xlsx) 时抑制对话框

EXCEL中的宏命令设置了密码,如何打开?

使用带有 where 子句的宏打开表单并打开对话框

打开excel总是提示宏禁用的解决方法