ExecuteExcel4Macro для получения значения из закрытой книги - PullRequest
12 голосов
/ 13 февраля 2012

Я нашел этот фрагмент кода и подумал, что было бы неплохо использовать его, если мне просто нужно извлечь одно значение из закрытого листа.

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 ]

24 голосов
/ 13 февраля 2012

Зависит от того, как вы его используете.Открывается диалоговое окно открытия файла, потому что у «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
4 голосов
/ 17 декабря 2014

Аналогичное приложение, но без жестко закодированных путей, как в приведенных выше примерах.Эта функция копирует значение из другой закрытой книги, аналогично функции = 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
0 голосов
/ 07 апреля 2016
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"
0 голосов
/ 17 октября 2013

код выше

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

myvalue = ExecuteExcel4Macro(strInfoCell)

Должен читать

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

myvalue = ExecuteExcel4Macro(strInfoCell)

Отсутствует "&"

Нет необходимости в функции

Приветствие Neil

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...