13

我找到了这段代码,并认为如果我只需要从封闭的工作表中提取一个值,它可能会很好用。

strInfoCell = "'" & strPath & "[" & strFile & "]Sheet1'!R3C3"
myvalue = ExecuteExcel4Macro(strInfoCell)

strinfocell当我运行此代码时,我得到一个值

'C:\Users\my.name\Desktop[QOS DGL stuff.xlsx]Sheet1'!R3C3

但是当我运行代码时会弹出一个对话框,显示带有“ QOS DGL suff”的桌面文件。

是什么原因造成的,为什么它不只是按预期拉回数据?

我知道路径和文件名是正确的,因为如果我从调试输出复制它们并将它们粘贴到start>>run然后正确的工作表打开。

我知道Sheet1(名为:)ACL,确实有一个价值cells(3,3)

4

4 回答 4

27

这取决于你如何使用它。正在向您显示打开文件对话框,因为“strPath”最后没有“”;)

试试这个代码。

Option Explicit

Sub Sample()
    Dim wbPath As String, wbName As String
    Dim wsName As String, cellRef As String
    Dim Ret As String
    
    'wbPath = "C:\Documents and Settings\Siddharth Rout\Desktop\"
    wbPath = "C:\Users\my.name\Desktop\"
    
    wbName = "QOS DGL stuff.xls"
    wsName = "ACL"
    cellRef = "C3"
    
    Ret = "'" & wbPath & "[" & wbName & "]" & _
          wsName & "'!" & Range(cellRef).Address(True, True, -4150)
    
    MsgBox ExecuteExcel4Macro(Ret)
End Sub
于 2012-02-13T14:07:52.793 回答
5

类似的应用程序,但没有上述示例中的硬编码路径。此函数从另一个已关闭的工作簿复制值,类似于 =INDIRECT() 函数,但没有那么复杂。这只返回值......不是引用......所以它不能与需要引用的其他函数一起使用(即:VLOOKUP())。将此代码粘贴到新的 VBA 模块中:

'Requires filename, sheetname as first argument and cell reference as second argument
'Usage: type in an excel cell -> =getvalue(A1,B1)
'Example of A1 -> C:\TEMP\[FILE1.XLS]SHEET1'
'Example of B1 -> B3
'This will fetch contents of cell (B3) located in (sheet1) of (c:\temp\file1.xls)

'Create a module and paste the code into the module (e.g. Module1, Module2)

Public xlapp As Object

Public Function getvalue(ByVal filename As String, ref As String) As Variant

' Retrieves a value from a closed workbook
    Dim arg As String
    Dim path As String
    Dim file As String

    filename = Trim(filename)

    path = Mid(filename, 1, InStrRev(filename, "\"))
    file = Mid(filename, InStr(1, filename, "[") + 1, InStr(1, filename, "]") - InStr(1, filename, "[") - 1)

    If Dir(path & file) = "" Then
        getvalue = "File Not Found"
        Exit Function
    End If

    If xlapp Is Nothing Then
        'Object must be created only once and not at each function call
        Set xlapp = CreateObject("Excel.application")
    End If


    ' Create the argument
    arg = "'" & filename & "'!" & Range(ref).Range("A1").Address(, , xlR1C1)

    'Execute an XLM macro
    getvalue = xlapp.ExecuteExcel4Macro(arg)

End Function
于 2014-12-17T14:13:57.403 回答
-1

上面的代码

strInfoCell = "'" & strPath & "[" & strFile & "]Sheet1'!R3C3"

myvalue = ExecuteExcel4Macro(strInfoCell)

应该读

strInfoCell = "'" & strPath & "[" & strFile & "]" & "Sheet1'!R3C3"

myvalue = ExecuteExcel4Macro(strInfoCell)

它缺少“&”

不需要函数

干杯尼尔

于 2013-10-17T11:29:14.153 回答
-2
Data = "'" & GetDirectory & "[" & GetFileName & "]" & Sheet & "'!" & Range(Address).Range("A1").Address(, , xlR1C1)

Address = "$C$3"
GetDirectory = "C:\Users\my.name\Desktop\"
GetFileName = "QOS DGL stuff.xlsx"
Sheet = "ACL"
于 2016-04-07T16:00:35.427 回答