查看图片:http : //s12.postimg.org/ov8djtuh9/Capture.jpg
上下文:尝试激活另一个工作簿中的工作表(变量:cSheet),然后从另一个工作簿中复制的数据粘贴到该工作表中。每当我尝试直接使用变量激活(即Worksheets(Name).Activate)或尝试使用变量定义工作表然后激活它时,都会收到下标超出范围的错误。我还尝试了其他编码样式,例如使用“ With Worksheet”等,我的代码虽然更长了,但我还是重新开始了,因为每次我修复某些内容时,都会出现其他问题。因此,坚持基本原则。任何帮助将不胜感激。
Sub GenSumRep()
Dim AutoSR As Workbook
Dim asrSheet As Worksheet
Dim tempWB As Workbook
Dim dataWB As Workbook
Dim SecName As String
Dim oldcell As String
Dim nsName As String
Dim cSheet As Worksheet
Set AutoSR = ActiveWorkbook
Set asrSheet = AutoSR.ActiveSheet
For a = 3 To 10
SecName = asrSheet.Range("D" & a).Value
If SecName <> "" Then
Workbooks.Open Range("B" & a).Value
Set tempWB = ActiveWorkbook
'tempWB.Windows(1).Visible = False
AutoSR.Activate
Workbooks.Open Range("C" & a).Value
Set dataWB = ActiveWorkbook
'dataWB.Windows(1).Visible = False
AutoSR.Activate
'Copy paste data
For b = 24 To 29
oldcell = Range("C" & b).Value
If b = 24 Then
nsName = Trim(SecName) & " Data"
Set cSheet = tempWB.Sheets(nsName)
Else
nsName = asrSheet.Range("B" & b).Value
Set cSheet = tempWB.Sheets(nsName)
End If
'Copy
dataWB.Activate
Range(oldcell).Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
'Paste
tempWB.Activate
cSheet.Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
b = b + 1
Next b
End If
a = a + 1
Next a
End Sub
您只会因以下原因而收到该错误:您提供的名称在集合中不存在!
根据您的代码,可能有两个原因:
nsName
变量包含隐藏的字符,即使它看起来正确,也会使其与众不同。根据您的评论,看来您在寻找错误的工作簿。检查这些下标错误的一个好方法是迭代集合并打印出其中Names
包含的内容。
Dim sht as Worksheet
For Each sht In tempWB.Sheets
Debug.Print sht.Name
Next sht
通常,希望摆脱对的调用Select
,Activate
这样您就不必依赖接口来获取对象。请参阅这篇文章如何避免Select
和Activate
获取更多信息。
适用于您的代码的一个想法是直接分配工作簿,而无需执行以下操作ActiveWorkbook
:
Set tempWB = Workbooks.Open(asrSheet.Range("B" & a).Value)
Set dataWB = Workbooks.Open(asrSheet.Range("C" & a).Value)
代替:
Workbooks.Open Range("B" & a).Value
Set tempWB = ActiveWorkbook
'tempWB.Windows(1).Visible = False
AutoSR.Activate
Workbooks.Open Range("C" & a).Value
Set dataWB = ActiveWorkbook
'dataWB.Windows(1).Visible = False
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句