2015-02-10 14 views
0

我想在基於訪問文件的Excel中運行查詢。我想要通過宏來做這件事的原因是不同文件的次數,我不得不這樣做。我試圖使用Inputbox來識別我想要使用的數據庫的名稱,但我不能得到它的工作,因爲我經常得到關於不匹配的錯誤。請幫忙嗎?這是我到目前爲止做出,如何使用InputBox的查詢結果作爲查詢的目錄?

Sub Macro1() 

    Dim myValue As Variant 

    Set myValue = Application.InputBox("Please type in the exact name of the source database") 

    With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array(Array(_ 
    "ODBC;DSN=MS Access Database;DBQ=ThisWorkbook.Path & " \ " & myValue.accdb;DefaultDir=ThisWorkbook.Path;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;" _ 
    )), Destination:=Range("$B$3")).QueryTable 
    .CommandText = Array(_ 
    "TRANSFORM Sum(Daily.RT_RENTAL_COUNT) AS SumOfRT_RENTAL_COUNT" & Chr(13) & "" & Chr(10) & "SELECT Daily.[Full CN_CR_PARENT_NAME]" & Chr(13) & "" & Chr(10) & "FROM Daily" & Chr(13) & "" & Chr(10) & "GROUP BY Daily.[Full CN_CR_PARENT_NAME]" & Chr(13) & "" & Chr(10) & "PIVOT Daily.RT_CKOT_LOC_ID;" & Chr(13) & "" & Chr(10) & "" _ 
    ) 
    .RowNumbers = False 
    .FillAdjacentFormulas = False 
    .PreserveFormatting = True 
    .RefreshOnFileOpen = False 
    .BackgroundQuery = True 
    .RefreshStyle = xlInsertDeleteCells 
    .SavePassword = False 
    .SaveData = True 
    .AdjustColumnWidth = True 
    .RefreshPeriod = 0 
    .PreserveColumnInfo = True 
    .ListObject.DisplayName = "Table_Query_from_MS_Access_Database" 
    .Refresh BackgroundQuery:=False 
    End With 
End Sub 

回答

0

而不是

 Set myValue = Application.InputBox("Please type in the exact name of the source database") 

  myValue = Application.InputBox("Please type in the exact name of the source database") 

的InputBox返回一個字符串,而不是一個對象,所以你不能用 「套」一個字符串。

+0

感謝您的回覆!我試過,但我得到一個不匹配的錯誤'13' – nmihel 2015-02-10 12:39:11

0

我終於明白了。問題在於我試圖將輸入框的結果鏈接到文件目錄!這是如何工作的。它可能會幫助其他人:)

With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array(Array(_ 
    "ODBC;DSN=MS Access Database;DBQ=" & myValue & "; DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;")), Destination:=Range("$B$3")).QueryTable 
    .CommandText = Array(_ 
    "TRANSFORM Sum(Daily.RT_RENTAL_COUNT) AS SumOfRT_RENTAL_COUNT" & Chr(13) & "" & Chr(10) & "SELECT Daily.[Full CN_CR_PARENT_NAME]" & Chr(13) & "" & Chr(10) & "FROM Daily" & Chr(13) & "" & Chr(10) & "GROUP BY Daily.[Full CN_CR_PARENT_NAME]" & Chr(13) & "" & Chr(10) & "PIVOT Daily.RT_CKOT_LOC_ID;" & Chr(13) & "" & Chr(10) & "" _ 
    )