vba excel 单元格表示问题。 目的:从excel文件aaa中读取excel文件bbb的路径然后打开,向单元格赋值。

赋值代码:
Sheets("sheet1").[d3].Value.cell(2, 2) = "123"
其中Sheets("sheet1").[d3].Value代表了excel 文件aaa中的一个单元格,里面存的是一个文件路径如:c:\bbb.xls
现在执行程序失败,说超出索引范围??求解决方法。

有几处问题:
首先:Sheets("sheet1").[d3].Value是一个字符串,并不是这个字符串代表的引用,需要将这个引用转成对象。
另外,如果那个单元格里如果放的是c:\bbb.xls的话,那么它还不能构成一个完整的引用。一个完整的引用要在文件名上加引号,还要有表名:比如:'C:\[bbb.xls]Sheet1'!$A$1
还有,就是可以在当前文件中引用其它文件中的单元格的值,却不能给这些单元格赋值,要赋值必须要打开文件才行。追问

如何将Sheets("sheet1").[d3].Value转换成对象?我现在确实想使用[d3]中的值

追答

Sheets("sheet1").[d3]就是对象,[d3]中的值就是Sheets("sheet1").[d3].Value。

确认一下你的问题:你是要取得[d3]中值所指象的那个对象吗?

如果你的Sheet1中D3这个单元格存放着一个文件路径的字符串:c:\bbb.xls,并且这个文件路径没有问题的话。用laurenceluan所说的方法应该没有问题。

请确认路径中的冒号是英文的半角冒号,以及D3单元格里就是路径c:\bbb.xls,而没有在两边加上引号如"c:\bbb.xls"。如果加上了引号要去掉。(提问题如果有个图片会简化很多沟通问题)

下面的程序可以往bbb.xls中的Sheet1中的B2赋值,仅供参考:

 

Dim myWK As Workbook
Set myWK = Workbooks.Open(Sheets("Sheet1").[d3].Value)
'---下面为你要进行的操作比如---------
myWK.Sheets("Sheet1").[b2] = "123"
'------------------------------------
myWK.Save
myWK.Close
Set myWK = Nothing

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-22
先打开文件bbb
Workbooks.Open filename:="c:\bbb.xls"
向单元格赋值
??????哪个表的单元格????
如果是bbb
ActiveWorkbook.sheet1.cells(2,2)="123"
如果是aaa
ThisWorkbook.sheet1.cells(2,2)="123"追问

现在就是在打开文件上出错,单元格d3中存放的就是文件bbb的路径,路径不固定。
Workbooks.Open filename:="c:\bbb.xls"

可以使用,但是如果用Workbooks.Open filename:="Sheets("sheet1").[d3].Value"就不对了

追答

Workbooks.Open filename:=Activesheet.[d3].Value

第2个回答  2013-04-22
Application.Workbooks.Open Sheets("sheet1").[d3].Value
Cells(2, 2) = "123"
你目前 的 sheet1 D3 单元格是 你的 文件路径文本……追问

对d3单元格确实是文件路径文本,所以我想先隐藏的方式打开文件,然后再写入。可是现在文件根本打不开,直接使用路径没有问题,但是路径是不固定的啊,所以要存放到单元格里面

追答

我给你的这段代码 打不开吗? 你原来的语句 语法有些问题……
尝试一下 这个 打开 并输入的代码 看看能不能实现你的要求 要确保 D3 中路径 是你文件存在的真是路径 我试验了 这个是可以打开的……
可能你需要的是 打开 D3中的文档 输入数据后 再关闭 那么尝试如下代码:
Dim Mwb As Object
Mwb = GetObject(Sheets("sheet1").[d3].Value)
Mwb.Sheets(1).Cells(2, 2) = "123"
Application.Windows(Mwb.Name).Visible = True
Mwb.Close 1
这个是 打开并赋值后再关闭……

追问

我程序里注掉其余代码只有你上面那块还是不行,上面是错误消息,可能是我电脑问题吧。不过还是谢谢你

追答

Mwb.Sheets(1).Cells(2, 2) = "123" 这里出错了?

Mwb.Sheets(“sheet1”).Cells(2, 2) = "123" 哪

追问

没有,只是打开,
Mwb = GetObject(Sheets("sheet1").[d3].Value)

这里就中断了。。。
可能是电脑里面的一些设置吧

相似回答