提问人:Sidvi 提问时间:11/28/2017 最后编辑:Shai RadoSidvi 更新时间:11/28/2017 访问量:623
复制多个范围,但出现运行时错误 1004
Copying multiple ranges but get runtime error 1004
问:
我试图复制多个范围,然后将其粘贴到 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
答:
0赞
Vityata
11/28/2017
#1
1004
当您没有定义范围/单元格的工作表时,经常发生。如果未定义,Excel 将 称为父级,这并不总是预期的。ActiveSheet
确保定义每个 、 或 及其父级。喜欢这个:Row
Column
Cell
Range
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
你依赖的很多,也是你里面的,你需要在第一次之前把它拿出来,见下面的代码:ActiveSheet
Set
Set sht = Worksheets("Calculations")
If
If
' ===== 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
为了复制多个(不同的范围区域),您必须遍历并复制其中的每一个:Selections
Areas
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
评论
debug.print rangename.address
rangename
range1
control+g
immediate window