2012-02-13 23 views
9

OK Tôi tìm thấy mã bit này và nghĩ rằng nó có thể là tốt để sử dụng, nếu tôi chỉ cần kéo một giá trị từ một trang tính đã đóng.ExecuteExcel4Macro để lấy giá trị từ sổ làm việc khép kín

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

Không khi tôi chạy mã này tôi nhận được một giá trị cho strinfocell của

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

Nhưng khi tôi chạy mã, hộp thoại mở tệp sẽ bật lên, hiển thị tệp trên máy tính có hiển thị" QOS DGL suff ".

Điều gì gây ra điều này, tại sao nó không chỉ kéo dữ liệu như mong đợi? Tôi biết đường dẫn và tên tệp là đúng, casue nếu tôi sao chép chúng từ đầu ra gỡ lỗi và dán chúng vào để bắt đầu >> chạy sau đó bảng chính xác mở ra

Và tôi biết sheet1 (tên: ACL), có một giá trị trong tế bào (3,3)

Cheers

Aaron

+0

ExecuteExcel4Macro được phải làm gì? Rõ ràng nó chỉ là một chức năng được sử dụng để chạy các macro Excel 4.0. – Cutter

+0

Vì vậy, có nó nên thực thi strinfocell như là một vĩ mô. do đó sẽ trả về giá trị của ô C3 trong sổ làm việc "QOS DGL Stuff" trong thư mục được cung cấp. – DevilWAH

+0

loại myvalue là gì? – Stiger

Trả lời

20

nó phụ thuộc vào cách bạn sử dụng nó. Hộp thoại mở tệp đang được hiển thị cho bạn vì "strPath" không có dấu "\" ở cuối;)

Hãy thử mã này. Nó hoạt động

thử và thử nghiệm

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

Thực sự, Đã có hai điều sai, thiếu "/" và tên bảng tính sai !! Chúc mừng – DevilWAH

+0

+1 xe bán tải tốt Sid – brettdj

0

Mã trên

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

myvalue = ExecuteExcel4Macro(strInfoCell) 

nên đọc

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

myvalue = ExecuteExcel4Macro(strInfoCell) 

nó là mất tích "&"

0.123.

Không cần cho một hàm

Cheers Neil

0

ứng dụng tương tự, nhưng không cứng đường dẫn mã như trong ví dụ trên. Hàm này sao chép giá trị từ một sổ làm việc đã đóng khác, tương tự như hàm = INDIRECT(), nhưng không phải là phức tạp. Điều này chỉ trả về giá trị ... không phải là một tham chiếu .. do đó, nó không thể được sử dụng với các hàm khác yêu cầu tham chiếu (ví dụ: VLOOKUP()). Dán mã này vào một module VBA mới:

'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" 
Các vấn đề liên quan