VBA不打开读取文件内容

子龙奶爸 2010-02-25 01:48:50
我需要用VBA代码不打开文件读取.xls,.xlsx文件。(不打开的原因是:如果已经打开,用open语句会出错)
请问大虾们有什么办法做。我网上查了就是用ExecuteExcel4Macro做。但是我不是很清楚。
里面的sheet1是名字,但是我要是用worksheets(1)(指定编号而不是名字)就出错。而且这个函数执行到
arg = "'" & path & "[" & file & "]" & sheet & "'!" & _
Range(ref).Range("A1").Address(, , xlR1C1)
这句时就出错,错在Range上面。而且我可能会读这个sheet的大量数据,会不会很慢?或者有什么更好的方法?
分不够再加。


GetValue函数,需要以下四个变量
path: 未打开的Excel文件的路径 (e.g., "d:\test")
file: 文件名(e.g., "test.xls")
sheet: 工作表的名称 (e.g., "Sheet1")
ref: 引用的单元格 (e.g., "C4")
'*********函数如下
Private Function GetValue(path, file, sheet, ref)
' 从未打开的Excel文件中检索数据
Dim arg As String
' 确保该文件存在
If Right(path, 1) <> "\" Then path = path & "\"
If Dir(path & file) = "" Then
GetValue = "File Not Found"
Exit Function
End If
' 创建变量
arg = "'" & path & "[" & file & "]" & sheet & "'!" & _
Range(ref).Range("A1").Address(, , xlR1C1)
' 执行XLM 宏
GetValue = ExecuteExcel4Macro(arg)
End Function
...全文
1217 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ksfblc 2010-07-22
  • 打赏
  • 举报
回复
为了看回复 水一下
子龙奶爸 2010-03-04
  • 打赏
  • 举报
回复
自己解决了。谢谢大家。
cphj 2010-03-02
  • 打赏
  • 举报
回复
“(不打开的原因是:如果已经打开,用open语句会出错)”

你是什么版本,具体open语句怎么写的,我试过重复打开并不会出错

即使出错,代码这样保护一下就行了
Sub TryFileOpen()
On Error Resume Next
Set wb = Application.Workbooks.Open("1.xls")
If Err.Number <> 0 Then
Err.Clear
On Error GoTo 0
Set wb = Application.Workbooks("1.xls")
End If
End Sub
子龙奶爸 2010-03-01
  • 打赏
  • 举报
回复
代码是网上找的。确实Range(ref).只要写一个得。但是还是出错的。
dust12 2010-02-26
  • 打赏
  • 举报
回复
arg = "'" & path & "[" & file & "]" & sheet & "'!" & _
Range(ref).Range("A1").Address(, , xlR1C1)
这段错了
你的参数ref是代表啥意思?是单元格嘛?要是的话,后面的Range("A1")就删掉,range写了两遍当然错了。
arg = "'" & path & "[" & file & "]" & sheet & "'!" & _
Range(ref).Address(, , xlR1C1) 取出单元格ref的内容
或者
arg = "'" & path & "[" & file & "]" & sheet & "'!" & _
Range("A1").Address(, , xlR1C1) 取出单元格“A1”的内容


说个题外话,你这段代码也太不规范了。。。
function的返回值类型不写,参数的类型不写,错误处理也没有,假如你要读的文件不存在、或者别的啥原因出错了,你就只有崩一条路了
laoyebin 2010-02-26
  • 打赏
  • 举报
回复
没有真正的不打开就能取值的
ADO,方便点
  • 打赏
  • 举报
回复
不打开没法做 回复内容太短了
子龙奶爸 2010-02-25
  • 打赏
  • 举报
回复
这种方式有用到Open
shan1119 2010-02-25
  • 打赏
  • 举报
回复
但是我要是用worksheets(1)(指定编号而不是名字)就出错
-------------
sheets(1)

dim book as workbook
Dim sheet As Worksheet
set book =Application.Workbooks.Open (path + fileName)
for each sheet in book.sheets
Debug.Print sheet.name
next
子龙奶爸 2010-02-25
  • 打赏
  • 举报
回复
有没有大虾帮帮忙啊?
子龙奶爸 2010-02-25
  • 打赏
  • 举报
回复
有没有大虾帮帮忙啊?

5,139

社区成员

发帖
与我相关
我的任务
社区描述
其他开发语言 Office开发/ VBA
社区管理员
  • Office开发/ VBA社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧