【发布时间】:2021-10-21 07:43:14
【问题描述】:
我正在尝试编写一个脚本来获取所有行(在标题行之后),并将它们按顺序复制到第一个选项卡中。我也有 10 个标签,我希望它这样做,然后将它们依次粘贴到第一个标签中(基本上从其他工作表中提取所有内容,然后像大主表或报告一样将其放入第一个工作表中)
我试过了,但它不起作用
Sub Report()
page = 2
row = 1
Dim lastRow As Integer
Dim pae As Integer
Dim rw As Integer
Dim WSheet(1 To 12) As Worksheet
lastRow = Worksheets(page).Cells(Rows.Count, "A").End(xlUp).rw
While (pge <= 12)
While (rw <= lastRow)
rw = rw + 1
ws1.Rows(row).EntireRow.Copy WSheet(pge).Range("A" & lastRow)
Wend
pge = pge + 1
Wend
End Sub
我试图让它计算有多少行有数据,然后将所有这些行复制到第一个工作表,然后再转到下一个工作表,
它似乎跳过了我声明变量的位置,然后在 lastrow 分配上出错
任何帮助将不胜感激
【问题讨论】:
-
看起来像是错字?
.End(xlUp).Row(Row,不是rw) - 你需要Row属性,而不是rw变量。 -
您还使用 rw 作为计数器,但使用 row 来选择行。您还需要在每个页面循环中重置 lastrow。你也在使用 page 和 pge。
-
不相关:您应该始终对行使用
Long变量类型,因为Integers只能容纳 32,767 行 - 而且您甚至没有使用pae变量。 (总之,似乎有很多错别字) -
请在模块顶部插入
Option Explicit以强制执行变量声明,这也有助于您在大多数情况下发现拼写错误。 -
ws1未声明,未设置。为什么要一次复制每一行而不是UsedRange(第一行除外)?WSheet已声明但未加载。对于所有声明,关于Long而不是Integer的相同观察。在 VBA 中,将其声明为Integer没有任何好处。只有超出其最大限制的风险...lastRow在循环外计算仅返回第二张表中的情况。所有其他人的行数都相同吗?