2016-08-09 275 views
0

我已經創建了一個宏,它爲當前選擇添加了一個前綴。這很簡單,就像你看到的那樣 - 它通過選擇中的可見單元循環。我添加了.SpecialCells(xlCellTypeVisible),因爲它在使用過濾器時會影響非預期的單元格。使用Selection.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填寫這樣的:

  1. 的範圍內把一個Autofilter

    Title 
    1 
    2 
    1 
    

    當我做下面出現我的問題,並隱藏A3中的'2'

  2. 選擇A2(第一個'1')
  3. 運行我的微距

的問題是,而不是隻影響Cell A2(所選單元格),它會自動跳過前綴爲第一行(A1:Z1等),直到我取消宏。如果我讓它繼續運行,它將繼續對數千個單元執行此操作。

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

有沒有人有任何想法,爲什麼選擇默認爲整個電子表格,當我只有一個單元格選擇?
另外,任何人都可以提出一種方法來添加這樣的前綴使用VBA?

我知道使用excel公式可以緩解這個問題,但這對我來說並不實用,而且不會像點擊宏那麼快。

+1

很可能是因爲您的小組不知道選擇是什麼,所以它使用整個工作表。爲您想要的範圍添加一個範圍參數並將其傳遞給子。用該參數替換選擇,它應該工作。 – dinotom

+0

請你可以通過添加範圍參數來解釋你的意思嗎?我知道我可以運行該子程序來處理Range(「a2:a4」)。SpecialCells(xlCellTypeVisible)或類似的東西,但我希望能夠在選擇時使用它,而不是每次都編輯宏。我可能適用於連續10個不同的選擇,因此不值得每次編輯宏代碼。 – unknownengines

+0

如果您希望它能像那樣工作,它必須位於工作表選擇更改事件中。我會很快發帖 – dinotom

回答

0

您可以使用「Application.intersect」,以確保你得到你想要的結果:

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

它仍然需要知道選擇什麼是 – dinotom

0

如果你想,當你選擇一個範圍人工細胞,你的目的是隻是在前面加上這工作動態從輸入框輸入國家代碼到單元格的當前值,然後將下面發佈的更改事件添加到工作表的代碼部分,並將例程添加到工作簿中的代碼模塊。

不知道你爲什麼要做減號的替換,但是如果需要你可以將它添加到這個代碼中。

工作表代碼:

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 
+0

這是一個有趣的解決方案。這很難打開和關閉,並且需要一點點工作才能第二次使用。我也努力使用它,有時候決定將這個改變應用到整個工作表(並因此導致excel崩潰),這似乎是隨機的,但我猜想我會以某種方式濫用它。 我認爲一個替代方案是使用我的原始方法,但用'If'來檢查'selection.SpecialCells(xlCellTypeVisible)'是否產生錯誤,如果是,則使用'selection'代替。 – unknownengines

+0

我發佈的代碼應該只更改用鼠標手動選擇的單元格值(觸發selectionchange事件),如果單元格爲空,則不會更改該值。 – dinotom

相關問題