Excel 尝试复制联合时出现运行时错误
我目前正在为excel编写VBA,得到1004条信息:“该命令不能用于多项选择”。我的代码选择excel文件中的多个列(非连续),并将它们作为一个范围合并。然后复制范围并粘贴到另一张图纸上。我有一些潜艇可以为不同的报告这样做。第一个报告运行正常,但是当第二个报告尝试运行时,我得到了运行时错误。当我选择“Debug”时,它会将我带到range.copy行 我该怎么办 代码如下:Excel 尝试复制联合时出现运行时错误,excel,vba,union,Excel,Vba,Union,我目前正在为excel编写VBA,得到1004条信息:“该命令不能用于多项选择”。我的代码选择excel文件中的多个列(非连续),并将它们作为一个范围合并。然后复制范围并粘贴到另一张图纸上。我有一些潜艇可以为不同的报告这样做。第一个报告运行正常,但是当第二个报告尝试运行时,我得到了运行时错误。当我选择“Debug”时,它会将我带到range.copy行 我该怎么办 代码如下: Option Explicit Public wsSheet As Worksheet Public wbMaster
Option Explicit
Public wsSheet As Worksheet
Public wbMaster As Workbook
Public wbReport As Workbook
Public rngPartNumber As Range
Public rngPartName As Range
Public rngSupplier As Range
Public rngTPRStatus As Range
Public rngOffTool As Range
Public rngExceptionNotes As Range
Public rngMRD As Range
Sub RunReports()
Set wbMaster = ActiveWorkbook
Set wsSheet = wbMaster.Sheets("Part x Part Matrix")
With wsSheet
.AutoFilterMode = False
SetRanges
End With
TPRReport
ExceptionsReport1
wsSheet.ShowAllData
End Sub
Sub SetRanges()
wsSheet.Activate
Set rngPartNumber = Range("C:C")
Set rngPartName = Range("H:H")
Set rngSupplier = Range("Q:R")
Set rngTPRStatus = Range("X:Y")
Set rngOffTool = Range("Z1", Range("AC1").End(xlDown))
Set rngExceptionNotes = Range("AH1", Range("AH1").End(xlDown))
Set rngMRD = Range("AI1", Range("AK1").End(xlDown))
End Sub
Sub TPRReport()
Dim rngTPRResults As Range
wsSheet.Range("A1").End(xlToRight).AutoFilter Field:=24, Criteria1:="No"
Set rngTPRResults = Union(rngPartNumber, rngPartName, rngSupplier, rngTPRStatus)
rngTPRResults.Copy
Set wbReport = Workbooks.Add
With wbReport.Worksheets("Sheet1")
.Range("A1").Select
.Paste
.SaveAs Filename:=wbMaster.Path & "\TPR Report" & Format(CStr(Now), "yyyymmdd_hhmm")
.Close
End With
End Sub
Sub ExceptionsReport1()
Dim rngExceptions As Range
wsSheet.Range("A1").End(xlToRight).AutoFilter Field:=38, Criteria1:="X"
Set rngExceptions = Union(rngPartNumber, rngPartName, rngSupplier, rngTPRStatus, rngOffTool, rngExceptionNotes, rngMRD)
rngExceptions.Copy
Set wbReport = Workbooks.Add
With wbReport.Worksheets("Sheet1")
.Range("A1").Select
.Paste
.SaveAs Filename:=wbMaster.Path & "\Exceptions Report CV" & Format(CStr(Now), "yyyymmdd_hhmm")
.Close
End With
End Sub
将工作表传递给子过程,并使用它来限定所有父工作表引用
Sub RunReports()
Set wbMaster = ActiveWorkbook
Set wsSheet = wbMaster.Sheets("Part x Part Matrix")
With wsSheet
if .AutoFilterMode then .AutoFilterMode = False
SetRanges .cells(1).parent
End With
...
End Sub
Sub SetRanges(ws as worksheet)
with ws
Set rngPartNumber = .Range("C:C")
Set rngPartName = .Range("H:H")
Set rngSupplier = .Range("Q:R")
Set rngTPRStatus = .Range("X:Y")
Set rngOffTool = .Range("Z1", .Range("AC1").End(xlDown))
Set rngExceptionNotes = .Range("AH1", .Range("AH1").End(xlDown))
Set rngMRD = .Range("AI1", .Range("AK1").End(xlDown))
end with
End Sub
将工作表传递给子过程,并使用它来限定所有父工作表引用
Sub RunReports()
Set wbMaster = ActiveWorkbook
Set wsSheet = wbMaster.Sheets("Part x Part Matrix")
With wsSheet
if .AutoFilterMode then .AutoFilterMode = False
SetRanges .cells(1).parent
End With
...
End Sub
Sub SetRanges(ws as worksheet)
with ws
Set rngPartNumber = .Range("C:C")
Set rngPartName = .Range("H:H")
Set rngSupplier = .Range("Q:R")
Set rngTPRStatus = .Range("X:Y")
Set rngOffTool = .Range("Z1", .Range("AC1").End(xlDown))
Set rngExceptionNotes = .Range("AH1", .Range("AH1").End(xlDown))
Set rngMRD = .Range("AI1", .Range("AK1").End(xlDown))
end with
End Sub
基于from,以下代码将复制非连续数据,而不复制不属于联合的单元格
Sub CopyAreas(ByVal Source As Range, _
ByVal Target As Range, _
Optional ByVal Inline As Boolean)
Dim area As Range
If Inline Then
For Each area In Source.Areas
area.Copy Destination:=Target
Set Target = Target.Offset(area.Rows.Count)
Next
Else
'Find the top-most and left-most cell in the Source
Dim Topmost As Long, Leftmost As Long
For Each area In Source.Areas
If Topmost = 0 Then
Topmost = area.Row
Leftmost = area.Column
Else
If Topmost > area.Row Then Topmost = area.Row
If Leftmost > area.Column Then Leftmost = area.Column
End If
Next
'Copy each area to a location offset from the target, such that
'the topmost cell will be in the row defined by Target and
'the leftmost cell will be in the column defined by Target
For Each area In Source.Areas
area.Copy Destination:=Target.Range(area.Address).Offset(1 - Topmost, 1 - Leftmost)
Next
End If
End Sub
基于from,以下代码将复制非连续数据,而不复制不属于联合的单元格
Sub CopyAreas(ByVal Source As Range, _
ByVal Target As Range, _
Optional ByVal Inline As Boolean)
Dim area As Range
If Inline Then
For Each area In Source.Areas
area.Copy Destination:=Target
Set Target = Target.Offset(area.Rows.Count)
Next
Else
'Find the top-most and left-most cell in the Source
Dim Topmost As Long, Leftmost As Long
For Each area In Source.Areas
If Topmost = 0 Then
Topmost = area.Row
Leftmost = area.Column
Else
If Topmost > area.Row Then Topmost = area.Row
If Leftmost > area.Column Then Leftmost = area.Column
End If
Next
'Copy each area to a location offset from the target, such that
'the topmost cell will be in the row defined by Target and
'the leftmost cell will be in the column defined by Target
For Each area In Source.Areas
area.Copy Destination:=Target.Range(area.Address).Offset(1 - Topmost, 1 - Leftmost)
Next
End If
End Sub
如错误消息所示,您无法复制包含多个选择的范围-Excel不知道您希望如何将其粘贴到目标,例如,您希望将AH列的信息粘贴到Z列的信息下方,还是将其粘贴到其旁边?如果在它旁边,是希望每列中的第一个单元格对齐,还是希望最后一个单元格对齐?Excel无法确定您想要做什么,所以它内置在Excel中,甚至不需要尝试猜测。如果要复制多个范围,请分别执行每个范围,然后指定其布局方式。(您的第一个报告仅起作用,因为所有范围都是整列,因此只有一种可能的处理方式。)如错误消息所示,您无法复制包含多个选择的范围-Excel不知道您希望如何将其粘贴到目标,例如,您希望将AH列中的信息粘贴到Z列信息的下方,还是将其粘贴到Z列信息的旁边?如果在它旁边,是希望每列中的第一个单元格对齐,还是希望最后一个单元格对齐?Excel无法确定您想要做什么,所以它内置在Excel中,甚至不需要尝试猜测。如果要复制多个范围,请逐个复制,然后指定其布局方式。(您的第一个报告仅起作用,因为所有范围都是整列,因此只有一种可能的处理方法。)导致问题的是非连续、形状不相似的范围。当前代码已经在确保(不是很好,但仍然可以工作)创建的范围位于
wsSheet
工作表上。导致问题的是非连续、形状不相似的范围。当前代码已经在确保(虽然不是很好,但仍然可以工作)创建的范围在wsSheet
工作表上。