用ExecuteExcel4Macro从未打开的Excel工作簿中读取数据(转载)

从另外一个未打开的Excel文件中读取数据的函数

下面这个函数调用XLM宏从未打开的工作簿中读取数据.

*注意:  该函数不能用于公式.



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



使用该函数:

将该语句复制到VBA的模块中,然后,在适当的语句中调用该函数. 下面的例子显示D:\test 下的文件test.xls 的Sheet1中的单元格”A1”的内容.

Sub TestGetValue()

    p = "d:\test"

    f = "test.xls"

    s = "Sheet1"

    a = "A1"

    MsgBox GetValue(p, f, s, a)

End Sub



下面还有一个例子.这个语句从一个未打开的文件中读取1200个数值(100行12列),并将结果填到当前工作表中.

Sub TestGetValue2()

    p = "d:\test "

    f = "test.xls"

    s = "Sheet1"

    Application.ScreenUpdating = False

    For r = 1 To 100

        For c = 1 To 12

            a = Cells(r, c).Address

            Cells(r, c) = GetValue(p, f, s, a)

        Next c

    Next r

    Application.ScreenUpdating = True

End Sub

说明: 如果工作簿处于隐藏状态,或者工作表是图表工作表,将会报错.

ExecuteExcel4Macro
使用说明



ExecuteExcel4Macro 方法

請參見 套用至 範例 特定 

執行 Microsoft Excel 4.0 巨集函數,然後傳回此函數的結果。傳回結果的型態取決於函數的型態。



expression.ExecuteExcel4Macro(String)



expression  選擇性的。傳回 Application 物件的運算式。



String  必選的 String 資料型態。不帶等號的 Microsoft Excel 4.0 巨集語言函數。所有參照必須是像 R1C1 這樣的字串。如果 String 內包含雙引號,則必須寫兩個。例如,要執行此巨集函數 =MID("sometext",1,4),String 應寫成
[MID(""sometext"",1,4)]。



註解

Microsoft Excel 4.0 巨集不在目前活頁簿或工作表的環境中求值。也就是說所有的參照都應該是外部參照,而且需要明確指定活頁簿名稱。 例如,要在 Book1 中執行 Microsoft Excel 4.0 巨集 [My_Macro] ,必須使用 [Book1!My_Macro()]。如果不指定活頁簿名稱,此方法將失敗。



範例

此範例對 Sheet1 的 C3 儲存格執行 GET.CELL(42) 巨集函數,然後在訊息方塊中顯示結果。GET.CELL(42) 巨集函數傳回目前視窗左限到目前儲存格的左邊之間的水平距離。Visual Basic 中沒有與此巨集函數直接等價的函數。



Worksheets("Sheet1").Activate

Range("C3").Select

MsgBox ExecuteExcel4Macro("GET.CELL(42)")





'***直接讀取c:\test.xls(不打開)中sheet1.a1的值另一種參考代碼 (比一楼的写法简单许多)

Sub TestGetValue()

   str0 = "'C:\[test.xls]Sheet1'!R1C1"

MsgBox ExecuteExcel4Macro(str0)

End Sub)



雖然Excel VBA的相關說明只有一點點,但我覺的

ExecuteExcel4Macro似乎好像有更多的用法,有待大家一同去發掘了

ExecuteExcel4Macro (宏函数)使用说明的更多相关文章

  1. 【转】linux内核中writesb(), writesw(), writesl() 宏函数

    writesb(), writesw(), writesl() 宏函数 功能 : writesb()    I/O 上写入 8 位数据流数据 (1字节) writesw()   I/O  上写入 16 ...

  2. Firebird/InterBase内置函数使用说明

    Firebird/InterBase内置函数使用说明(转自:圣域天堂) 2008-10-12 20:56 加*号为FB2.0加入的函数 整理:剑雷(jianlei) 2006-10-13 1. COU ...

  3. readb(), readw(), readl(),writeb(), writew(), writel() 宏函数【转】

    转自:http://www.netfoucs.com/article/hustyangju/70429.html readb(), readw(), readl()函数功能:从内存映射的 I/O 空间 ...

  4. FrameWork中SQLServer数据源使用宏函数出错解决办法

    环境:DW是SQLServer2008 建模工具:Cognos FrameWork Version:Cognos10.2 出现问题:在FM中创建查询主题,sql类型数据源,引入宏函数#CAMIDLis ...

  5. FrameWork模型中引入宏函数报错解决方法

    如下图在Framework的一个简单维度中加入宏函数 解决办法如下图 step1: step2: PS :Cognos 10.1.1中 在cognos connection中创建数据源,为什么没有od ...

  6. Report Studio值提示通过prompt宏函数给sql查询传参

    场景:当我们在DW中新建了一个表,但是在FM中没有创建模型,想针对这个表直接做一个报表,那么就需要在reportstudio中直接用sql来查询,为了追求查询速度,我们可以把页面用户选择的条件直接传给 ...

  7. SAS学习笔记44 宏函数

    类SAS函数的宏函数 该部分函数共5个,其无论是名字.语法.功能都与SAS函数类似,只是在函数名前多了一个“%”.这5个宏函数分别是: %INDEX %LENGTH %SCAN %SUBSTR %UP ...

  8. #define定义宏函数 的正确使用

    如何使用宏来定义一个自定义函数呢?首先我们来看下面这段代码 #define SQUARE(x) x*x int main() { int a = 5; printf("SQUARE(a): ...

  9. python文档字符串(函数使用说明)

    关键字: 函数说明.help()函数 1.效果图: 2.代码: # 文档字符串( doc str) 是 函数使用说明 # 用法: 在函数第一行写一个字符串 def fn(*nums): ''' 函数的 ...

随机推荐

  1. 基于git命令的代码统计方法

    基于git命令的代码统计方法 没什么好说的,基于git log命令,使用前提是安装了git ...... .统计所有人代码量 统计所有人代码增删量,拷贝如下命令,直接在git bash等终端,git项 ...

  2. Deep Learning.ai学习笔记_第二门课_改善深层神经网络:超参数调试、正则化以及优化

    目录 第一周(深度学习的实践层面) 第二周(优化算法) 第三周(超参数调试.Batch正则化和程序框架) 目标: 如何有效运作神经网络,内容涉及超参数调优,如何构建数据,以及如何确保优化算法快速运行, ...

  3. 关于APP,原生和H5开发技术的争论 APP开发技术选型判断依据

    关于APP,原生和H5开发技术的争论 App的开发技术,目前流行的两种方式,原生和Html5.原生分了安卓平台和ios平台(还有小众的黑莓.死去的塞班就不说了),H5就是Html5. 目前争论不休的问 ...

  4. 微信小程序--相关资料

    微信小程序Demo https://github.com/zce/weapp­-demojustjavac/awesome­wechat­weapp: 微信小程序开发资源汇总 https://gith ...

  5. Effective Java 第三版——81. 优先使用并发实用程序替代wait和notify

    Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...

  6. Linux系统中的常用命令

    查看日志 cat 或 tail -f 日志文件说明 /var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一 /var/log/secure 与安全 ...

  7. 【转载】MapReduce编程 Intellij Idea配置MapReduce编程环境

    目录(?)[-] 一软件环境 二创建maven工程 三添加maven依赖 四配置log4j 五启动Hadoop 六运行WordCount从本地读取文件 七运行WordCount从HDFS读取文件 八代 ...

  8. 原创:在局域网中,如何知道某个IP被占用 show arp

    如果某一栋楼有三层交换机(一般为汇聚层交换机),只需要在该三层交换机输入命令:show arp,即可知道当前那些IP地址被占用.如果该栋楼只有二层交换机(接入层交换机),需要在连接该二层交换机的上级三 ...

  9. ffmpeg安装步骤

    首先要安装各种解码器 1.lame lame-3.99.5.tar.gz Url:http://sourceforge.net/project/showfiles.php?group_id=290&a ...

  10. [加密]证书、CA、证书信任链

    转自:https://www.jianshu.com/p/6bf2f9a37feb TLS 传输层安全性协定 TLS(Transport Layer Security),及其前身安全套接层 SSL(S ...