簡體   English   中英

使用Selection.SpecialCells(xlCellTypeVisible)時未選中的單元會受到影響

[英]Non selected cells being affected when using Selection.SpecialCells(xlCellTypeVisible)'

我創建了一個為當前選擇添加前綴的宏。 如您所見,這非常簡單-它遍歷所選內容中的可見單元格。 我添加了.SpecialCells(xlCellTypeVisible)因為它在使用過濾器時會影響意外的單元格。

Sub Prefix()

Dim rng As Range
Dim Prefix As String
Prefix = "P"

For Each rng In Selection.SpecialCells(xlCellTypeVisible)
    rng = Prefix & rng
Next rng

End Sub

例如,假設我的數據是像這樣填寫的Cells A1:A4

Title
1
2
1

當我執行以下操作時,會出現我的問題:

  1. 將自動Autofilter放在范圍上,並隱藏A3中的“ 2”
  2. 選擇A2(第一個“ 1”)
  3. 運行我的宏

問題在於,它不僅僅影響Cell A2 (選定的單元格),而是開始將前綴應用於第一行(A1:Z1等),直到我取消宏為止。 如果我讓它繼續運行,它將繼續對數千個單元執行此操作。

當我的選擇是多個單元格時,或者如果我使用Selection而不是Selection.SpecialCells(xlCellTypeVisible) ,或者在沒有任何內容被濾除(隱藏)時將宏應用於一個單元格,則不會發生此問題。

沒有人有任何想法,為什么當我只選擇一個單元格時,所選內容默認為整個電子表格?
另外,有人可以建議使用VBA這樣添加前綴的方法嗎?

我知道使用excel公式可以緩解此問題,但這對我來說並不實際,並且無論如何它都沒有單擊宏的速度。

您可以使用“ Application.intersect”來確保獲得所需的結果:

For each rng in Application.Intersect(Selection,ActiveSheet.Cells.SpecialCells(xlCellTypeVisible))

如果您希望在手動選擇一系列單元格時能夠動態工作,而您的意圖是將國家/地區代碼從輸入框中添加到該單元格的當前值之前,則將下面發布的change事件添加到您的代碼部分工作表並將例程添加到工作簿中的代碼模塊。

不知道為什么要進行減號的替換,但是可以根據需要將其添加到此代碼中。

工作表代碼:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Call AddPrefix(Target)
End Sub

添加一個模塊並將此代碼放入其中。

Sub AddPrefix(rangeToPrefix)
    Dim cCell As Range
    Dim prefix As String
    prefix = InputBox("Enter your country code", "Set Country Code", +33)

    For Each cCell In rangeToPrefix.SpecialCells(xlCellTypeVisible)
        If Not IsEmpty(cCell) Then cCell.Value = prefix & cCell.Value
    Next cCell
End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM