13
votes

I found this bit of code and thought it might be good to use if I just need to pull one value from a closed sheet.

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

When I run this code I get a value for strinfocell of

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

But when I run the code a dialogue pops up, showing desktop files with "QOS DGL suff" showing.

What's causing this, why is it not just pulling back the data as expected?

I know the path and file name are right, because if I copy them from the debug output and paste them in to start>>run then the correct sheet opens.

I know that Sheet1 (named: ACL), does have a value in cells(3,3)

4
What is ExecuteExcel4Macro supposed to do? Apparently it is only a function used to run Excel 4.0 macros. - Cutter
So yes it should execute strinfocell as a macro. which in turn should return the value of the cell C3 in the work book "QOS DGL Stuff" in the supplied folder. - DevilWAH
what is type of myvalue ? - Stiger

4 Answers

27
votes

It depends on how you use it. The open file dialog box is being showed to you because the "strPath" doesn't have a "\" in the end ;)

Try this code. It works

Tried and Tested

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
4
votes

Similar application, but no hard coded paths as in the examples above. This function copies the value from another closed workbook, similar to the =INDIRECT() function, but not as sophisticated. This only returns the value...not a reference..so it cannot be used with further functions which require references (i.e.: VLOOKUP()). Paste this code into a new VBA module:

'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
-1
votes

Code above

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

myvalue = ExecuteExcel4Macro(strInfoCell)

Should read

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

myvalue = ExecuteExcel4Macro(strInfoCell)

It is missing " & "

No need for a function

Cheers Neil

-2
votes
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"