ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: juekasry

[求助] 在不打开源文件的情况下 如何读取源文件中的数据并写进备份数据的EXCELL的sheet里

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-8-15 12:39 | 显示全部楼层
有空格的字段名放在[]里面。如字段"客户 报价"你在查询语句里需要写成 [客户 报价]

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-15 12:54 | 显示全部楼层
本帖最后由 juekasry 于 2018-8-15 12:58 编辑
microyip 发表于 2018-8-15 12:33
这个问题,没附件怎么猜?你猜我猜,猜猜猜

不好意思侠圣, 具体情况有截图和附件  请诊断~   【之前下载侠圣的附件, 我电脑会自动的移除掉你写在里面的代码, 如果可以, 请侠圣附上代码吧  我好对比是那个地方我修改有问题呢 谢谢侠圣】
Capture1.PNG
Capture.PNG

多工作簿多表查询汇总的通用解决方案.7z

36.56 KB, 下载次数: 5

附件

TA的精华主题

TA的得分主题

 楼主| 发表于 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



Capture4.PNG
Capture3.PNG
Capture2.PNG

宏表函数取数 未打开的工作簿取数.7z

21.41 KB, 下载次数: 10

附件

TA的精华主题

TA的得分主题

发表于 2018-8-16 18:04 | 显示全部楼层
1. 非特定工作表:要么打开工作簿 获取符合条件的工作表名
                        或者SQL查询: Set RS = CN.OpenSchema(20) '//参数:adSchemaTables=20
                        速度未必优于:打开工作簿(工作表名有符号,那就更麻烦)
2、ADO的SQL  无法打开带密码的工作簿
                      直接打开,可以用下面的:打开有密码,还有权限密码
Set WB1 = Workbooks.Open(Filename:=ThisWorkbook.Path & "\" & Str账号信息表名, Password:=Str密码, WriteResPassword:=Str密码)

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-16 20:13 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
opiona 发表于 2018-8-16 18:04
1. 非特定工作表:要么打开工作簿 获取符合条件的工作表名
                        或者SQL查询: Set RS ...

谢谢 opiona 老师, 原以为是设置保护的表格在读数时会提示报错,结果也可以正常读数。  已记录下老师的建议。谢谢老师~!

TA的精华主题

TA的得分主题

发表于 2020-3-16 11:05 | 显示全部楼层
如果直接写在SQL中能不能这样行列范围能不能用变量来表示呢,语句又是怎么样的
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-12 13:38 , Processed in 0.035861 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表