Excel VBA运行时错误424:需要对象
我对VBA和编码都是全新的,我试图从同一个工作簿的单元格中获取数据,如果条件满足,可以粘贴到另一本书中 我在尝试获取excel单元格中输入的值时遇到此错误: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,
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