Excel vba-用于所选内容中的每个单元格
这只是我代码的一部分:Excel vba-用于所选内容中的每个单元格,vba,excel,Vba,Excel,这只是我代码的一部分: 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.Val
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
如果需要指定工作表对象(这是一种良好的做法),则需要为所使用的所有范围/单元格属性指定它
所以这是不正确的:
因为两个单元格属性没有指定工作表
虽然这在某些时候可能会起作用,但它取决于代码所在的位置(与其他模块不同,在工作表代码模块中,任何不带工作表对象引用的范围或单元格的使用都是指包含代码的工作表,而不是活动工作表)哪一个工作表当时处于活动状态,所以有时会失败——这种错误很难追踪
上述内容的正确语法为:
或者,您可以使用With…End With块来节省一些输入:
注意范围和单元格调用前的句点(句点)
从中获取此信息。试试看
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
如果需要指定工作表对象(这是一种良好的做法),则需要为所使用的所有范围/单元格属性指定它
所以这是不正确的:
因为两个单元格属性没有指定工作表
虽然这在某些时候可能会起作用,但它取决于代码所在的位置(与其他模块不同,在工作表代码模块中,任何不带工作表对象引用的范围或单元格的使用都是指包含代码的工作表,而不是活动工作表)哪一个工作表当时处于活动状态,所以有时会失败——这种错误很难追踪
上述内容的正确语法为:
或者,您可以使用With…End With块来节省一些输入:
注意范围和单元格调用前的句点(句点)
这是从中获得的。它返回相同的错误1004“应用程序定义或对象定义错误”@crni-请立即查看更新的代码。是的,成功了。谢谢我花了一段时间才正确地进入。但是my不起作用的原因是什么。@crni-如
ws1.Cells(Rows.Count,“A”).End(xlUp)。Row
虽然您使用ws1.Cells
但Rows.Count,“A”
将引用活动工作表,而不是ws1
@crni-我在答案中添加了解释。它返回相同的错误1004“应用程序定义或对象定义错误”@crni-请立即查看更新的代码。是的,这很有效。谢谢。我花了一段时间才正确输入。但我的错误不起作用的原因是什么。@crni-如ws1.Cells(Rows.Count,“A”).End(xlUp)。Row
尽管您使用ws1.Cells
但Rows.Count,“A”“
将引用活动工作表,而不是ws1
@crni-我已在答案中添加了解释。
ws1.Range(ws1.Cells(2, "B"), ws1.Cells(finalrow, "C")).Select
With ws1
.Range(.Cells(2, 2), .Cells(finalrow, 3))
End With