VBScript - 获取所需对象或键入不匹配错误

时间:2014-12-09 22:37:48

标签: excel-vba vbscript vba excel

我已经在网上搜索过这个网站寻找答案,所以我非常感谢你的帮助。

我正在创建一个VBScript来对用户指定的Excel电子表格进行一些修改。我的脚本的第一部分工作正常,但第二部分让我疯了。我需要它在第一列中搜索一个值,如果找到,则删除该行。现在我不担心删除声明 - 我通过查看是否可以使For Each语句正确运行以及If Then语句来进行测试。这是特定的代码块:

For Each cell in objSheet.Columns("A:A").Cells

        Set cell = objSheet.Columns("A:A").Cells

        If cell.Value = "60802400040000" then
            cell.font.bold = True

        End If

Next

我尝试了很多这方面的变化,找不到合适的组合。最初我得到了一个" Object Required"消息,并在阅读了一些帖子后,发现我需要为单元格输入Set语句,我做了。现在我收到了Mismatch Type错误消息。

有趣的是,在我输入Set语句之前,代码会执行,但是当我关闭电子表格时会抛出Object Required错误。添加后,会立即弹出类型不匹配的错误。

我在网上发现的大多数例子都是针对VBA的,我尝试为VBS修改它们,我不太清楚。任何人都可以给予我的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您正在重新定义cellcell语句会自动定义For Each

删除此行

Set cell = objSheet.Columns("A:A").Cells

这是帮助中的一个示例,但遗憾的是,帮助中没有任何使用For Each的示例,只有For x = n to n和其他方法。 For Each是正确的做法。

Set r = Range("myRange")
For n = 1 To r.Rows.Count
    If r.Cells(n, 1) = r.Cells(n + 1, 1) Then
        MsgBox "Duplicate data in " & r.Cells(n + 1, 1).Address
    End If
Next n

对于vba到vbs,您必须创建对象并使用,因为某些对象在VBA中自动可用(如app对象) - Set exceldoc = CreateObject("c:\blah\blah.xls)然后使用Set r = exceldoc.worksheets(0).range("MyRange")

此外,您必须使用常量值而不是名称,因为vbscript无法查找它们。