返回列表 上一主題 發帖

[發問] 如何將Worksheet_Change的變數宣告,改成在一般模組使用?

本帖最後由 jackson7015 於 2014-5-8 09:09 編輯

回復 10# GBKEE
感謝GBKEE版大的幫忙
可以正常運作了

自己所需要的部分是下面的那些程式碼,刪除了些不需要的部分
vb的程式碼都不會編寫,都只會一些簡單的一般區編寫
感謝版大的無心付出

想再請問版大MsgBox的問題
如果我想在下列的程式碼中插入一則"查詢中"的MsgBox,但是會在搜尋結束後,MsgBox視窗會自動消除
那種MsgBox語法該怎麼編寫 ?

查詢了站上資料,找不太到MsgBox自動結束的相關資料
  1. Sub 查詢資料()
  2.     Dim F As Range, AD As String, Rng As Range, xRng As Range
  3.     Set xRng = Sheets("查詢用表單").[A5]
  4.     With Sheets("綜合資料庫").UsedRange
  5.         Set F = .Find(xRng, LOOKAT:=xlPart)
  6.         If Not F Is Nothing Then AD = F.Address
  7.         Do While Not F Is Nothing
  8.             If Rng Is Nothing Then
  9.                 Set Rng = .Rows(F.Row)
  10.             Else
  11.                 Set Rng = Union(Rng, .Rows(F.Row))
  12.             End If
  13.             Set F = .FindNext(F)
  14.             If F.Address = AD Then Exit Do
  15.         Loop
  16.     End With
  17.     If Not Rng Is Nothing Then
  18.         Rng.Copy xRng.Offset(, 1)
  19.         MsgBox "查詢結束"
  20.     Else
  21.         xRng.Offset(, 1).Resize(, 50) = ""
  22.     End If
  23. End Sub
複製代碼

TOP

回復 11# jackson7015
  1. Sub MsgBox_Wait()
  2. Dim WshShell, BtnCode
  3. Set WshShell = CreateObject("WScript.Shell")
  4. BtnCode = WshShell.popup("等待2秒不按我就自動關閉?", 2, "測試:", 4 + 16)
  5. Select Case BtnCode
  6.    Case 6
  7.    BtnCode = "你按了""是""." 'MsgBox "你按了""是""."
  8.    Case 7
  9.    BtnCode = "你按了""否""." 'MsgBox "你按了""否""."
  10.    Case -1
  11.    BtnCode = "沒有按任何鍵"
  12. End Select
  13. BtnCode = WshShell.popup(BtnCode, 2, "測試完畢", 1)
  14. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 12# GBKEE
感謝GBKEE版大

此程式碼是給它設定秒數,就會再指定時間內 Aoto Close

不過我想詢問的是
開始執行程式碼的時候會出現MsgBox ,然後程式碼執行結束後MsgBox 也跟著消失

以這篇的10樓程式碼為例:
執行程式碼>出現MsgBox "查詢中">查詢結束後>MsgBox 消失
這問題和主題沒有一致,我想還是另開個主題比較合適?

在此由衷的感謝GBKEE版大無私的教導

TOP

這問題和主題沒有一致,我想還是另開個主題比較合適?
回復 13# jackson7015
無須另開個主題,可繼續下去

試試看 Ex.rar (520.17 KB)
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 14# GBKEE
感謝GBKEE版大的回應

程式執行起來更有系統,也更美觀了
想請問版大
因為有時候搜尋件數會有達到數十件,甚至百件
而大略看了您的編寫,每次會延遲1秒做迴圈
這樣會有很長時間在等待迴圈的運算

是否有直接以MsgBox顯示"搜尋中"
然後搜尋結束後MsgBox框架就會自動消失的編寫方式 ?(不是延遲秒數)

非常感謝GBKEE版大還特別寫了TextBox的程式

TOP

回復 15# jackson7015
參考這裡
  1. Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
  2. Sub 查詢資料()
  3.     UserForm1.Show
  4. End Sub
複製代碼
  1. Private Sub UserForm_Activate()
  2.     Dim F As Range, AD As String, Rng As Range, i
  3.     xRng.CurrentRegion.Offset(1, 1) = ""
  4.     Application.Wait Time + #12:00:01 AM#
  5.     With Sheets("綜合資料庫").UsedRange
  6.         Set F = .Find(xRng, LOOKAT:=xlPart)
  7.         If Not F Is Nothing Then AD = F.Address
  8.         Do While Not F Is Nothing
  9.             i = i + 1
  10.             Label1.Caption = xRng & vbTab & "查到 " & i & " 筆"
  11.             DoEvents
  12.             Sleep 100   '改用暫停0.1秒
  13.            ' Application.Wait Time + #12:00:01 AM#
  14.             If Rng Is Nothing Then
  15.                 Set Rng = .Rows(F.Row)
  16.             Else
  17.                 Set Rng = Union(Rng, .Rows(F.Row))
  18.             End If
  19.             Set F = .FindNext(F)
  20.             If F.Address = AD Then Exit Do
  21.         Loop
  22.     End With
  23.     If Not Rng Is Nothing Then
  24.         Rng.Copy xRng.Offset(, 1)
  25.     Else
  26.         Label1.Caption = xRng & vbTab & "查無資料"
  27.         DoEvents
  28.         Sleep 100
  29.         'Application.Wait Time + #12:00:01 AM#
  30.     End If
  31.     Unload Me
  32. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 16# GBKEE
感謝GBKEE版大的回覆

原來停留的秒數是程式原本的設定啊,還以為是Application.Wait Time 的關係,想說這編碼好像不能寫小於1秒

這篇討論獲益良多
使用到的相關編碼還有很多不明白的,再慢慢地消化
由衷感謝GBKEE大大的付出,謝謝~

TOP

        靜思自在 : 盡多少本份,就得多少本事。
返回列表 上一主題