2017-07-27 108 views
0

我想通過VBA自動過濾Excel表格。使用VBA過濾Excel表格

該表有許多行,目前位於Sheet2的B5:N584中。 表格的第一列有「國家」作爲標題,這是我想要應用過濾器的列。我希望表格根據用戶輸入的國家名稱自動過濾。國家名稱將位於Sheet2單元格B3中,現在定義爲「= Sheet1!A1」,這是用戶輸入國家的地方。

我希望它的工作方式是: - 用戶在Sheet1的單元格A1上寫入一個國家/地區名稱。 - 國家自動被拉到Sheet2的單元格B3。 - 根據Sheet2單元格B3的內容在第一列中過濾表格。

這是VBA代碼,我已經寫了:

Public Sub Worksheet_Change(ByVal Target As Range) 

    If Target.Address = Range("B3").Address Then 
     Range("B5:N584").CurrentRegion.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("B2:B3") 
    End If 

End Sub 

在B2單元格中我已經寫了「國家」,就像在列標題。

我所做的幾乎工作。唯一的問題是過濾器沒有被自動應用。單元格A1上的用戶輸入的國家被拉到Sheet2的單元格B3,但是直到我單擊單元格B3的公式欄並單擊輸入而不更改任何內容時才應用該過濾器 - 然後將該過濾器應用於下表。

我想知道什麼可能會阻止表自動檢測有一個新的國家在單元格B2上,而不必點擊單元格,然後按ENTER鍵。

謝謝。

回答

0

設置工作表以在用戶在單元格A1中輸入數據時觸發代碼,以便檢測此單元格中的更改並觸發代碼而不是等待B3進行更改。

If Target.Address = Range("A1").Address Then 
    Range("B5:N584").CurrentRegion.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("B2:B3") 

結束如果

+0

謝謝你的幫助。如果A1在另一張紙上,我該怎麼辦?如何引用「= Range()」中的其他表格? – franciscofcosta

+0

您必須將'WOrksheet_Change'事件處理程序放入* other *表格中,然後限定它需要操作的表格(例如'Worksheets(「Sheet2」)。Range(「 B5:...') –

0

考慮你有兩個表稱爲工作表Sheet1和Sheet2中和表是在Sheet2上在指定的範圍內。

而且假設下列情況下...

  1. 用戶在A1輸入工作表Sheet1上的國家名稱。
  2. 在Sheet2上B2的標題國家與表中B5中的標題相同。
  3. B3在Sheet2上有一個公式=工作表Sheet1!A1

確保上述所有的假設是正確的,從工作表Sheet1模塊刪除更改事件代碼,然後放置在Sheet2的模塊下面的代碼。

Private Sub Worksheet_Calculate() 
    Sheets("Sheet2").Range("B5").CurrentRegion.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Sheets("Sheet2").Range("B2:B3") 
End Sub 

編輯:

實際上可以去除紙基準,因爲代碼是關於Sheet2的模塊本身。

Private Sub Worksheet_Calculate() 
    Range("B5").CurrentRegion.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("B2:B3") 
End Sub