我有以下简单的宏来从已关闭的工作表中复制数据。代码在VBA编辑器中运行良好,但在通过宏从Excel运行时失败并出现下标错误。粘贴特殊声明似乎是问题。
我无法看到问题出在哪里,有人可以帮忙吗?
Dim wsMaster As Worksheet
Set wsMaster = Worksheets("Master Data")
Dim lastrow As Long
Dim Files As String
Files = "Download.xlsx"
Dim filepath As String
filepath = "C:\users\ms612533\desktop\"
Application.ScreenUpdating = False
wsMaster.Activate
Cells.Select
Selection.Clear
Workbooks.Open (filepath & Files)
lastrow = Worksheets("Global").UsedRange.Rows.Count
Worksheets("Global").Range("A1:V" & lastrow).Copy _
wsMaster.Range("B1")
Worksheets("Global").Range("CV1:cv" & lastrow).Copy
wsMaster.Range("a1").PasteSpecial (xlValues)**
Application.CutCopyMode = False
ThisWorkbook.Activate
Call CloseAll
Application.ScreenUpdating = True
End Sub
Sub CloseAll()
' Close all but the active workbook
Dim wkbk As Workbook
Application.ScreenUpdating = False
For Each wkbk In Application.Workbooks
If wkbk.Name <> ActiveWorkbook.Name Then
wkbk.Close SaveChanges:=False
End If
Next
Application.ScreenUpdating = True
End Sub
答案 0 :(得分:0)
我认为PasteSpecial
行有问题:当我使用宏录制器时,我会得到这样的结果:
wsMaster.Range("a1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
我认为我们可以在第一个之后忽略参数。然后我们有这个:
wsMaster.Range("a1").PasteSpecial Paste:=xlPasteValues
请注意,参数周围没有parens(()
):PasteSpecial
不会返回任何内容,因此应将其视为函数。这可能是下标问题的来源。
另请注意,来自xlPasteType
枚举的参数与您的值略有不同。
答案 1 :(得分:0)
从按钮调用宏时,代码似乎工作正常,但它不能从快捷方式工作。我会把它归结为Excel的“功能”并继续前进。