|
楼主 |
发表于 2018-8-16 15:13
|
显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
本帖最后由 juekasry 于 2018-8-16 20:10 编辑
小小更新,不足之处,请多多指教: 我琢磨用 宏表函数取数 来解决 不打开文件夹的情况下把指定的工作簿数据读出来。 现已可以实现。
不足之处:
1 只能读取特定的表格的数据, 如果需要汇总N多个工作簿(同文件夹内且不想打开数据表)的数据,SQL要好些(我也在等大神释疑,报错仍没解决。等待中哈~ 本贴12楼。)2 如果指定的工作簿中, 工作表数据太多,N多行,N多列, 用 宏表函数取数 会占用较长的时间一直读取, 时效性偏差.....
3 如果指定的工作簿有密码,如我指定读取【数据表.xlsx 】,这个表格有密码,又该怎么打开呢, 语句上要怎么设置,还在推敲中..... 有大神见着,请指点一二。尝试读取有保护的工作簿数据, 以下代码可以实现无需编写输入密码的代码,亦可以实现读数,就是时间会偏长....
宏表函数取数 代码如下: 【有兴趣的小伙伴可以尝试一下,单独用来备份数据还行哈!】
Sub Button2_Click()
p = "C:\test" '定义文件夹路径
f = "数据表.xlsx" '指定读取的工作簿名字
s = "data" '指定要读取的sheet名字
Application.ScreenUpdating = False '锁屏,提高效率
For R = 1 To 15 '定义读取数据行数 需要多少行, 就改15这个数字
For C = 1 To 4 '定义读取数据列数 需要多少列, 就改4这个数字
a = Cells(R, C).Address '给把单元格地址赋值给A
Cells(R, C) = GetValue(p, f, s, a) '获取单元格的值
If Cells(R, C).Value = 0 Then '判断回值是否显示,如果是空值, 则回值为空,不显示0
Cells(R, C) = ""
End If
Next C
Next R
Application.ScreenUpdating = True ' 解屏,恢复
End Sub
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
|
|