我是 VBA 新手,基本上是在尝试编写我的第一个宏。它旨在将条目从一个工作簿复制到另一个忽略重复值的工作簿。我有以下代码:
Dim s As String
Do While IsEmpty(ActiveCell) = False
If ActiveCell.Value <> s Then
s = ActiveCell.Value
ActiveCell.Offset(1, 0).Select
Windows("Main.xlsm").ActiveCell.Value = s
Windows("Main.xlsm").ActiveCell.Offset(1, 1).Select
Else
ActiveCell.Offset(1, 0).Select
End If
Loop
它给了我这一行的运行时错误 1004:
Windows("Main.xlsm").ActiveCell.Offset(1, 1).Select
这意味着方法 Select 无法正常工作。(我打开了“Main.xlsm”但未激活,并且选择了一个单元格。)我搜索了类似的问题,发现可能是因为我没有选择工作表。但不知何故,这条线有效:
Windows("Main.xlsm").ActiveCell.Value = s
我可以看到工作簿“Main.xlsm”中的单元格发生了变化。所以,我假设Windows("Main.xlsm").ActiveCell
确实创建了一个 Range 对象。
那么为什么会发生错误呢?写这个的正确方法是什么?
我也尝试将我的代码更改为:
Windows("Main.xlsm").ActiveSheet.ActiveCell.Value = s
Windows("Main.xlsm").ActiveSheet.ActiveCell.Offset(1, 1).Select
这给了我:“运行时错误 438 对象不支持此属性或方法”。这是为什么?这里有什么不正确的?
并:
Windows("Main.xlsm").Sheets("Name").ActiveCell.Value = s
Windows("Main.xlsm").Sheets("Name").ActiveCell.Offset(1, 1).Select
结果是一样的。而且我仍然不明白为什么最后两个不起作用。
这是我在这里的第一篇文章,所以如果我的编辑或其他任何错误,请纠正我。谢谢!