![]() |
||
|
*停權中*
加入日期: Dec 2010
文章: 341
|
用Excel巨集VBA的部分要撈資料
可是錄出來的VBA只要稍微改動 就無法執行 本來是 ________________ Workbooks.Add Sheets.Add Sheets("Sheet1").Name = "GBTR001" Sheets("Sheet2").Name = "GBTR002" Sheets("Sheet3").Name = "GBTR003" Sheets("Sheet4").Name = "GBTR004" With ActiveSheet.QueryTables.Add(Connection:= _ "ODBC;DSN=Excel Files;DBQ=C:\HF\POCN.xls;DefaultDir=C:\HF;DriverId=790;MaxBufferSize=2048;PageTimeout=5;" _ , Destination:=Sheets("GBTR04").Range("A1")) .CommandText = Array( _ "SELECT `Sheet1$`.GLASS_ID, `GBTR04$`.TRANSDT, `GBTR04$`.`ETCH BATH NO#_EDC`, `GBTR04$`.PFCD, `GBTR04$`.EQP_ID, `Sheet1$`.GlassThick_001, `Sheet1$`.GlassThick_002, `Sheet1$`.GlassThick_003, `Sheet1$`.G" _ , _ "lassThick_004, `Sheet1$`.GlassThick_005, `Sheet1$`.GlassThick_006, `Sheet1$`.GlassThick_007, `Sheet1$`.GlassThick_008, `Sheet1$`.GlassThick_009" & Chr(13) & "" & Chr(10) & "FROM `C:\HF\GBTR04`.`GBTR04$` `GBTR04$`, `C:\HF\POCN`.`" _ , "Sheet1$` `Sheet1$`" & Chr(13) & "" & Chr(10) & "WHERE `GBTR04$`.GLASS_ID = `Sheet1$`.GLASS_ID") .Name = "來自 Excel Files 的查詢" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .PreserveColumnInfo = True .Refresh BackgroundQuery:=False End With ___________________________________ 只是稍微修改 將GBTR04改成GBTR03 就會顯示 "陣列索引超出範圍" or "查詢的表單不存在" 請問是哪邊需要修正 謝謝 |
|||||||
|
|
|
*停權中*
加入日期: Jan 2008
文章: 3
|
一 建議是買一本書來學比較好
不要全都用錄的 要有變數的觀念 雖然目前能用 但是以後 會是你學習的瓶頸 二 產生工作表的部分 命名你的工作表 撈資料 分成三部份寫比較好 這樣 你以後要增加其他功能時 會比較方便 Public k As Integer -------------------------------------------- Sub worksheets_pro() '工作表指令1 On Error GoTo errhandler Application.ScreenUpdating = False Do Until Worksheets.Count = 4 k = Worksheets.Count Worksheets.add after:=Worksheets(k) Loop Call worksheets_sd errhandler: MsgBox "工作表指令1未完成" End Sub --------------------------------------------- Sub worksheets_sd() '工作表指令2 On Error GoTo errhandler Dim wn1 As String, wn2 As String, wn3 As String, wn4 As String wn1 = "GBTR001": wn2 = "GBTR002": wn3 = "GBTR003": wn4 = "GBTR004" With Worksheets(1) .Name = wn1 .Tab.Color = RGB(220, 20, 60) End With With Worksheets(2) .Name = wn2 .Tab.Color = Worksheets(1).Tab.Color End With With Worksheets(3) .Name = wn3 .Tab.Color = Worksheets(1).Tab.Color End With With Worksheets(4) .Name = wn4 .Tab.Color = Worksheets(1).Tab.Color End With call 我撈 errhandler: MsgBox "工作表指令2未完成" End Sub -------------------------------------------------- Sub 我撈() '工作表指令3 On Error GoTo errhandler Application.ScreenUpdating = False With Worksheets(GBTR004") .Select <<<這裡寫下你要撈資料的語法>>> Call 下一個動作 End With Exit Sub errhandler: MsgBox "連線中斷" MsgBox "'工作表指令3未完成" End Sub |
||
|
|
|
*停權中*
加入日期: Dec 2010
文章: 341
|
引用:
請問有推薦哪本書嗎? 這邊的疑惑點在於 從錯誤訊息真錯上我自己推論 是以下這部份有問題 __________ With ActiveSheet.QueryTables.Add(Connection:= _ "ODBC;DSN=Excel Files;DBQ=C:\HF\POCN.xls;DefaultDir=C:\HF;DriverId=790;MaxBufferSize=2048;PageTimeout=5;" _ , Destination:=Sheets("GBTR04").Range("A1")) __________ 好像是 1. 分段行符號的問題 2.查詢範圍出錯的問題 錯誤訊息如圖 ![]() ![]() 詭異的地方在於 1.單一次項目巨集執行是可以的 2.修改巨集部分有時候可以有時候不行 3.將兩次錄製的巨集合併執行確定不行 有想過使用變數方式使用LOOP執行 但是根據網路資料 連接資料庫的VBA使用變數也會有問題 http://tinyw.in/mnuU 謝謝 |
|
|
|
|
*停權中*
加入日期: Jan 2008
文章: 3
|
http://tw.page.bid.yahoo.com/tw/auction/e45386505
Excel VBA 功能索引式參考手冊 這本速查滿好用的 但如果自修 最好還是準備一本vb6的書 建議是a功能 b功能 c功能分開做 用"call" 去呼叫 你需要的程式 因為等你學到表單 如果你都做在同一個sub 而你只需要當中的某一項功能 卻每次都要從頭跑到完 這樣沒效益 還有 語法不難 如果是當資料庫用 未來 你會需要紙 筆 先做出模型 |
|
|
|
Major Member
![]() 加入日期: Mar 2007
文章: 131
|
這本不錯 新Excel VBA與Office其他程式整合實務講座
有很多範例可以套用 |
|
|
|
*停權中*
加入日期: Sep 2004 您的住址: 台北
文章: 8
|
所有的工作表可視為一個陣列,
當你試圖存取一個不存在的工作表時, 會出現這個訊息 到底是GBTR004還是GBTR04 ? 如果你是要用SQL語法去query另一個充當database的Excel檔案, 參考這篇文章 自己寫VBA比較好 不然PM給我, 我直接送你一個給你, 可在sheet定義多個SQL job, 支援ODBC, SQLite, Access, CSV, Excel, Dbase 此文章於 2011-12-28 11:42 PM 被 sazabijiang 編輯. |
|
|
|
*停權中*
加入日期: Dec 2010
文章: 341
|
引用:
這剛好是我命名的問題 剛好把 資料庫來源檔案 叫做 GBTR04.xls GBTR03.xls GBTR02.xls GBTR01.xls 裡面各只有一個Sheet叫做GBTR04 GBTR03 GBTR02 GBTR01 參照後產生的Book1.xls內的4個Sheet分別命名為 GBTR004 GBTR003 GBTR02 GBTR01 會是這樣產生判別錯誤嗎 謝謝 |
|
|
|
|
*停權中*
加入日期: Dec 2010
文章: 341
|
引用:
多謝sazabijiang兄的提醒 最後發現因為使用 ActiveWorkbook.Worksheets.Add增加一個新XLS 該XLS是在暫存區開始 因此造成後續表單查詢時沒有抓取到正確檔案位置 改成指定絕對位置檔案後 就整個解決 |
|
|
|