Excel中的VBA - 在选择
问题描述:
每个单元这只是我的代码部分:Excel中的VBA - 在选择
Set ws1 = Sheets("Source")
Set ws2 = Sheets("Destination")
finalrow = ws1.Cells(Rows.Count, "A").End(xlUp).Row
ws1.Range(Cells(2, "B"), Cells(finalrow, "C")).Select
For Each c In Selection
If IsNumeric(c) Then
c.Value = 1 * c.Value
End If
Next c
即使这样,我指定表“源”和“目的地”,如果我不 运行该宏从表格“源”中,它返回一个错误。我认为问题出现在“For Each c In Selection”一行中,但它指向上面的行作为有问题的行。我不知道那有什么问题。
答
尝试
Set ws1 = ThisWorkbook.Sheets("Source")
Set ws2 = ThisWorkbook.Sheets("Destination")
With ws1
finalrow = .Cells(.Rows.Count, "A").End(xlUp).Row
For Each c In Range(.Cells(2, 2), .Cells(finalrow, 3))
If IsNumeric(c) Then
c.Value = 1 * c.Value
End If
Next c
End With
如果需要指定一个工作表对象(这是很好的做法),你需要指定它为所有使用范围/细胞的特性。
因此,这是不正确的:
ws1.Range(Cells(2, "B"), Cells(finalrow, "C")).Select
,因为两个单元属性没有指定的工作表。
尽管这可能在某些时候有效,但它将取决于代码的位置(在工作表代码模块中,与其他模块不同,任何使用Range或单元格而没有工作表对象引用是指包含代码而不是活动工作表)以及哪个工作表在当时处于活动状态,因此有时会失败 - 这种错误可能很难追查到。
对于上述正确的语法是:
ws1.Range(ws1.Cells(2, "B"), ws1.Cells(finalrow, "C")).Select
,或者你可以使用一个带......最终随着块节省一点打字:
With ws1
.Range(.Cells(2, 2), .Cells(finalrow, 3))
End With
请注意范围和单元格呼叫之前的完整停靠点(周期)。
从here得到这个。
它返回相同的错误1004“应用程序定义或对象定义的错误” – crni
@crni - 现在查看更新的代码。 – Mrig
是的,这工作。谢谢。我花了一段时间才正确输入。但是我没有工作的原因是什么? – crni