2014-06-24 187 views
0

我有下面的代碼,應該簡單地改變命名範圍的裝飾根據其中的值。如果它變空,它會變成紅色,如果不變,它應該清除所有裝飾。我已經看過類似錯誤的其他問題,似乎無法解決我的問題。我有以下代碼:VBA運行時錯誤'1004':Selection.Interior.Pattern

For Each section In mandatoryFields 

    MsgBox (ThisWorkbook.Worksheets("Worksheet").Range(section).Value) 
    If Trim(ThisWorkbook.Worksheets("Worksheet").Range(section).Value) = "" Then 
     ThisWorkbook.Worksheets("Worksheet").Range(section).Select 

    With Selection.Interior 
     .Pattern = xlSolid 
     .PatternColorIndex = xlAutomatic 
     .Color = 255 
     .TintAndShade = 0 
     .PatternTintAndShade = 0 
    End With 

    Else 
     ThisWorkbook.Worksheets("Worksheet").Range(section).Select 
      With Selection.Interior 
       .Pattern = xlNone 
       .TintAndShade = 0 
       .PatternTintAndShade = 0 
      End With 
    End If 

Next section 

我已經通過代碼加強,並正在觸發運行時錯誤在

.Pattern = xlNone 

.Pattern = xlSolid 

線。有什麼建議麼?

我也曾嘗試

Worksheets("Worksheet").Activate 
     Range(section).Select 
      With Selection.Interior 
       .Pattern = xlNone 
       .TintAndShade = 0 
       .PatternTintAndShade = 0 
      End With 

我有以下代碼觸發點擊一個按鈕。

Dim wb As Workbook 
Set wb = Application.Workbooks("C New Hire") 
wb.Worksheets("Worksheet").Range("nameRange").Value = "r" 

在第二次將發生運行時錯誤我一下就行了按鈕

wb.Worksheets("Worksheet").Range("nameRange").Value = "r" 
+0

您使用的是Excel 2007 **還是更高版本? –

+0

我正在使用Excel 2010,但它似乎在 – psycho

+0

之前工作是保護範圍/工作表的一部分嗎? –

回答

0

這個問題的答案是,我的代碼執行內部代碼保護代碼中某處的表單後觸發了一個Worksheet_Change函數。這意味着我不會對任何物體執行任何程序,例如更改顏色。因此,我必須在執行這些程序之前取消保護表格。

簡單的修復,但很容易錯過。

1

代碼的着色部分是正確的,因爲這個工程:

Sub luxation() 
    Range("A1:A2").Clear 
    Range("A1").Select 
     With Selection.Interior 
      .Pattern = xlSolid 
      .PatternColorIndex = xlAutomatic 
      .Color = 255 
      .TintAndShade = 0 
      .PatternTintAndShade = 0 
     End With 
    Range("A2").Select 
     With Selection.Interior 
      .Pattern = xlNone 
      .TintAndShade = 0 
      .PatternTintAndShade = 0 
     End With 
End Sub 

但是:

在選擇範圍之前,您必須激活「包含」工作表。

否則,請按照David的建議。

編輯#1:

基於更新的代碼後,立即:

Range(section).Select 

插入:

MsgBox Selection.Address(0,0) 

這將擺脫對存在問題是發生了一些光。

+1

對於'.Select'語句的討論如此之多 –

+2

@mehow我同意你的觀點.........一個「好」的東西*選擇*是它給我們調試有趣的問題! –

+0

基於ThisWorkbook.Worksheets(strNewHireSheet).Range(section).Select之前,包含的工作表未處於活動狀態在使用Selection.Interior屬性之前 – psycho