2013-04-17 81 views
2

我正在用一個名爲「Go」的按鈕構建一個表單,以從Excel文件中導入特定Excel表格的特定範圍。另一個子/函數負責在名爲text_filepathdata的字段中創建表單上的文件名。MS Access VBA acImport工作表名稱空格和範圍

我發現表格名稱中的空格有問題,但可以通過使用特殊引號來解決。 。

Dim sheetname As String 
sheetname = "'Commit Volumes!'" 
DoCmd.Transferspreadsheet acImport, acSpreadsheetTypeExcel12, _ 
    "lcl_ImportedFile", text_filepathdata, True, sheetname 

這一工程,但我不能在除指定範圍內工作表名稱,因爲特殊的報價...(即「‘提交卷A6:Z5000’」不工作,同樣沒有兩片像「‘提交卷’」 &的串聯「A6:Z5000」)

我試過報價和級聯的所有方式,但這項工作是唯一的東西:

sheetname = "'Commit Volumes!'" 
sheetname = "'Commit Volumes$'" 
sheetname = "CommitVolumes!A6:Z5000" 

Excel工作表無法修改,因爲它來自另一個系統和文件(尾部呃被更新)必須上傳回該系統。

這裏是我的代碼:

Private Sub button_Go_Click() 
On Error GoTo Err_button_Go_Click 

Dim sheetname As String 
sheetname = "'Commit Volumes!'" 

If IsNull(text_filepathdata) Or text_filepathdata = "" Then 
    MsgBox "Please browse and select a valid file to import.", _ 
     vbCritical, "Invalid File" 
Else 
    DoCmd.OpenForm "f_PleaseWait_Processing", acNormal, , , acFormReadOnly, acWindowNormal 
    If ifTableExists("lcl_ImportedFile") = True Then 
     DoCmd.DeleteObject acTable, "lcl_ImportedFile" 
    End If 
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12,_ 
     "lcl_ImportedFile", text_filepathdata, True, sheetname 

'Call module to process the imported data 
     Call MainProcess 
    End If 

Exit_button_Go_Click: 
    Exit Sub 

Err_button_Go_Click: 
    MsgBox Err.Number & " - " & Err.Description 
    Resume Exit_button_Go_Click 

End Sub 

我得到兩個不同的錯誤信息取決於問題。

如果我得到的名稱中有空格:運行時錯誤3129:無效的SQL語句;預期'DELETE','INSERT','PROCEDURE','SELECT'或'UPDATE'。

如果名稱存在問題,則我得到:運行時錯誤3011:Microsoft Access數據庫引擎找不到對象「提交卷$ A1:Z5000」。確保對象存在,並且正確拼寫其名稱和路徑。如果「提交卷$ A1:Z5000」不是本地對象,請檢查您的網絡連接或聯繫服務器管理員。

任何幫助將不勝感激!

比爾

變化我已經試過:

sheetname = "'Commit Volumes'!A6:Z5000"; 
sheetname = "'Commit Volumes!'A6:Z5000" 
sheetname = "'Commit Volumes$'A6:Z5000" 
sheetname = "'Commit Volumes'$A6:Z5000" 
sheetname = "'Commit Volumes'$A$6:$Z$5000" 
sheetname = "'Commit Volumes!'$A$6:$Z$5000" 
sheetname = "'Commit Volumes$'$A$6:$Z$5000" 

回答

0

這是你所需要的:

'Commit Volumes'!A6:Z5000

當存在用空格或破折號表名稱,擅長的地方圍繞工作表名稱本身的單引號,而不是圍繞整個參考。

所以:

sheetname = "'Commit Volumes'!A6:Z5000" 
+0

嗨斯科特!我嘗試了你建議的代碼...我仍然收到相同的錯誤消息。該錯誤消息沒有返回我在代碼中鍵入的內容,但是... message說:Microsoft Access數據庫引擎找不到對象「Commit Volumes'$ A6:AQ5000'。確保...等等。對象是「'Commit Volumes'!'A6:AQ5000」就像我在代碼中一樣。奇怪,呃?它必須解釋我把代碼放在不同的地方?或者別的什麼? –

+0

一位程序員剛剛建議嘗試像這樣的多個變量: '昏暗SHEETNAME作爲字符串 暗淡cellrange作爲字符串 暗淡sheetrange作爲字符串 SHEETNAME = 「 '!提交卷'」 cellrange = 「A6:Z5000」 sheetrange = SHEETNAME&cellrange' 似乎很有希望,但沒有然而,工作。:( 原諒我,但我不能戈t代碼出現在多行上。 –

+0

在黑暗中拍攝,但如果您在表格名稱周圍嘗試使用括號'[]'而不是''' –

1

如果該文件會從其他系統中已知\設定的格式輸出,你可以參考它的索引,而不是按名稱:

例如:張( 1),片(2)。然後添加範圍。

0

使用SHEETNAME =「提交卷$」沒有範圍,這似乎通過匹配與Excel列標題

0

我有同樣的問題表的字段名的工作。

終於讓我找到你可以使用:

SHEETNAME = 「提交卷A6:Z5000」 例如 DoCmd.TransferSpreadsheet acImport,acSpreadsheetTypeExcel9, 「表名」,_ filetoimport,假,「提交卷!A6:Z5000"

商祺!

0

我嘗試了上面提出的解決方案,並遺憾的是它並沒有我的情況下工作:實際上訪問的導入方法不喜歡它,當工作表的名稱中的空格。

我做了一個解決辦法:重命名代碼中的工作表的東西短且沒有空格,如:從「數據Q1 2016」到「WS1」。通過這種方式,您可以將值「WS1 $」傳遞給導入函數的Range參數,並且Access將導入給定工作表的使用範圍。

導入第二個工作表時,我再次使用該代碼並將其重命名它到「WS2」......等等。

總結:重命名過程中的代碼運行時短名的工作表沒有空格,並在末尾添加「$」符號,使其搶使用範圍。