PCDVD數位科技討論區
PCDVD數位科技討論區   註冊 常見問題 標記討論區為已讀

回到   PCDVD數位科技討論區 > 其他群組 > 七嘴八舌異言堂
帳戶
密碼
 

回應
 
主題工具
公不
*停權中*
 

加入日期: Dec 2010
文章: 341
Question EXCEL的VBA語法問題

用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 "查詢的表單不存在"

請問是哪邊需要修正

謝謝
     
      
舊 2011-12-28, 08:50 PM #1
回應時引用此文章
公不離線中  
titan200711
*停權中*
 

加入日期: 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
 
舊 2011-12-28, 10:05 PM #2
回應時引用此文章
titan200711離線中  
公不
*停權中*
 

加入日期: Dec 2010
文章: 341
Question

引用:
作者titan200711
一 建議是買一本書來學比較好
...

請問有推薦哪本書嗎?

這邊的疑惑點在於

從錯誤訊息真錯上我自己推論

是以下這部份有問題

__________
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

謝謝
舊 2011-12-28, 10:28 PM #3
回應時引用此文章
公不離線中  
titan200711
*停權中*
 

加入日期: Jan 2008
文章: 3
http://tw.page.bid.yahoo.com/tw/auction/e45386505
Excel VBA 功能索引式參考手冊
這本速查滿好用的
但如果自修 最好還是準備一本vb6的書

建議是a功能 b功能 c功能分開做
用"call" 去呼叫 你需要的程式

因為等你學到表單 如果你都做在同一個sub
而你只需要當中的某一項功能 卻每次都要從頭跑到完
這樣沒效益

還有 語法不難
如果是當資料庫用
未來 你會需要紙 筆 先做出模型
舊 2011-12-28, 11:07 PM #4
回應時引用此文章
titan200711離線中  
absociate
Major Member
 

加入日期: Mar 2007
文章: 131
這本不錯 新Excel VBA與Office其他程式整合實務講座
有很多範例可以套用
舊 2011-12-28, 11:22 PM #5
回應時引用此文章
absociate離線中  
sazabijiang
*停權中*
 

加入日期: 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 編輯.
舊 2011-12-28, 11:39 PM #6
回應時引用此文章
sazabijiang離線中  
公不
*停權中*
 

加入日期: Dec 2010
文章: 341
Question

引用:
作者sazabijiang
所有的工作表可視為一個陣列,
當你試圖存取一個不存在的工作表時, 會出現這個訊息

到底是GBTR004還是GBTR04 ?

這剛好是我命名的問題

剛好把 資料庫來源檔案 叫做 GBTR04.xls GBTR03.xls GBTR02.xls GBTR01.xls

裡面各只有一個Sheet叫做GBTR04 GBTR03 GBTR02 GBTR01

參照後產生的Book1.xls內的4個Sheet分別命名為

GBTR004 GBTR003 GBTR02 GBTR01

會是這樣產生判別錯誤嗎


謝謝
舊 2011-12-28, 11:58 PM #7
回應時引用此文章
公不離線中  
公不
*停權中*
 

加入日期: Dec 2010
文章: 341
引用:
作者sazabijiang
所有的工作表可視為一個陣列,
當你試圖存取一個不存在的工作表時, 會出現這個訊息
......

多謝sazabijiang兄的提醒

最後發現因為使用 ActiveWorkbook.Worksheets.Add增加一個新XLS

該XLS是在暫存區開始

因此造成後續表單查詢時沒有抓取到正確檔案位置

改成指定絕對位置檔案後

就整個解決
舊 2011-12-29, 07:08 PM #8
回應時引用此文章
公不離線中  


回應


POPIN
主題工具

發表文章規則
不可以發起新主題
不可以回應主題
不可以上傳附加檔案
不可以編輯您的文章

vB 代碼打開
[IMG]代碼打開
HTML代碼關閉



所有的時間均為GMT +8。 現在的時間是06:53 PM.


vBulletin Version 3.0.1
powered_by_vbulletin 2025。