VBA宏循环无法从其他工作表复制数字
我有这个For-loop vba代码,其中有一个汇总表(股票策略表),它汇总了我从不同表中需要的所有数字 我已经将那些假设通过注释复制数字的代码分组,以供大家参考 无论如何,似乎不起作用的是“音量”部分。另外两个(ADX和Close)工作正常,但“音量”不正常。这很奇怪,因为代码执行与其他两个相同VBA宏循环无法从其他工作表复制数字,vba,excel,Vba,Excel,我有这个For-loop vba代码,其中有一个汇总表(股票策略表),它汇总了我从不同表中需要的所有数字 我已经将那些假设通过注释复制数字的代码分组,以供大家参考 无论如何,似乎不起作用的是“音量”部分。另外两个(ADX和Close)工作正常,但“音量”不正常。这很奇怪,因为代码执行与其他两个相同 Private Sub pback() Dim i As Integer Dim wsx As Worksheet lastrow = Sheets("Stocks Strategy").Cells
Private Sub pback()
Dim i As Integer
Dim wsx As Worksheet
lastrow = Sheets("Stocks Strategy").Cells(Rows.Count, 1).End(xlUp).Row
Set wsx = Sheets("Stocks Strategy")
For i = 3 To lastrow
'Close
wsx.Cells(i, 4).Value = Sheets(wsx.Cells(i, 1).Value).Range("E1048576").End(xlUp).Value
wsx.Cells(i, 5).Value = Sheets(wsx.Cells(i, 1).Value).Range("E1048576").End(xlUp).Offset(-1, 0).Value
wsx.Cells(i, 6).Value = Sheets(wsx.Cells(i, 1).Value).Range("E1048576").End(xlUp).Offset(-2, 0).Value
'Volume - not sure why its not working
wsx.Cells(i, 13).Value = Sheets(wsx.Cells(i, 1).Value).Range("S1048576").End(xlUp).Value
wsx.Cells(i, 14).Value = Sheets(wsx.Cells(i, 1).Value).Range("S1048576").End(xlUp).Offset(-1, 0).Value
wsx.Cells(i, 15).Value = Sheets(wsx.Cells(i, 1).Value).Range("S1048576").End(xlUp).Offset(-2, 0).Value
'ADX
wsx.Cells(i, 8).Value = Sheets(wsx.Cells(i, 1).Value).Range("Q1048576").End(xlUp).Value
wsx.Cells(i, 9).Value = Sheets(wsx.Cells(i, 1).Value).Range("Q1048576").End(xlUp).Offset(-1, 0).Value
wsx.Cells(i, 10).Value = Sheets(wsx.Cells(i, 1).Value).Range("Q1048576").End(xlUp).Offset(-2, 0).Value
Next i
End Sub
我的工作表截图:
股票策略
(A列表示图纸名称,其中将显示数字“Close”、“ADX”和“Volume”))
样本来源表(股票策略将获得数字的表)
请注意:所有工作表都在同一工作簿中
有人能指出哪里不对吗?如果有人能建议一种更好的编码方法,我将不胜感激。您的代码中没有任何错误。在任何情况下,以下内容是否也不适用于您
Option Explicit
Sub pback()
Dim i As long
Dim LastRow as long
Dim DestinationSheet As Worksheet
Set DestinationSheet = workSheets("Stocks Strategy")
lastrow = DestinationSheet.Cells(Rows.Count, 1).End(xlUp).Row
Dim SourceSheet as Worksheet
Dim LastCellInColumn as range
For i = 3 To lastrow
Set SourceSheet = worksheets(wsx.Cells(i, 1).Value)
With sourcesheet
'Close '
Set LastCellInColumn = .cells(.rows.count,"E").end(xlup)
If LastCellInColumn.row > 2 then
DestinationSheet.Cells(i, 4).Value = LastCellInColumn.Value
DestinationSheet.Cells(i, 5).Value = lastcellincolumn.offset(-1,0).Value
DestinationSheet.Cells(i, 6).Value = lastcellincolumn.Offset(-2, 0).Value
Else
Msgbox("Last cell on worksheet " & .name & " detected as being on row " & LastCellInColumn.row)
End if
'Volume - not sure why its not working'
Set LastCellInColumn = .cells(.rows.count,"S").end(xlup)
If LastCellInColumn.row > 2 then
DestinationSheet.Cells(i, 13).Value = LastCellInColumn.Value
DestinationSheet.Cells(i, 14).Value = LastCellInColumn.Offset(-1, 0).Value
DestinationSheet.Cells(i, 15).Value = LastCellInColumn.Offset(-2, 0).Value
Else
Msgbox("Last cell on worksheet " & .name & " detected as being on row " & LastCellInColumn.row)
End if
'ADX'
Set LastCellInColumn = .cells(.rows.count,"Q").end(xlup)
If LastCellInColumn.row > 2 then
DestinationSheet.Cells(i, 8).Value = LastCellInColumn.Value
DestinationSheet.Cells(i, 9).Value = LastCellInColumn.Offset(-1, 0).Value
DestinationSheet.Cells(i, 10).Value = LastCellInColumn.Offset(-2, 0).Value
Else
Msgbox("Last cell on worksheet " & .name & " detected as being on row " & LastCellInColumn.row)
End if
End with
Set Lastcellincolumn = nothing
Set Sourcesheet = nothing
Next i
End Sub
您确定没有其他代码在发布的代码之后运行,该代码正在再次清除M列和N列中的值吗?尝试在
单元格(i,8)上放置一个断点。Value=…
行,然后查看到达该行后工作表的外观。但是要小心,您的代码正在写入活动工作表中的任何内容,因此请确保在继续执行之前始终切换回该工作表(我假定它是活动的“股票策略”工作表)。我确信没有其他代码正在运行。没有其他代码清除M和N列。我添加了一个断点,它实际上没有写入它应该输入的内容。我还将其修改为wsx.Cells(I,13).Value=Sheets(wsx.Cells(I,1).Value).Range(“S1048576”).End(xlUp).Value以使其具体化。但我还是得到了同样的结果。没有写入任何内容。根据屏幕截图,它正确地执行了wsx.Cells(i,15).Value=…
语句,因此引起问题的只是最后和倒数第二个值,即。。。。奇怪的FWIW,我刚刚创建了一些虚拟数据,它对我来说工作正常。这不只是因为隐藏列吗?该卷位于第(i,19)列,而不是第(i,8)列?///我的错。。。。看起来太快了你没有任何活动,是吗?例如工作表\u Change
或类似的内容?无论如何,禁用过程顶部的事件并查看发生了什么不会有什么坏处。在实际执行Dim
it和Set
it之前,使用SourceSheet
获取lastrow
2-4行,这将导致运行时错误true,SourceSheet
应该是DestinationSheet
。无法在手机上测试为am。所以下次,至少在回答中提到它(未测试)