Excel VBA下标越界 如何引用工作簿数组
我的VBA程序如下:Subtest()Dimi,nAsIntegerDims()AsStringn=Application.WorksheetFunction.Count...
我的VBA程序如下:
Sub test()
Dim i, n As Integer
Dim s() As String
n = Application.WorksheetFunction.CountA(Workbooks("Extract_Innatance.xlsm").Worksheets("Index").Range("A:A")) - 2
ReDim s(n, 7) As String
i = 3
For i = 3 To n + 2
s(i, 1) = Application.Workbooks("Extract_Innatance.xlsm").Worksheets("Index").Cells(i, 1)
Range("D5:D765") = Application.Workbooks("Extract_Innatance.xlsm").Worksheets("s(i,1)").Range("B13")
Cells(i + 2, 17) = Range(E2)
Next i
End Sub
调试时候第九行 Range("D5:D765") = Application.Workbooks("Extract_Innatance.xlsm").Worksheets("s(i,1)").Range("B13")
出现下标越界问题,该如何解决?
另外,我想把别的工作簿Extract_Innatance.xlsm中的B13:B773引用到本工作簿的D5:D765,请问该如何修改第九行 Range("D5:D765") = Application.Workbooks("Extract_Innatance.xlsm").Worksheets("s(i,1)").Range("B13")
在线等,非常感谢 展开
Sub test()
Dim i, n As Integer
Dim s() As String
n = Application.WorksheetFunction.CountA(Workbooks("Extract_Innatance.xlsm").Worksheets("Index").Range("A:A")) - 2
ReDim s(n, 7) As String
i = 3
For i = 3 To n + 2
s(i, 1) = Application.Workbooks("Extract_Innatance.xlsm").Worksheets("Index").Cells(i, 1)
Range("D5:D765") = Application.Workbooks("Extract_Innatance.xlsm").Worksheets("s(i,1)").Range("B13")
Cells(i + 2, 17) = Range(E2)
Next i
End Sub
调试时候第九行 Range("D5:D765") = Application.Workbooks("Extract_Innatance.xlsm").Worksheets("s(i,1)").Range("B13")
出现下标越界问题,该如何解决?
另外,我想把别的工作簿Extract_Innatance.xlsm中的B13:B773引用到本工作簿的D5:D765,请问该如何修改第九行 Range("D5:D765") = Application.Workbooks("Extract_Innatance.xlsm").Worksheets("s(i,1)").Range("B13")
在线等,非常感谢 展开
展开全部
一、猜测数组S存放的是工作表名称,Worksheets("s(i,1)")中,数组元素加了双引号,成了文本了,应去掉数组元素的双引号:
Range("D5:D765") = Application.Workbooks("Extract_Innatance.xlsm").Worksheets(s(i,1)).Range("B13")
二、把别的工作簿Extract_Innatance.xlsm中的B13:B773引用到本工作簿的D5:D765
Sub test1()
Dim wb As Workbook
Set wb = GetObject(里面放别的工作簿Extract_Innatance.xlsm的路径)
range("d5:d765")=wb.Sheets(别的工作簿Extract_Innatance.xlsm中的B13:B773所在的工作表名).range("B13:B773")
wb.Close
End Sub
追问
s(i,1)确实是代表工作表名称!!!
我只是想把当前工作簿的D5:D765引用Extract_Innatance.xlsm中的B13:B773即可,不需要另外创建工作簿啊,能否优化一下呢?
追答
getobject不是创建工作簿,第二段代码就是引用
举个例子,在test工作簿中获取Extract_Innatance.xlsx中Index的A1:A10
粘贴到test的B1:B10
展开全部
S()这个动态数组第一维的上限就是n,你的S(I,1)从3循环到n+2怎么可能行的通呢?,要引用其他工作簿的数据光修改这行代码也无济于事
追问
给个引用的sub也可以啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Extract_Innatance,Index等这几个名称你查看一下是否存在?或者名称是否完全一致?
我之前也是,写程序是对的,却在文件名或sheet名上弄错,正面也查不出来
我之前也是,写程序是对的,却在文件名或sheet名上弄错,正面也查不出来
追问
一定存在的,谢谢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询