我已经在网上搜索过这个网站寻找答案,所以我非常感谢你的帮助。
我正在创建一个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修改它们,我不太清楚。任何人都可以给予我的任何帮助将不胜感激。
答案 0 :(得分:1)
您正在重新定义cell
,cell
语句会自动定义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无法查找它们。