我找到了这段代码,并认为如果我只需要从封闭的表中提取一个值,那么使用它可能会很好。
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)
答案 0 :(得分:24)
这取决于你如何使用它。正在显示打开文件对话框,因为“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
答案 1 :(得分:4)
类似的应用程序,但没有上面示例中的硬编码路径。此函数从另一个已关闭的工作簿复制值,类似于= 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
答案 2 :(得分:0)
以上代码
strInfoCell = "'" & strPath & "[" & strFile & "]Sheet1'!R3C3"
myvalue = ExecuteExcel4Macro(strInfoCell)
应该阅读
strInfoCell = "'" & strPath & "[" & strFile & "]" & "Sheet1'!R3C3"
myvalue = ExecuteExcel4Macro(strInfoCell)
缺少“&”
不需要功能
干杯 尼尔
答案 3 :(得分:-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"