用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. Hadoop Ls命令添加显示条数限制參数

    前言 在hadoop的FsShell命令中,预计非常多人比較经常使用的就是hadoop fs -ls,-lsr,-cat等等这种与Linux系统中差点儿一致的文件系统相关的命令.可是细致想想,这里还是 ...

  2. android ScrollView 控制行数

    利用ScrollView 来控制textView 显示的行数 <ScrollView android:layout_width="fill_parent" android:l ...

  3. MMU内存管理单元

    arm-linux学习-(MMU内存管理单元) 什么是MMU MMU(Memory Management Unit)主要用来管理虚拟存储器.物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及 ...

  4. vue2 枚举类型转换

    vue2页面上要把数字0,1,2...之类的数值转换成对应的枚举文本,解决如下: 方案一: 如果是是否的问题,直接: {{enable == 1 ? '是' : '否'}} 即可. 方案二: 通过定义 ...

  5. 快速搭建python程序

    公司对外提供了http接口服务,涉及到了des加密,有客户用Python开发,但搞不定加密,客户的问题就是大问题,虽然以前没接触过Python,也只能硬着头皮上,不停的baidu各种资料,从环境搭建. ...

  6. react-native init的时候出现问题:npm WARN React-native@0.35.0 requires a peer of react@~15.3.1 but none was

    react-native init的时候出现问题:npm WARN React-native@0.35.0 requires a peer of react@~15.3.1 but none was ...

  7. 【Spark深入学习 -15】Spark Streaming前奏-Kafka初体验

    ----本节内容------- 1.Kafka基础概念 1.1 出世背景 1.2 基本原理 1.2.1.前置知识 1.2.2.架构和原理 1.2.3.基本概念 1.2.4.kafka特点 2.Kafk ...

  8. 用反卷积(Deconvnet)可视化理解卷积神经网络还有使用tensorboard

    『cs231n』卷积神经网络的可视化与进一步理解 深度学习小白——卷积神经网络可视化(二) TensorBoard--TensorFlow可视化 原文地址:http://blog.csdn.net/h ...

  9. Elasticsearch学习笔记——常用命令

    1.创建一个名字为index的topic curl -XPUT http://localhost:9200/index 2.创建一个mapping curl -XPOST http://localho ...

  10. CentOS上安装配置Ruby on Rails

    0.install sublime editor(optional) ref:http://www.tecmint.com/install-sublime-text-editor-in-linux/ ...