2017-06-22 65 views
1

我的劇本的全部工作,但有它的一個部分,我想「音」和簡化。如果其中一個單元格遇到特定條件,我將刪除突出顯示的三個值。我將相同的WITH語句應用於所有三個單元格。修剪它以選擇所有三個值是很好的,所以我可以將它減少到只有一個循環。簡化範圍

我包括爲簡單起見,從而忽略丟失的定義腳本的唯一重要組成部分。

For Each rngCell In NetworkPatchRange 
    If InStr(rngCell.Value, "-") > 0 Then 
    rngCell.Select 
    With Selection.Interior 
     .Pattern = xlNone 
     .TintAndShade = 0 
     .PatternTintAndShade = 0 
    End With 
    rngCell.Offset(0, -1).Select 
    With Selection.Interior 
     .Pattern = xlNone 
     .TintAndShade = 0 
     .PatternTintAndShade = 0 
    End With 
    rngCell.Offset(0, -2).Select 
    With Selection.Interior 
     .Pattern = xlNone 
     .TintAndShade = 0 
     .PatternTintAndShade = 0 
    End With 
    End If 
Next 

回答

2

Avoid using Select in Excel VBA macros

For Each rngCell In NetworkPatchRange 
    If cbool(InStr(1, rngCell.Value, chr(45))) Then 
     rngCell.offset(0, -2).resize(1, 3).interior.Pattern = xlNone 
    End If 
Next 

刪除突出顯示的記錄宏代碼執行比實際需要更多的操作。只需將.interior.Pattern設置爲xlNone即可。

它可以謹慎地記得,手動刪除單元格的「補」(又名高光)並不適用於已突出了一個條件格式規則的單元格。

+0

所以,讓我打破你下來看看,如果我理解這一點。 cbool是一個返回true或false的布爾命令,在這種情況下,我們希望它返回true。 chr(45)指的是ASCII值45,意思是「 - 」。 不過,我不明白爲什麼InStr函數以「1」開始了。 此外,rngCell.offset(0,-2)調整(1,3)意味着我們要到最遠的偏移值和調整我們的偏移範圍,包括3個細胞向右? – StrictlyBananas

+0

1. Instr有一個可選的起始位置作爲第一個參數。它默認爲1,所以有些人不會把它放進去;我總是把它放進去。 2.是的,調整大小從左到右移動,所以我們必須從最左邊的單元格(帶偏移量)開始,所以*向左移動兩列,並將它變成三列寬度.. .. – Jeeped

+0

謝謝。我對VBA相當陌生,一直很喜歡學習它。 – StrictlyBananas