新手在Excel VBA上。我想问一下如何解决我得到的错误?我试图根据条件复制整行,并将其粘贴到另一张表(同一工作簿)上。这是我的代码:
Dim ws As Worksheet
Dim ws1 As Worksheet
Dim endRow As Range
Set ws = Sheets("FIELD OFFICE DATABASE")
Set ws1 = Sheets("Transferred Items")
set endRow = Range("B" & Rows.Count).End(xlUp).Offset(1, 0)
ws.Activate
ws.Unprotect "321321"
Range("B2").Select
Do Until endRow
If ActiveCell.Value = Me.cmbemn.Text Then
ActiveCell.Rows("B:S").Select
Selection.copy
ws1.Activate
ws1.Unprotect "321321"
endRow.Select
ActiveSheet.Paste
Else
ActiveCell.Offset(1, 0).Select
End If
Loop
发生的事情是我的Excel崩溃,或弹出错误说"对象需要"。但主要是它崩溃了。
请帮忙!谢谢!
答案 0 :(得分:0)
尝试将循环终止条件更改为:
Do Until ActiveCell.Address = endRow.Address
我认为您可以提前终止:
Set endRow = ws.Range("B" & Rows.Count).End(xlUp)
您还应明确使用您正在使用的工作表,否则将使用当前的活动表。我假设您正在使用ws
。
Rows
不应指定其中的列:
ActiveCell.Rows("B:S").Select
它应该有一个Rows规范。你可能会做类似的事情:
ActiveCell.EntireRow.Copy
或者根据以后的评论,
currCell.EntireRow.Copy
副本不需要.Select
,然后是第二行。你可以在一行中做。
另请注意@ Jeeped对Unprotect
的评论。
我的偏好是指定一个loopRange,例如
Set loopRange = ws.Range("B2:B" & ws.Range("B" & Rows.Count).End(xlUp).Row)
然后遍历该范围。
Dim currCell As Range
For Each currCell in loopRange
If currCell.Value .....do stuff
Next currCell
除了使用activecell之外,还有其他好处。
答案 1 :(得分:0)
取消保护工作表会取消复制/粘贴操作。
使用以下参数
保护您的工作表UserInterfaceOnly:=true
'example:
ws1.Protect password:="321321", UserInterfaceOnly:=true
现在,您可以在VBA中对其进行任何操作,而无需取消保护