用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命令都很慢,换了idea的工作目录.更换git版本,所有操作都是徒劳. 最后关了火绒杀毒软件,才快了起来. 坑坑坑坑坑的火绒杀毒!浪费我至 ...

  2. SNF软件开发机器人-子系统-功能-数据列表分页与不分页-瀑布式分页-如何配置?

    [列表]分页 1.效果展示: (1)不分页 (2)普通分页 (3)瀑布式分页 2.使用说明: 打开显示页面,点击开发者选项的简单配置按钮.在功能表信息中选择需要的分页方式.普通分页和瀑布式分页需要配合 ...

  3. SQL Server 2016新特性:数据库级别配置

    新的  ALTER DATABASE SCOPED CONFIGURATION (Transact-SQL) 用来配置数据库级别配置. 这个语句可以配置每个数据库的配置: 清理过程cache 设置MA ...

  4. vim常用技巧

    # vim常用技巧 ## 行操作------------------------------ 行首 0- 行尾 $- 第一个非空字符 ^ ## 列编辑模式----------------------- ...

  5. IMAP 读取含有附件邮件超慢问题

    添加以下配置: Properties props = new Properties(); props.setProperty("mail.imap.partialfetch", & ...

  6. 一致性 Hash 学习与实现

    普通的 Hash 解决的是什么问题? 下图是一个普通的余数法构造的哈希表. 一般在编程中使用哈希表,某个 bucket 突然就没了的概率比较小,常见的是因为负载因子太大需要增加 bucket,然后 r ...

  7. Deepin 系统下安装VMware并激活

    1.打开深度商店:搜索VMware,并下载安装. 2.打开启动器:点击VMware-install. 3.填写管理员密码. 4.下一步,完成安装. 5.打开VMware Workstation,输入密 ...

  8. Android WebRTC开发入门

    在学习 WebRTC 的过程中,学习的一个基本步骤是先通过 JS 学习 WebRTC的整体流程,在熟悉了整体流程之后,再学习其它端如何使用 WebRTC 进行互联互通. 申请权限 Camera 权限 ...

  9. MyBatis 配置多数据源

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  10. PHP下载远程图片的3个方法

    From: http://blog.csdn.net/iefreer/article/details/46930239 直接上代码 <?php function dlfile1($file_ur ...