在包含數據的工作表中,有一列帶有應用過濾器的列以限制顯示的數據。用戶在列中選擇一個或多個單元格(不一定是連續的)並執行VBA代碼。 在VBA代碼中,我想遍歷所選單元格並對它們進行一些操作,但是在僅選擇一個單元格(以Excel方式激活)時,Excel行爲存在差異。VBA,Excel - 遍歷篩選列中選定的單元格
Sub Macro1()
If Selection.count = 1 Then
counter = 1
Debug.Print Selection.Text
Else
counter = Selection.SpecialCells(xlCellTypeVisible).count
For Each c In Selection.SpecialCells(xlCellTypeVisible)
Debug.Print c.Text
Next c
End If
Debug.Print counter
End Sub
問題:即工作代碼 有沒有一種方法,更優雅,乾淨的解決方案做到這一點?爲了擺脫If-Then?
Selection.SpecialCells(xlCellTypeVisible).count
生成如果只有一個細胞被激活(我想的Excel擴展選擇,以整個工作表),如果只選擇了一個小區
ActiveCell.Select
Selection.SpecialCells(xlCellTypeVisible).count
返回2溢出錯誤(返回選擇的記錄兩次)
編輯 請注意:過濾器是由用戶手動應用而不是由VBA代碼。用戶還可以從過濾視圖中手動選擇單元格,然後在VBA代碼中使用所選單元格。
因此....你正在從可見標題中刪除一行並調整範圍以使用'.Rows.Count-1'處理......?然後看着一列...?儘量避免使用「選擇」作爲確定待處理範圍的手段。無論如何,它將是'Selection.SpecialCells(xlCellTypeVisible).Count'而不是'Selection.Count'。 – Jeeped
不,用戶從過濾表中的1到多個單元格中進行選擇。這個選擇是宏必須與之合作的。標題在這裏並不重要。正如我寫Selection.SpecialCells(xlCellTypeVisible).Count不工作,如果用戶只選擇一個記錄。 – b0rek