看图片:http://s12.postimg.org/ov8djtuh9/Capture.jpg http://s12.postimg.org/ov8djtuh9/Capture.jpg
Context:尝试激活另一个工作簿中的工作表(变量: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
您收到该错误的原因只有一个:您提供的名称在集合中不存在!
根据您的代码,有几个可能的原因:
- Your
nsName
变量包含隐藏字符,即使它看起来正确,也会使其有所不同。
- 您正在错误的工作簿中查找工作表。
根据您的评论,您似乎正在查找错误的工作簿。检查这些下标错误的一个好方法是迭代集合并打印出Names
包含在其中。
Dim sht as Worksheet
For Each sht In tempWB.Sheets
Debug.Print sht.Name
Next sht
一般来说,最好摆脱对Select
and Activate
这样您就不会依赖接口来获取对象。看这篇关于避免的文章Select and Activate https://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros了解更多信息。
应用于代码的一种想法是直接分配工作簿,而无需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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)