复制多个范围,但出现运行时错误 1004

Copying multiple ranges but get runtime error 1004

提问人:Sidvi 提问时间:11/28/2017 最后编辑:Shai RadoSidvi 更新时间:11/28/2017 访问量:623

问:

我试图复制多个范围,然后将其粘贴到 word。我设置了多个范围,然后用 Union 前缀连接。但是每次运行代码时,我都会收到错误代码 1004。范围已变暗并设置,我已尝试更改名称、指定工作表等。但它仍然不起作用。mRange

任何帮助将不胜感激!

Sub ExportToWord()
'Option Explicit

Dim WordApp As Word.Application
Dim myDoc As Word.Document
Dim WordTable As Word.Table
Dim SrcePath As String
Dim sht As Worksheet
Dim LastRow As Long
Dim LastColumn As Long
Dim StartCell As Range
Dim range1 As Range, range2 As Range, range3 As Range, mRange As Range

If Cells(4, 17) = True Then
    'Copies the specified range in excel
    Set sht = Worksheets("Calculations")
    Set StartCell = Range("M3")

    'Refresh UsedRange
    Worksheets("Calculations").UsedRange

    'Find Last Row
    LastRow = Range("M" & Rows.Count).End(xlUp).Row

    'Select Range
    sht.Range("M3:R" & LastRow).Copy

Else
    'copies the specified range
    Set range1 = Range("M3:R5")
    Set range2 = Range("M6:O" & Range("O" & Rows.Count).End(xlUp).Row)
    Set range3 = Range("Q6:R" & Range("R" & Rows.Count).End(xlUp).Row)
    Set mRange = Union(range1, range2, range3)

    mRange.Copy
End If      
VBA Excel

评论

1赞 Zerk 11/28/2017
在设置 mRange 线之前,对 range1/2/3 执行操作,并告诉我们它们的结果。debug.print rangename.address
0赞 Sidvi 11/28/2017
运行时错误 424 需要对象。
0赞 Zerk 11/28/2017
我假设你没有改成/etc?rangenamerange1
0赞 Sidvi 11/28/2017
更改后,除了到达 mRange.copy 时出现错误 1004 外,我什么也没说。
0赞 Zerk 11/28/2017
按 ,文本应该出现在control+gimmediate window

答:

0赞 Vityata 11/28/2017 #1

1004当您没有定义范围/单元格的工作表时,经常发生。如果未定义,Excel 将 称为父级,这并不总是预期的。ActiveSheet

确保定义每个 、 或 及其父级。喜欢这个:RowColumnCellRange

Set sht = Worksheets("Calculations")
Set StartCell = sht.Range("M3")

'Find Last Row
LastRow = sht.Range("M" & sht.Rows.Count).End(xlUp).Row
Set range2 = sht.Range("M6:O" & sht.Range("O" & sht.Rows.Count).End(xlUp).Row)

或者你可以使用 ,它看起来会更好:With Worksheets("Calculations")

With Worksheets("Calculations")
    LastRow = .Range("M" & .Rows.Count).End(xlUp).Row
    Set range2 = .Range("M6:O" & .Range("O" & .Rows.Count).End(xlUp).Row)

在你的例子中,你可能正在尝试制作一个不同的范围。因此,它给出了错误:Union()Worksheets()1004

例如,这给出了错误:

set k = Union(Worksheets(1).Range("A1"),Worksheets(2).Range("A2"))

这没关系,因为工作表是一样的:

set k = Union(Worksheets(1).Range("A1"),Worksheets(1).Range("A2"))

评论

0赞 Sidvi 11/28/2017
谢谢你的回答,但这很好用,问题出在 Else 语句之后的 mRange 属性。
0赞 Vityata 11/28/2017
@Sidvi - 尝试重写你的代码,这样就好了。或者在错误之前写,看看会发生什么。MsgBox (range1.Parent.Name & range2.Parent.Name , range3.Parent.Name)
0赞 Zerk 11/28/2017
鉴于在不合格的引用中间没有工作表更改,因此您对联合问题提出的建议不太可能是正确的。
0赞 Sidvi 11/28/2017
使用 msgbox 我得到“CalculationsCalculationsCalculations”,所以 parant 应该没问题。现在它说找不到方法或数据成员,并标记 mRange。
2赞 Shai Rado 11/28/2017 #2

你依赖的很多,也是你里面的,你需要在第一次之前把它拿出来,见下面的代码:ActiveSheetSetSet sht = Worksheets("Calculations")IfIf

' ===== First: set the worksheet object =====
Set sht = Worksheets("Calculations")

With sht
    If .Cells(4, 17) = True Then
        'Copies the specified range in excel
        Set StartCell = .Range("M3")

        'Find Last Row
        LastRow = .Range("M" & .Rows.Count).End(xlUp).Row

        'Select Range
        .Range("M3:R" & LastRow).Copy                    
    Else
        'copies the specified range
        Set range1 = .Range("M3:R5")
        Set range2 = .Range("M6:O" & .Range("O" & .Rows.Count).End(xlUp).Row)
        Set range3 = .Range("Q6:R" & .Range("R" & .Rows.Count).End(xlUp).Row)
        Set mRange = Union(range1, range2, range3)

        mRange.Copy
    End If
End With

为了复制多个(不同的范围区域),您必须遍历并复制其中的每一个:SelectionsAreas

 Dim C As Range

 For Each C In mRange.Areas
     C.Copy
     ' do here your Paste section

 Next C

评论

0赞 Sidvi 11/28/2017
谢谢你的回答,但我仍然收到错误 1004。
0赞 Shai Rado 11/28/2017
@Sidvi,如果你添加,你会得到什么价值?Debug.Print mRange.Address
0赞 Sidvi 11/28/2017
我明白了: $M$3:$R$5 $M$5:$O$6 $Q$5:$R$6 $M$3:$R$5 $M$3:$R$5 $M$3:$R$5 $M$3:$R$5 $M$3:$R$5 $M$3:$R$5 $M$3:$R$5 $M$3:$R$5 $M$3:$R$5 $M$3:$R$5 $M$3:$5 雷亚尔 $M 3:$R 5 美元 $M 3:$R 5,$M 5:$O 6,$Q 5:$R 6 美元 $M 3:$R 5 美元 $M 3:$R 5 美元 $M 3:$R 5 美元 $M 3 美元:$R 5,$M 美元 5:$O 美元 6,$Q 5 美元:$R 美元 6
0赞 Shai Rado 11/28/2017
@Sidvi你的结果没有任何意义,你在某处有一个循环吗?
1赞 Shai Rado 11/28/2017
@Sidvi在您的情况下它不起作用,请阅读此处的原因:support.microsoft.com/en-us/help/214080/......Range