【问题标题】:Excel run-time error when copying all worksheets into a new workbook将所有工作表复制到新工作簿时出现 Excel 运行时错误
【发布时间】:2020-07-22 14:38:52
【问题描述】:

非常新的 excel vba,只是想问一下为什么我在 With wb.Sheets("i") 行上遇到运行时错误。它应该如何工作是它应该打开文件并将所有 6 个工作表复制到指定的工作簿中。 with 函数试图获取和复制第一个工作表的标题,而不是复制下一个工作表的标题。

    Sub Button1_Click()

Dim i As Long
Dim lcurrow As Long
Dim lrow As Long
Dim wb As Workbook
Dim ws As Worksheet

Set wb = Workbooks.Open("/Users/Documents/2020-06-22.xlsx")

For i = 1 To 6 Step 1

With wb.Sheets(i)
            If i = 1 Then
            lrow = 1
            Else
            lrow = 2
            End If
            
Do Until .Range("A" & lrow).Value = vbNullString

lcurrow = lcurrow + 1

For n = 0 To 3 Step 1

wb.Sheets(i).Range("A" & lcurrow).Offset(columnoffset:=n).Value = .Range("A" & lrow).Offset(columnoffset:=n).Value

Next n

lrow = lrow + 1

Loop
            
End With


Next i

Set wb = Nothing

End Sub

【问题讨论】:

  • 你应该写With wb.Sheets(i)(不带双引号)来进行索引访问。请查看变量的基本语法。
  • 您使用双引号将 i 作为字符串文字......也就是说......它试图引用名为“i”的工作表:。试试 Sheets(i) ... 没有双引号。
  • 使用 wb.Sheets(i) 仍然给出相同的错误
  • 那么你得到的运行时错误到底是什么?您能否确认正在打开的工作簿中有(至少)6 个工作表?
  • 抱歉,我的错误是对象变量或未设置块变量 - 错误 91。为了确认,我试图让宏抓取前 6 个工作表(8 个中的)并提取它到一个新的工作簿。

标签: excel vba runtime-error


【解决方案1】:

如果您想遍历工作簿中的所有工作表,您可以这样做

  For each ws in wb.sheets
        'your code you want to do on each worksheet here

  Next ws 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    • 2016-10-06
    • 1970-01-01
    相关资源
    最近更新 更多