我正在编写一个VBScript,以递归方式将文件夹中的每个CSV转换为xlsx文件。我想根据CSV文件中的分隔符分隔这些xlsx文件中的数据。
相关代码如下:
Set objWorkbook = objExcel.Workbooks.open(srccsvfile)
Set objWorksheet1 = objWorkbook.Worksheets(1)
objWorksheet1.Activate
objWorksheet1.Range("A:A").Select
MsgBox Selection '<<< Here the MsgBox is empty
Selection.TextToColumns objWorksheet1.Range("A1"), xlDelimited, xlDoubleQuote, False, False, False, False, False, True, "|"
我的问题是函数TextToColumns
什么也没做,因为Selection
是空的。
如何解决此问题?
(脚本是从.vbs文件执行的,而不是从Excel调试器执行的。)
答案 0 :(得分:1)
VBScript不支持像VBA这样的隐式对象,因此Selection
只是一个未定义的变量。如果没有Option Explicit
指令,则使用Empty
值自动初始化未定义的变量,该值在MsgBox
调用中自动转换为空字符串。
您需要指定为您提供Selection
属性的对象。
MsgBox objExcel.Selection
这样做会给你一个类型不匹配错误,因为范围不能转换为字符串。您需要使用适当的属性,例如Address
:
MsgBox objExcel.Selection.Address
您应该可以在TextToColumns
媒体资源上调用Selection
:
objExcel.Selection.TextToColumns ...
如果您想使用变量,可以将选择分配给如下:
Set selection = objExcel.Selection
selection.TextToColumns ...
或者,您可以直接在范围内使用TextToColumsn
方法,而无需先选择它:
objWorksheet1.Range("A:A").TextToColumns ...