VBA读取另外工作簿中的数据时下标越界

读取其它工作簿表格中的数据时,提示下标越界,程序如下:PrivateSubCommandButton1_Click()DimFileAsStringDimFiltInde... 读取其它工作簿表格中的数据时,提示下标越界,程序如下:
Private Sub CommandButton1_Click()
Dim File As String
Dim FiltIndex As Integer
Dim Title As String
Dim FileName As Variant
Dim rgA1 As String
Dim Wrbk As Workbook

Filt = "Excel Files(*.xls),*.xls"
FiltIndex = 2
Title = "select a file to import"
FileName = Application.GetOpenFilename(FileFilter:=Filt, FilterIndex:=FiltIndex, Title:=Title)
If FileName = False Then
MsgBox "No File was Selected"
Exit Sub
End If
MsgBox "you have select" & FileName

Workbooks(FileName).Activate
rgA1 = Application.Workbooks(FileName).Worksheets("sheet1").Cells(1, 1)
Application.Workbooks("PR设计.xls").Worksheets("sheet2").Cells(1, 1) = rgA1
End Sub

当运行到Workbooks(FileName).Activate时就出现下标越界了,人家说越界是找不到工作表,但是我激活工作表了怎么都不行啊,请高手指点!
展开
 我来答
wyf19790923
2010-06-12 · TA获得超过672个赞
知道小有建树答主
回答量:309
采纳率:0%
帮助的人:275万
展开全部
楼上说得还不清楚,应该是你的 FileName 定义的是一种特殊的类型,所以你的“FileName = Application.GetOpenFilename(FileFilter:=Filt, FilterIndex:=FiltIndex, Title:=Title)”这一句就是给FileName定义了一个字符串类型了,所以它只代表该工作簿所在路径及文件名的一串字符,并不是你要求的一个工作簿,所以你还需要用一个工作生活簿变量将它打开如“Set Wrbk = Workbooks.Open(FileName)”Wrbk是你定义的一个工作簿变量。这样一来Wrbk就是刚刚选择的工作簿了,然后“rgA1 = Application.Workbooks(FileName).Worksheets("sheet1").Cells(1, 1)”就可以改成“rgA1 = Wrbk.Worksheets("sheet1").Cells(1, 1)”了,其他可以 不变了。你自己试试吧,如果行就给分吧。
帐号已注销
2010-06-12 · TA获得超过8613个赞
知道大有可为答主
回答量:3242
采纳率:66%
帮助的人:2869万
展开全部
excel的帮助
--------------------
GetOpenFilename 方法
显示标准的“打开”对话框,获取用户文件名,而不必真正打开任何文件。
--------------------
想要在程序中引用其他工作薄,必须将该工作薄打开,
而 GetOpenFilename 方法 只能获取文件名,不会真正打开任何文件
所以在Workbooks(FileName)没有打开的情况下引用该工作薄,肯定会越界
可以在Workbooks(FileName).Activate前,用set关键字隐性打开该工作薄:
set MyWorkbook=Workbooks.Open(FileName)
然后可以在下面的语句中,用MyWorkbook代替Application.Workbooks(FileName)

如:
Dim MyWorkbook As Workbook
Set MyWorkbook = Workbooks.Open(Filename)
rgA1 = MyWorkbook.Worksheets("sheet1").Cells(1, 1)

-------
另外,你的程序是对两个工作薄的单元格的复制,没必要激活工作薄,所以Workbooks(FileName).Activate可以删除
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
gfadhl
2010-06-12 · 超过24用户采纳过TA的回答
知道答主
回答量:74
采纳率:0%
帮助的人:0
展开全部
你的表还没打开,你怎么使用Activate
在出错那句话前面加上
Workbooks.Open FileName
filesArr = Split(FileName, "\")
FileName = filesArr(UBound(filesArr))
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式