Arrays VBA工作表循环

Arrays VBA工作表循环,arrays,excel,vba,Arrays,Excel,Vba,我目前正在使用包含34个不同选项卡的工作簿。 我试图从每个标签中提取每月数据,并将其转换为每个特定城市的每日数据。 我已将2019年内的所有日期列为列,以便将其表示为每日数字。(参见下面img中的示例) 每个选项卡包含每个特定城市的数据。 我总是想从每个特定城市的每个选项卡的第4列到第15列中提取第20行中的数据。(请参见下面以黄色突出显示的第二幅图像) 公共子CreateArray() 将myArrayOfMonths(11)暗显为双倍 将当前工作簿设置为工作簿 将当前工作表设置为工作表

我目前正在使用包含34个不同选项卡的工作簿。 我试图从每个标签中提取每月数据,并将其转换为每个特定城市的每日数据。 我已将2019年内的所有日期列为列,以便将其表示为每日数字。(参见下面img中的示例)

每个选项卡包含每个特定城市的数据。 我总是想从每个特定城市的每个选项卡的第4列到第15列中提取第20行中的数据。(请参见下面以黄色突出显示的第二幅图像)

公共子CreateArray()
将myArrayOfMonths(11)暗显为双倍
将当前工作簿设置为工作簿
将当前工作表设置为工作表
将其他工作表设置为工作表
作为整数的Dim i
作为整数的Dim r
作为整数的Dim c
作为整数的Dim j
设置currentWorkbook=ActiveWorkbook
设置otherSheet=currentWorkbook.Worksheets(“输出”)
i=1
对于currentWorkbook.工作表中的每个currentSheet
r=20
j=0
对于c=4到15
myArrayOfMonths(j)=活动表单元格(r,c)
j=j+1
下一个c
调试。打印myArrayOfMonths(0)
i=i+1
下一页
Set currentSheet=无
Set current工作簿=无

End Sub
使用
currentSheet.Cells(r,c)
代替
ActiveSheet


或者使用
currentSheet.Activate
,然后使用
myArrayOfMonths(j)=ActiveSheet.Cells(r,c)
,但尽量避免使用ActiveSheet。

您能这样做吗

Option Explicit

Public Sub PopulateOutput()

    Dim outputSheet As Worksheet
    Dim i As Integer

    Set outputSheet = ActiveWorkbook.Worksheets("Output")

    ' starting at index 2 since output sheet looks like index 1
    For i = 2 To ActiveWorkbook.Worksheets.Count
        With ActiveWorkbook.Worksheets(i)
            outputSheet.Range("B" & i & ":M" & i).Value = .Range("D20:O20").Value
        End With
    Next

End Sub

这适合你的需要吗

Public Sub CreateArray()

    Dim myArrayOfMonths(11) As Double

    Dim currentWorkbook As Workbook
    Dim currentSheet As Worksheet
    Dim otherSheet As Worksheet

    Dim r As Integer
    Dim c As Integer

    Set currentWorkbook = ActiveWorkbook
    Set otherSheet = currentWorkbook.Worksheets("Output")

    For Each currentSheet In currentWorkbook.Worksheets

        r = 20

        For c = 4 To 15
            myArrayOfMonths(c - 4) = myArrayOfMonths(c - 4) + currentSheet.Cells(r, c)
        Next c

    Next currentSheet

    otherSheet.Range("B1:M1").Value = myArrayOfMonths

    Set currentSheet = Nothing
    Set currentWorkbook = Nothing

End Sub

您在一些地方设置了
i=1
,但从未在代码中使用
i
。另外,请删除
Activesheet
请参阅:您是否意识到此
Activesheet
从未更改-这是问题的原因?您可能应该参考
currentSheet
@Luuklag我已经尝试增加I,但它仍然输出相同的值thing@DavidGorgan当然,您不会在代码中的任何地方使用
i
来引用工作表。因此,递增只会更改
i
的值。请记住,在浏览所有工作表时,最终您的
currentSheet
将等于
otherSheet
。您可能需要对其进行限定。请避免使用。激活它容易出错且计算量大。请参阅,以了解其他的努力成果,但我需要所有1月份的数据都相同,然后是2月份的数据,以此类推,类似于vlookup。谢谢你的尝试!