Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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运行时错误424:需要对象_Excel_Vba - Fatal编程技术网

Excel VBA运行时错误424:需要对象

Excel VBA运行时错误424:需要对象,excel,vba,Excel,Vba,我对VBA和编码都是全新的,我试图从同一个工作簿的单元格中获取数据,如果条件满足,可以粘贴到另一本书中 我在尝试获取excel单元格中输入的值时遇到此错误: Run Time Error '424' object required 当我按下debug按钮时,它会转到第一行并高亮显示它。我不知道为什么会这样?此外,当在“监视”窗口中显示a=0时 代码是 Sub copycells() a = ThisWorkbook.Worksheets("Sale").Cells(Row.Count,

我对VBA和编码都是全新的,我试图从同一个工作簿的单元格中获取数据,如果条件满足,可以粘贴到另一本书中

我在尝试获取excel单元格中输入的值时遇到此错误:

Run Time Error '424' object required
当我按下debug按钮时,它会转到第一行并高亮显示它。我不知道为什么会这样?此外,当在“监视”窗口中显示a=0时

代码是

Sub copycells()
    a = ThisWorkbook.Worksheets("Sale").Cells(Row.Count, 2).End(xlUp).Row
    For i = 2 To a
    If Worksheets("Sale").Cells(i, 6).Value = "Parmesh" Then
    Worksheets("Sale").Row(i).copy
    Workbooks("Source.xlsx").Worksheets("Billdetails").Activate
    b = Workbooks("Source.xlsx").Worksheets("Billdetails").Cells(Row.Count, 2).End(xlUp).Row
    Workbooks("Source.xlsx").Worksheets("Billdetails").Cells(b + 1, 1).Select
    ActivateSheet.Paste
    Worksheets("Sale").Activate
    End If
    Next
    Application.CutCopyMode = False
    Workbooks("Purchase.xlsx").Worksheets("Sale").Cells(1, 1).Select
    End Sub

首先,您似乎需要声明遗漏的变量:

Sub copycells()
    Dim a as Integer
    Dim b as Integer
    a = ThisWorkbook.Worksheets("Sale").Cells(Row.Count, 2).End(xlUp).Row
    For i = 2 To a
      If Worksheets("Sale").Cells(i, 6).Value = "Parmesh" Then
         Worksheets("Sale").Row(i).copy
         Workbooks("Source.xlsx").Worksheets("Billdetails").Activate
         b = Workbooks("Source.xlsx").Worksheets("Billdetails").Cells(Row.Count, 2).End(xlUp).Row
         Workbooks("Source.xlsx").Worksheets("Billdetails").Cells(b + 1, 1).Select
        ActivateSheet.Paste
        Worksheets("Sale").Activate
     End If
   Next
   Application.CutCopyMode = False
   Workbooks("Purchase.xlsx").Worksheets("Sale").Cells(1, 1).Select
End Sub

此外,您还可以尝试使用
Set
操作符

无论如何,不清楚哪个属性或方法会给出错误。因此,我建议打破属性和方法调用的链条:

a = Workbooks("Purchase.xlsx").Worksheets("Sale").Cells(Rows.Count, 2).End(xlUp).Row
只需声明单独的代码行,其中将替换单个属性或方法。例如:

Dim workbk as Excel.Workbook
Dim worksht as Excel.Worksheet

Set workbk = Workbooks("Purchase.xlsx")
Set worksht = workbk.Worksheets("Sale")
这样,您就可以找到有问题的电话。

选项明确:您的朋友 这应该教会您始终使用
选项Explicit
。如果您一直在使用它,可能会发生以下情况(
编译错误:未定义变量
):

确定后:

您可以看到
有问题

更改为
行后
另一个
编译错误:未定义变量
。确定后:

您可以看到
a=
有问题

添加
Dim a后,只要
另一个
编译错误:未定义变量
。确定后:

您可以看到
i
有问题

添加
Dim i后,只要
另一个
编译错误:未定义变量
。确定后:

您再次看到
行出现问题

更改为
行后
另一个
编译错误:未定义变量
。确定后:

您可以看到
b=
有问题

添加
Dim b后,只要
另一个
编译错误:未定义变量
。确定后:

您可以看到,
ActivateSheet
有问题

更改为
ActiveSheet
后,最后出现
运行时错误

调试之后

看起来又可疑了

更改为
行后
另一个
运行时错误

调试之后

您可以看到,
ActiveSheet.Paste
,尤其是
Paste
,出现了一些问题

更改为
ActiveSheet.PasteSpecial
后出现另一个
运行时错误

调试之后

您看到
工作表(“销售”)有问题。激活

由于Source.xlsx是活动的,您考虑更改为<代码>工作簿(“购买.xLSX”)。工作表(“销售”)。激活< /代码>,一切终于好了。还是这样

代码

Option Explicit

Sub copycells()
    Dim a As Long
    Dim b As Long
    Dim i As Long
    With ThisWorkbook.Worksheets("Sale")
        a = .Cells(.Rows.Count, 2).End(xlUp).Row
        For i = 2 To a
            If .Cells(i, 6).Value = "Parmesh" Then
                .Rows(i).Copy
                With Workbooks("Source.xlsx").Worksheets("Billdetails")
                    b = .Cells(.Rows.Count, 2).End(xlUp).Row
                    .Cells(b + 1, 1).PasteSpecial
                End With
            End If
        Next
        ' If Purchase.xlsx and ThisWorkbook are the same then use the following:
        '.Cells(1).Select
    End With
    Application.CutCopyMode = False
    ' If Purchase.xlsx and ThisWorkbook are not the same then use the following:
    'Workbooks("Purchase.xlsx").Worksheets("Sale").Cells(1, 1).Select
End Sub


' Assuming that you need only values and that "Thisworkbook" is "Purchase.xlsx"
Sub copyCellsValues()

    Const SourceBook As String = "Source.xlsx"
    Const SourceSheet As String = "Billdetails"
    Const MainSheet As String = "Sale"
    Const MainColumn As Long = 6
    Const Criteria As String = "Parmesh"

    Dim Sale As Worksheet
    Dim Bill As Worksheet
    Dim a As Long
    Dim b As Long
    Dim i As Long

    Set Sale = ThisWorkbook.Worksheets(MainSheet)
    Set Bill = Workbooks(SourceBook).Worksheets(SourceSheet)

    a = Sale.Cells(Sale.Rows.Count, 2).End(xlUp).Row
    b = Bill.Cells(Bill.Rows.Count, 2).End(xlUp).Row + 1

    For i = 2 To a
        If Sale.Cells(i, MainColumn).Value = Criteria Then
            Bill.Rows(b).Value = Sale.Rows(i).Value
            b = b + 1
        End If
    Next

End Sub