2012-02-13 14 views
9

OK Encontré este fragmento de código y pensé que sería bueno usarlo, si solo necesito extraer un valor de una hoja cerrada.ExecuteExcel4Macro para obtener el valor del libro cerrado

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

n cuando corro el código me sale un valor para strinfocell de

: strInfoCell: " 'C: \ Users \ my.name \ Desktop [QOS DGL stuff.xlsx] Hoja1' R3C3! ": String

Pero cuando ejecuto el código aparece el cuadro de diálogo abrir archivo, que muestra los archivos de escritorio con" QOS DGL suff "que muestra.

¿Qué está causando esto? ¿Por qué no está simplemente retirando los datos como se esperaba? Sé que la ruta y el nombre de archivo son correctos, casue si los copio de la salida de depuración y los pego para iniciar >> ejecutar y luego se abre la hoja correcta

Y sé sheet1 (llamado: ACL), tiene un valor en la celda (3,3)

Saludos

Aaron

+0

Lo que se ExecuteExcel4Macro supone que debe hacer? Aparentemente solo es una función utilizada para ejecutar macros de Excel 4.0. – Cutter

+0

Entonces sí, debería ejecutar strinfocell como una macro. que a su vez debería devolver el valor de la celda C3 en el libro de trabajo "QOS DGL Stuff" en la carpeta suministrada. – DevilWAH

+0

¿qué es el tipo de myvalue? – Stiger

Respuesta

20

depende de cómo lo usa. El cuadro de diálogo de abrir archivo se le muestra porque "strPath" no tiene una "\" al final;) ​​

Pruebe este código. Funciona

de probada eficacia

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 
+0

De hecho, tenía dos cosas mal, faltaba el "/" y el nombre incorrecto del libro de trabajo !! Saludos – DevilWAH

+0

+1 buena recogida Sid – brettdj

0

Código anterior

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

myvalue = ExecuteExcel4Macro(strInfoCell) 

Debe decir

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

myvalue = ExecuteExcel4Macro(strInfoCell) 

que no se encuentra "&"

No hay necesidad de una función

Saludos Neil

0

aplicaciones similares, pero no duros caminos codificados como en los ejemplos anteriores. Esta función copia el valor de otro libro cerrado, similar a la función = INDIRECTO(), pero no tan sofisticado. Esto solo devuelve el valor ... no una referencia ... por lo que no se puede usar con otras funciones que requieren referencias (es decir, VLOOKUP()). Pega este código en un nuevo módulo de 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 
-1
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" 
Cuestiones relacionadas