返回列表 上一主題 發帖

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

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

本帖最後由 jackson7015 於 2014-4-29 09:12 編輯

請問各位前輩
如何將下面Worksheet中的變數宣告,改成在模組的一般巨集就好了?

因為做了其他巨集要使用
但是只要有更動到Worksheet的單格儲存格,就會啟動此宣告

想請教前輩們,如何將以下變數宣告,改成一般模組的巨集使用且只作用在[a5]儲存格就好了
感謝不吝指教~
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. Dim A As Range, Rng As Range
  3. If Target.Column = 1 Then
  4. With Sheets("綜合資料庫")
  5. For i = 1 To .UsedRange.Rows.Count
  6.    Set A = .UsedRange.Rows(i).Find(Target)
  7.    If Not A Is Nothing Then
  8.      If Rng Is Nothing Then
  9.      Set Rng = .UsedRange.Rows(i)
  10.      Else
  11.      Set Rng = Union(Rng, .UsedRange.Rows(i))
  12.      End If
  13.     End If
  14. Next
  15. End With
  16. End If
  17. Application.EnableEvents = False
  18.     If Not Rng Is Nothing Then
  19.     Rng.Copy: Target.Offset(, 1).PasteSpecial 3
  20.     Else
  21.     Target.Offset(, 1).Resize(, 50) = ""
  22.     End If
  23. Application.EnableEvents = True
  24.     MsgBox "查詢結束"
  25. End Sub
複製代碼

回復 1# jackson7015

SHEET1的Worksheet_Change 事件
  1. Run "SHEET1.Worksheet_Change", Sheet1.[A5]
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 2# GBKEE

GBKEE版大您好;
請問是否只新增一組此巨集將原本的變數宣告導入,然後再將您的宣告放到SHEET1(查詢用表單)的Worksheet_Change內?

但是我如此做會宣告錯誤
不曉得是哪個步驟錯誤了?

感謝GBKEE版大的回覆

TOP

回復 3# jackson7015
你不是要在其他的巨集中,執行這程式碼,來執行Sheet1(查詢用表單)的Worksheet_Change事件程式嗎?
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 4# GBKEE

GBKEE版大,對不起,沒有陳述清楚需要的部分

宣告在Worksheet_Change的部分,會下列的巨集啟動,儲存格只要一變動,就會自動啟動宣告部分
  1. Sub 清除查詢表格()
  2. ' 清除查詢表格 巨集
  3. With Sheets("查詢用表單")
  4.     Range("$B5:$BR301").Select
  5.     Selection.ClearContents
  6.     Range("A5").Select
  7.     End With
  8. End Sub
複製代碼
我想改成只用巨集手動去搜索,這樣才不會有儲存格有變動的時候,就啟動Worksheet_Change的部分
是否能將Worksheet_Change程式碼,改成在Module1模組的編程
自己研究了幾天,還是不會把在Worksheet_Change的編寫,改成在Module1模組中...

自己資質愚鈍,想麻煩GBKEE版大能否幫忙修正編寫
感謝不盡..

TOP

回復 5# jackson7015
是這樣嗎?
  1. Sub 清除查詢表格()
  2. ' 清除查詢表格 巨集
  3.     With Sheets("查詢用表單")
  4.         .Range("$B5:$BR301").ClearContents
  5.         .Range("A5").Select
  6.         Run "Module1.Worksheet_Change", .[A5]
  7.         '你已將 Worksheet_Change的編寫,改成在Module1模組
  8.     End With
  9. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 6# GBKEE

GBKEE版大,想再次麻煩一下
因為我的表達好像有問題..

我想直接將1樓的程式碼
不在Worksheet內編寫,而是編寫在Module

現在的問題是只要一改變儲存格[A5]的內容,就會自動執行1樓的程式碼
我想改成手動方式執行,手動執行 Sub 查詢表格() 巨集才會執行

不曉得這樣解,GBKEE版大是否比較好理解
感謝您再次的回覆

TOP

回復  GBKEE
附上檔案,再請GBKEE版大看看
參考資料庫.rar (992.52 KB)

TOP

回復 6# GBKEE

檔案已附上,再請GBKEE大大看看是否可行

今天研究了半天還是不會改...

TOP

回復 9# jackson7015
試試看
  1. '都是Module3上的程式碼
  2. Sub 查詢資料()
  3.    ' Worksheet_Change [A5]   '可以這樣做
  4.     Ex
  5. End Sub
  6. 'Sheets("查詢用表單")的Worksheet_Change事件,你是想搬移到Module3模組上
  7. Private Sub Worksheet_Change(ByVal Target As Range)
  8. Dim A As Range, Rng As Range
  9. If Target.Column = 1 Then
  10. With Sheets("綜合資料庫")
  11. For i = 1 To .UsedRange.Rows.Count
  12.    Set A = .UsedRange.Rows(i).Find(Target)
  13.    If Not A Is Nothing Then
  14.      If Rng Is Nothing Then
  15.      Set Rng = .UsedRange.Rows(i)
  16.      Else
  17.      Set Rng = Union(Rng, .UsedRange.Rows(i))
  18.      End If
  19.     End If
  20. Next
  21. End With
  22. End If
  23. Application.EnableEvents = False
  24.     If Not Rng Is Nothing Then
  25.     Rng.Copy: Target.Offset(, 1).PasteSpecial 3
  26.     Else
  27.     Target.Offset(, 1).Resize(, 50) = ""
  28.     End If
  29. Application.EnableEvents = True
  30.     MsgBox "查詢結束"
  31. End Sub
  32. Private Sub Ex()
  33.     Dim F As Range, AD As String, Rng As Range, xRng As Range
  34.     Set xRng = Sheets("查詢用表單").[A5]
  35.     With Sheets("綜合資料庫").UsedRange
  36.         Set F = .Find(xRng, LOOKAT:=xlPart)
  37.         If Not F Is Nothing Then AD = F.Address
  38.         Do While Not F Is Nothing
  39.             If Rng Is Nothing Then
  40.                 Set Rng = .Rows(F.Row)
  41.             Else
  42.                 Set Rng = Union(Rng, .Rows(F.Row))
  43.             End If
  44.             Set F = .FindNext(F)
  45.             If F.Address = AD Then Exit Do
  46.         Loop
  47.     End With
  48.     If Not Rng Is Nothing Then
  49.         Rng.Copy xRng.Offset(, 1)
  50.         MsgBox "查詢結束"
  51.     Else
  52.         xRng.Offset(, 1).Resize(, 50) = ""
  53.     End If
  54. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 【為善競爭】人生要為善競爭,分秒必爭。
返回列表 上一主題