使用 Range 类在 VBA 中创建宏时出现运行时错误 1004
Posted
技术标签:
【中文标题】使用 Range 类在 VBA 中创建宏时出现运行时错误 1004【英文标题】:I am getting Runtime error 1004 when using Range class for creating a macro in VBA 【发布时间】:2019-07-10 00:09:43 【问题描述】:我正在尝试在 Excel 中自动生成一份报告。我从创建宏开始。在宏中的某一时刻,我使用变量将一行从 AZ2 复制到 CJ2,每个单元格都有公式,我想将相同的公式从 AZ3 粘贴到 AZ248000。我收到此代码错误 Wb1.Sheets("Gains Data").Range(Cells(row3, Col1), Cells(Row2, Col1)).Select
我已经尝试了网上提供的大量示例和解决方案,我从自动填充开始,也尝试仅粘贴公式。我尝试按照在线类似问题的建议激活文件、工作表、工作表。没有任何效果。请检查我的代码并提供解决方案。 PS - 在这段代码之前有一堆代码,我将数据从不同的工作簿 Wb2 复制到主要的 Wb1 上。
Dim Row1 As Long
Dim Row2 As Long
Dim row3 As Long
Dim Col1 As String
Dim Col2 As String
Wb1.Worksheets("Gains Data").Range("AY2").Select
Selection.End(xlDown).Select
Row2 = ActiveCell.Row
' Wb1.Worksheets("Gains Data").Range("AZ2").Select
' Selection.End(xlToRight).Select
' Col2 = ActiveCell.Column
Wb1.Worksheets("Gains Data").Range("AZ2").Select
Row1 = ActiveCell.Row
row3 = Row1 + 1
Col1 = ActiveCell.Column
Wb1.Worksheets("Gains Data").Range(Selection,
Selection.End(xlToRight)).Select
'Col2 = ActiveCell.Column
Selection.Copy
'Windows("Gains SOP Forecast Comparison 2019 07.xlsb").Activate
Wb1.Sheets("Gains Data").Activate
'Range("O1:X1").Select
'Selection.AutoFill Destination:=Range(Col1 & Row1 & ":" & Col2 & Row2),
Type:=xlFillDefault
'Range("BA3:B" & LastRow1 & ":" & "CJ3:CJ" & LastRow1).Formula=
'Cells(Col1 & Row1 & ":" & Col2 & Row2).Paste
'Sheets("Gains Data").Range(Col1 & row3 & ":" & Col1 & Row2).Select
Wb1.Sheets("Gains Data").Range(Cells(row3, Col1), Cells(Row2,
Col1)).Select
ActiveSheet.Paste ' Copies the formulas from BA to CJ for all rows
应将公式复制到所有行,具体取决于我存储在 row2 变量中的 Wb2 的行数。
【问题讨论】:
How to avoid using Select in VBA 会帮你解决这个问题。 Why does Range work, but not Cells?的可能重复 您需要限定Worksheet
和Cells
处于打开状态。否则ActiveSheet
是隐含的,它可能不是Wb1.Sheets("Gains Data")
。使用With...End With
块会使这更容易。
谢谢我正在尝试这个 Wb1.Sheets("Gains Data").Activate With Ws1 Dim rng1 As Range Dim rng2 As Range Set rng1 = Wb1.Worksheets("Gains Data").Range(Col1 & Row1 & ":" & Col2 & Row1) Set rng2 = Wb1.Worksheets("Gains Data").Range(Col1 & Row3 & ":" & Col1 & Row2) rng1.Copy rng2 End With ------ ------------现在 Row2 的值是 248500 我仍然收到 rng2 的错误 1004 是因为 Row2 编号太高了吗?
Dim Col1 as Long
,而不是As String
。 Col2
也一样。然后使用Cells
而不是Range
。
【参考方案1】:
如果您需要将数据从一个工作簿复制到另一个工作簿,请尝试以下代码:
Sub Copy_Between_Workbook()
Dim wb_path$
Dim wb1, wb2
Dim i, j
wb_path = ThisWorkbook.Path 'Path of workbook
myfile1 = "workbook1.xlsx"
myfile2 = "workbook2.xlsx"
mysheet = "Sheet1"
'Original workbook
Set wb1 = CreateObject(wb_path & "\" & myfile1)
'Target workbook
Set wb2 = CreateObject(wb_path & "\" & myfile2)
'attend: wb1.sheet1 is not work, must be wb1.sheets("xxx")
wb1.Sheets(mysheet).UsedRange.Copy wb2.Sheets(mysheet).Range("A1")
wb1.Close False
wb2.Close True
'Out cut mode
Application.CutCopyMode = False
Debug.Print Timer
End Sub
【讨论】:
谢谢,但是当我从范围(AZ2,CJ2)复制公式并从(AZ3,AZ248000)粘贴时出现错误以上是关于使用 Range 类在 VBA 中创建宏时出现运行时错误 1004的主要内容,如果未能解决你的问题,请参考以下文章
使用 WshShell 从 VBA 运行 .NET 应用程序时出现溢出错误
访问 VBA - 导入 *.CSV 时出现运行时错误 31519。您无法导入此文件