【问题标题】:Cannot select a range无法选择范围
【发布时间】:2016-07-25 13:04:41
【问题描述】:

我正在编写一个 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 调试器执行)。

【问题讨论】:

    标签: excel vbscript


    【解决方案1】:

    VBScript 不支持像 VBA 这样的隐式对象,因此您的 Selection 只是一个未定义的变量。如果没有Option Explicit 指令,未定义的变量将使用Empty 值自动初始化,该值在MsgBox 调用中自动转换为空字符串。

    您需要指定为您提供Selection 属性的对象。

    MsgBox objExcel.Selection
    

    但是,这样做应该会给您一个类型不匹配错误,因为不能将范围强制转换为字符串。您需要使用适当的属性,例如Address:

    MsgBox objExcel.Selection.Address
    

    不过,您应该可以在 Selection 属性上调用 TextToColumns

    objExcel.Selection.TextToColumns ...
    

    如果你想使用一个变量,你可以像这样将选择分配给一个:

    Set selection = objExcel.Selection
    selection.TextToColumns ...
    

    或者,您可以直接在范围上使用TextToColumsn 方法,而无需先选择它:

    objWorksheet1.Range("A:A").TextToColumns ...
    

    【讨论】:

    • 非常有启发性的答案,谢谢。我遇到的另一个问题是我忘记用它们的值替换“xlDelimited”和“xlDoubleQuote”常量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    • 1970-01-01
    • 1970-01-01
    • 2018-01-14
    • 1970-01-01
    相关资源
    最近更新 更多