vba Excel粘贴值:自动:错误1004手动:确定
奇怪的问题: 我从带有循环的工作表中读取一些值,然后将它们粘贴到另一个工作表中 我有一个控制模块,它一个接一个地调用一个模块 我的问题:如果我通过控制模块进行呼叫,我会遇到运行时错误1004 当我手动启动宏时,一切正常 这是我的代码:vba Excel粘贴值:自动:错误1004手动:确定,vba,excel,loops,copy-paste,Vba,Excel,Loops,Copy Paste,奇怪的问题: 我从带有循环的工作表中读取一些值,然后将它们粘贴到另一个工作表中 我有一个控制模块,它一个接一个地调用一个模块 我的问题:如果我通过控制模块进行呼叫,我会遇到运行时错误1004 当我手动启动宏时,一切正常 这是我的代码: [...] rngname = 3 temp = 1 Do Until Cells(lngRow, 1).Value = "test" lngLastRowOfSection = Cells(lngRow, 1).End(
[...]
rngname = 3
temp = 1
Do Until Cells(lngRow, 1).Value = "test"
lngLastRowOfSection = Cells(lngRow, 1).End(xlDown).Row
Set slcFind = Range(Cells(lngRow, 1), Cells(lngLastRowOfSection, 1))
slcFind.Copy
Set targetRange = Worksheets("Node Canister VPD").Cells(1, 1)
targetRange.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
lngRow = Cells(lngLastRowOfSection, 1).End(xlDown).Row
If lngRow >= Rows.Count Then Exit Do
Loop
lngRow = 1
rngname = 3
i = 2
Do Until Cells(lngRow, 1).Value = "test"
lngLastRowOfSection = Cells(lngRow, 1).End(xlDown).Row
Set slcFind = Range(Cells(lngRow, 2), Cells(lngLastRowOfSection, 2))
slcFind.Copy
Set targetRange = Worksheets("Node Canister VPD").Cells(i, 1)
targetRange.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
lngRow = Cells(lngLastRowOfSection, 1).End(xlDown).Row
If lngRow >= Rows.Count Then Exit Do
i = i + 1
Loop
[...]
有人有主意吗?
代码的这一部分标记为:
targetRange.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
致以最良好的祝愿,
KalainScott Holtzman是正确的,请在设置范围时定义工作表。我可以用一张带有有效数据的表、一张要粘贴的表和另一张完全空白的表来重新创建这个bug。当我从有效的表中运行宏时,它是很好的,当我运行它时,空白页被激活,它试图将空白列转置为行。Excel工作表的列数多于行数,因此它会崩溃,因为它无法适应 尝试使用这个方法,将“First”更改为源代码表的任何名称
Sub test()
Dim Other As New Worksheet
Set Other = Worksheets("First")
lngrow = 1
rngname = 3
temp = 1
Do Until other.Cells(lngrow, 1).Value = "test"
lngLastRowOfSection = Other.Cells(lngrow, 1).End(xlDown).Row
Set slcFind = Range(Other.Cells(lngrow, 1), Other.Cells(lngLastRowOfSection, 1))
slcFind.Copy
Set targetRange = Worksheets("Node Canister VPD").Cells(1, 1)
targetRange.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
lngrow = Other.Cells(lngLastRowOfSection, 1).End(xlDown).Row
If lngrow >= Rows.Count Then Exit Do
Loop
lngrow = 1
rngname = 3
i = 2
Do Until Other.Cells(lngrow, 1).Value = "test"
lngLastRowOfSection = Other.Cells(lngrow, 1).End(xlDown).Row
Set slcFind = Range(Other.Cells(lngrow, 2), Other.Cells(lngLastRowOfSection, 2))
slcFind.Copy
Set targetRange = Worksheets("Node Canister VPD").Cells(i, 1)
targetRange.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
lngrow = Other.Cells(lngLastRowOfSection, 1).End(xlDown).Row
If lngrow >= Rows.Count Then Exit Do
i = i + 1
Loop
End Sub
将对象显式定义到其父对象。例如,
单元格(lngRow,1)
未绑定到任何特定的表。因此,请定义特定的工作表<代码>工作表(1)。单元格(lngRow,1)。。。例如,谢谢你的提示。但这并不能解决我的问题。我不明白…手动启动:没问题。自动启动:运行时错误1004…在将其作为解决方案快速排除之前,请完全实现它并查看它是否有效。当您没有显式地向父对象声明对象时,代码的行为可能看起来非常有趣。具体地说,它将作用于在代码行运行时恰好处于活动状态的任何工作表,这可能不是您所怀疑的工作表。有时候问题不在于你认为它在哪里。我在这一点上和斯科特是一致的。剔除乍一看似乎显而易见的问题。相当肯定的是,他或我会在运行代码之前,首先将你的VBA重构为尽可能明确的,关于哪个对象接触哪个表/单元格。我实现了它……但错了……我是VBA脚本的新手。但我能学会:)像个魔术师一样工作!我在错误的地方使用了工作表的定义真可耻。。