首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VBA >

VBA不打开读取文件内容解决思路

2012-02-04 
VBA不打开读取文件内容我需要用VBA代码不打开文件读取.xls,.xlsx文件。(不打开的原因是:如果已经打开,用ope

VBA不打开读取文件内容
我需要用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


[解决办法]
但是我要是用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
[解决办法]
不打开没法做 回复内容太短了

[解决办法]
没有真正的不打开就能取值的
ADO,方便点
[解决办法]
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的返回值类型不写,参数的类型不写,错误处理也没有,假如你要读的文件不存在、或者别的啥原因出错了,你就只有崩一条路了
[解决办法]
“(不打开的原因是:如果已经打开,用open语句会出错)”

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

即使出错,代码这样保护一下就行了

VB code
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 IfEnd Sub 

热点排行