EseguiExcel4Macro per ottenere valore dalla cartella di lavoro chiusa

OK ho trovato questo pezzetto di codice e ho pensato che potrebbe essere utile, se ho solo bisogno di tirare un valore da un foglio chiuso.

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

No quando eseguo questo codice ottengo un valore per strinfocell di

: strInfoCell: “‘C: \ Users \ my.name \ Desktop [QOS DGL stuff.xlsx] Sheet1’! R3C3”: String

Ma quando eseguo il codice, appare il dialogo di apertura del file, che mostra i file desktop con “QOS DGL suff” mostrato.

Che cosa sta causando questo, perché non sta semplicemente tirando indietro i dati come previsto? So che il percorso e il nome del file sono corretti, casta se li copio dall’output di debug e li incollo per avviare >> Esegui quindi il foglio corretto si apre

E so che sheet1 (chiamato: ACL), ha un valore in cella (3,3)

Saluti

Aaron

Dipende da come lo si usa. La finestra di dialogo del file aperto ti viene mostrata perché “strPath” non ha una “\” alla fine;)

Prova questo codice. Funziona

Provato e testato

 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 

Codice sopra

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

Dovresti leggere

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

Manca “&”

Non c’è bisogno di una funzione

Saluti Neil

Applicazione simile, ma senza percorsi hard codificati come negli esempi sopra. Questa funzione copia il valore da un’altra cartella di lavoro chiusa, simile alla funzione = INDIRECT (), ma non altrettanto sofisticata. Questo restituisce solo il valore … non un riferimento … quindi non può essere utilizzato con ulteriori funzioni che richiedono riferimenti (es .: VLOOKUP ()). Incolla questo codice in un nuovo modulo 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 (eg 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 
 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"