VBA宏循环无法从其他工作表复制数字

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

我有这个For-loop vba代码,其中有一个汇总表(股票策略表),它汇总了我从不同表中需要的所有数字

我已经将那些假设通过注释复制数字的代码分组,以供大家参考

无论如何,似乎不起作用的是“音量”部分。另外两个(ADX和Close)工作正常,但“音量”不正常。这很奇怪,因为代码执行与其他两个相同

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。所以下次,至少在回答中提到它(未测试)