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时就出现下标越界了,人家说越界是找不到工作表,但是我激活工作表了怎么都不行啊,请高手指点! 展开
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时就出现下标越界了,人家说越界是找不到工作表,但是我激活工作表了怎么都不行啊,请高手指点! 展开
3个回答
展开全部
楼上说得还不清楚,应该是你的 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)”了,其他可以 不变了。你自己试试吧,如果行就给分吧。
展开全部
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可以删除
--------------------
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可以删除
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的表还没打开,你怎么使用Activate
在出错那句话前面加上
Workbooks.Open FileName
filesArr = Split(FileName, "\")
FileName = filesArr(UBound(filesArr))
在出错那句话前面加上
Workbooks.Open FileName
filesArr = Split(FileName, "\")
FileName = filesArr(UBound(filesArr))
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |