vba - VBA 中的 Worksheets.Count 返回错误的页数

标签 vba excel

我有一个带有许多工作表的数据工作簿(准确地说是 3 个)。我想从每个工作表中复制数据并将它们全部添加到第二个工作簿中的一个工作表中(一个在另一个之前附加)。所有的工作表都有相同的格式和相同的列,所以我可以放心地做到这一点,而不必担心数据的一致性。问题是我使用的 for 循环运行代码 21 次,即使我只有 3 个工作表,也没有进行复制和粘贴。我使用 MsgBox 进行调试。以下是在 Windows 操作系统上用 Excel 2013 的 VBA 编辑器编写的代码:

Sub compileData()
    ' compile all the data in one worksheet

    ' defining variables
    Dim i As Integer

    ' copy the headers
    Windows("source_file.xlsx").Activate
    Sheets(1).Activate
    Range("A3:K3").Select
    Selection.Copy
    Windows("target_file.xlsx").Activate
    Sheets(1).Activate
    Range("A1").Select
    ActiveSheet.Paste
    ' So far, so good! The header was copied & pasted with no problem.

    For i = 1 To Workbooks("source_file.xlsx").Worksheets.Count

        ' copy data from source worksheet
        Windows("source_file.xlsx").Activate
        Sheets(i).Activate
        Range("A4:K4").End(xlDown).Select
        Selection.Copy

        ' paste data
        Windows("target_file.xlsx").Activate
        Sheets(1).Activate
        Range("A2").End(xlDown).Offset(RowOffset:=1).Select
        ActiveSheet.Paste

    Next i

    MsgBox i      ' this returns 21 while source_file.xlsx has only 3 worksheets

End Sub

最佳答案

我不知道这个问题是否已经解决了......
我不知道原因,但对我来说,如果您在调用 sheet.count 之前激活您正在计算工作表的工作簿,它会起作用。
我知道,您明确告诉它在哪个工作簿中计算工作表,但由于某种原因,这在我之前也发生过,并且通过在计算工作表之前明确激活工作簿来解决。

关于vba - VBA 中的 Worksheets.Count 返回错误的页数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31138305/

相关文章:

excel - 如何在 VBA 中创建正确的集合?

Excel VBA 调用带有变量名的函数

vba - 按默认属性对一组类进行排序

excel - 有没有办法让这段代码更短/excel工作表更改

vba - 对 2 个以上条件使用自动筛选

vba - Excel VBA : Loop through cells and copy values to another workbook

excel - 求和索引匹配

excel - 尽管链接值未更改,MS Excel 2013 链接数据公式仍恢复为值 #REF

java - 在java中检查文件类型(csv或excel文件(xlsx))

excel - 如何在for语句中为行选择列值?