见图引用在另一工作簿中工作时: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”提供正确的工作表名称。 –
哪条线专门给出错误?另外请注意,不允许在工作簿之前激活工作表,虽然您的代码在那里看起来不错。你在那些'Workbooks'上设置了正确的引用吗?我将使用'Set tempWB = Workbooks.Open(Range(...))'而不是依赖'ActiveWorkbook'来切换。您还可以将您的呼叫限定在'范围'以避免激活所有这些表单。做:'Workbooks.Open asrSheet.Range(...)'而不是“裸”的'范围'。 –
我在第一次设置cSheet = tempWB.Sheets(nsName)时出现错误。 “?nsName”显示正确的引用。我试着改变代码并使用工作表(nsName)。激活,但它突出显示为错误。每当我尝试选择工作表时,都是这样。我用这种方式编写了我制作的其他宏;虽然不完美,但他们完成了这项工作。我被困在这个特殊宏的最简单的步骤中,没有任何理由我可以证明这一点。 –