Board logo

標題: 在EXCEL VBA中的MS SQL查詢語法,如何用輸入的方式產生? [打印本頁]

作者: badboy01    時間: 2012-12-7 14:34     標題: 在EXCEL VBA中的MS SQL查詢語法,如何用輸入的方式產生?

我的EXCEL VBA 中有一段查詢MS SQL語法 (............where ApplyDateTime Between '20120101' and '20121231' and Excuse='特休假'...........),該如何將日期與假別的部分用VBA文字方塊方式輸入日期範圍和假別可查詢出我要的結果?謝謝!
PS:因為在VBA中可以執行SQL語法,查詢資料,所以我想要這段SQL語法在VBA中可以用變數方式去查詢。
作者: stillfish00    時間: 2012-12-7 15:09

回復 1# badboy01
因為沒給前後的程式碼 , 假設你這段為字串..........
"......where ApplyDateTime Between '20120101' and '20121231' and Excuse='特休假'......"

'宣告字串變數
Dim sStartDate as string , sEndDate as string
sStartDate = "20120101"
sEndDate = "20121231"
'上面的那段字串改為
"......where ApplyDateTime Between '" & sStartDate & "' and '" & sEndDate & "' and Excuse='特休假'......"
作者: badboy01    時間: 2012-12-7 15:38

回復 2# stillfish00
非常感謝大大,我按照大大的方式程式碼改了,但是我想要任意輸入日期範圍該怎麼改呢?我設計兩個輸入文字方塊日期起點TextBox1和日期結束 TextBox2,
我目前VBA語法是將MS SQL查詢資料讀取到EXCEL sheet上,如果按照大大方式是可以讀取,但是我加入TextBox1,TextBox2就有問題了。
-----------------------------------------------------------------------------------------------------------------------------------------------------
Sub 按鈕2_Click()  '定義過程名稱
    Dim i As Integer, j As Integer, sht As Worksheet 'i,j為整數變數;sht 為excel工作表物件變數,指向某一工作表
    Set cn = New ADODB.Connection '定義資料連結物件 ,保存連接資料庫資訊;請先引用ADO
    Dim rs As New ADODB.Recordset  '定義記錄物件
    Dim strCn As String, strSQL As String  '字符串變量
    Dim sStartDate As String, sEndDate As String '字符串變量
    sStartDate = "20120101"  <====我改成sStartDate = "TextBox1"
    sEndDate = "20121231"    <====我改成sEndDate = "TextBox2" 會有錯誤訊息(從字元字串轉換到datetime時轉換失敗)


    strCn = ("driver={SQL Server};server=10.0.X.X;uid=XX;pwd=XXXXXXXX;database=XXXX_XXXX;")    '定義資料庫連結字串

    strSQL = "SELECT ApplyerDeptName,ApplyName,HR10day,sum(HRdays)as UsedDay,(HR10day-sum(HRdays))as UnusedDay FROM  afu_form_HR10 inner join TEST on afu_form_HR10.ApplyName=TEST.HR10name where ApplyDateTime Between '" & sStartDate & " 'AND' " & sEndDate & "' and Excuse='特休假' group by ApplyerDeptName,ApplyName,HR10day"
   
    cn.Open strCn   '與資料庫建立連接,如果成功,返回連線物件cn
  
    rs.Open strSQL, cn  '執行strSQL所含的SQL命令,結果保存在rs記錄集物件中
    i = 2
    Set sht = ThisWorkbook.Worksheets("sheet1")   '把sht指向當前工作簿的sheet1工作表
    Do While Not rs.EOF   
    sht.Cells(i, 1) = rs("ApplyerDeptName")   
    sht.Cells(i, 2) = rs("ApplyName")  
    sht.Cells(i, 3) = rs("HR10day")   
    sht.Cells(i, 4) = rs("UsedDay")
    sht.Cells(i, 5) = rs("UnusedDay")
    rs.MoveNext                 
    i = i + 1                    
    Loop
    rs.Close
    End Sub
----------------------------------------------------------------------------------------------------------------------------------------------------
作者: stillfish00    時間: 2012-12-7 16:31

回復 3# badboy01
sStartDate =TextBox1.Text
sEndDate =TextBox2.Text
作者: c_c_lai    時間: 2012-12-7 16:40

本帖最後由 c_c_lai 於 2012-12-7 16:42 編輯

回復 3# badboy01
  1. where ApplyDateTime Between '" & Format(TextBox1.Text, "yyyymmdd") & "' AND '" & Format(TextBox2.Text, "yyyymmdd") & "' and Excuse='特休假'
複製代碼

作者: badboy01    時間: 2012-12-7 16:55

回復  badboy01
sStartDate =TextBox1.Text
sEndDate =TextBox2.Text
stillfish00 發表於 2012-12-7 16:31


我大概發現問題在哪裡了。我都是用模組方式來設計,我是直接在EXCEL上設計文字方塊,所以一直有錯誤,但是我插入表單在按照大大的方式就成功了,只是如果我在EXCEL sheet 上就有問題~~找不出原因= =",不過還是感謝大大,終於搞定了,感恩!
作者: badboy01    時間: 2012-12-7 17:10

回復 5# c_c_lai


    我按照大大方式好像不行(模組方式),不過還是謝謝提供方法。
作者: stillfish00    時間: 2012-12-7 17:27

本帖最後由 stillfish00 於 2012-12-7 17:28 編輯

回復 6# badboy01
OK , 所以你是程式寫在模組內 ,
假設你是直接在工作表1 (工作表名稱) ,  插入ActiveX的文字方塊
這樣的話你的Textbox1要指定是哪個工作表 ,
也就是把原本的 Textbox1.Text 改寫成  sheets("工作表1").Textbox1.Text
Textbox2同理
作者: badboy01    時間: 2012-12-7 18:08

回復 8# stillfish00

感謝~~大大成功了~之前搞好久都搞不定,模組也可以用了~~感恩^____^
作者: badboy01    時間: 2012-12-7 18:13

回復 8# stillfish00

另請教大大,我在EXCEL sheet中設計的按鈕要怎麼鎖定無法按右鍵去編輯巨集的原始碼?謝謝!(正常下一般滑鼠右鍵可以選擇指定巨集)
作者: stillfish00    時間: 2012-12-7 19:02

回復 10# badboy01
這方面我也不太熟 , 精華區內有一些保護工作表或程式碼的討論也許你能參考看看
作者: badboy01    時間: 2012-12-7 22:12

本帖最後由 badboy01 於 2012-12-7 22:13 編輯
回復  stillfish00

另請教大大,我在EXCEL sheet中設計的按鈕要怎麼鎖定無法按右鍵去編輯巨集的原始碼? ...
badboy01 發表於 2012-12-7 18:13


我試出來了,設定保護共用活頁簿,感謝大大!




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)