【发布时间】:2019-06-11 23:17:33
【问题描述】:
我正在尝试使用 VBA 代码将 CSV 文件导入 MS Excel (2016)。到目前为止,操作导入不起作用,Excel 每次都使用 Windows 系统分隔符,而不是我试图在 VBA 导入中设置的内容。
所以,我想首先使用 VBScript 将系统分隔符从“逗号”更改为“制表符”,导入 CSV 文件,然后将系统分隔符设置回“逗号”。
将 VBScript 作为单独的文件并通过以下方式运行它:
Shell "wscript D:\Hutsul\ChangeDelimiter.vbs", vbNormalFocus
有效,但 VBA 需要在其他机器上运行,为了便于使用,我想尝试在 Excel VBA 环境中内联编码 VBScript。
我写的代码停在Set scr = New ScriptControl 并抛出:
运行时错误“429”:ActiveX 组件无法创建对象
试过set scr = CreateObject("MSScriptControl.ScriptControl") 没有帮助。
此外,这是我的 VBAProject 参考的片段:
- Visual Basic 应用程序
- Microsoft Excel 16.0 对象库
- OLE 自动化
- Microsoft Office 16.0 对象库
- Microsoft ActiveX 数据对象 6.1 库
- Microsoft HTML 对象库
- Microsoft 脚本运行时
- Microsoft VBScript 正则表达式 5.5
- Microsoft 脚本控制 1.0
- Microsoft Scriptlet 库
下面是我的内嵌脚本的 VBA 代码(单独的脚本文件只包含 scriptCode 行中的内容:
'Execute VBScript directly from VBA to change system delimiter from COMMA to TAB
Dim scriptCode As String
Dim scr As ScriptControl: Set scr = New ScriptControl
scriptCode = ""
scriptCode = scriptCode & "Set sh = CreateObject(""WScript.Shell"")"
scriptCode = scriptCode & "Path = ""HKCU\Control Panel\International\sList"""
scriptCode = scriptCode & "Set Separator = CreateObject(""Scripting.Dictionary"")"
scriptCode = scriptCode & "Separator.Add True, ""\t"""
scriptCode = scriptCode & "Separator.Add False, "","""
scriptCode = scriptCode & "sh.RegWrite Path, Separator(sh.RegRead(Path) = "",""), ""REG_SZ"""
scr.Language = "VBScript"
scr.AddCode scriptCode
scr.Run scriptCode
另外,当脚本本身被执行时(现在作为一个单独的 .vbs 文件)多次,它切换分隔符,而不是仅仅从“逗号”设置到“制表符”并保持这种方式,所以如果分隔符已经是“制表符”并且我再次运行脚本,则分隔符再次变为“逗号”。
非常感谢任何帮助,谢谢!
【问题讨论】:
-
注册
C:\Windows\System32\MSscript.ocx你应该没问题:) -
@SiddharthRout 成功注册了 MSscript.ocx 但之后同样的错误
-
我知道问题出在哪里了。让我发布一个答案
-
为什么你的 VBS 代码不能像在 VBA 中那样工作。VBScript 被设计成可以粘贴到 VBA 中。