Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel vba-用于所选内容中的每个单元格_Vba_Excel - Fatal编程技术网

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