2015-04-16 50 views
0

我有一個電子表格,其中有ActiveX文本框鏈接到特定的單元格。當單元格中的數字發生變化時,文本框中的數字也會發生變化。很簡單。試圖簡化在VBA中的分步宏

我希望這些文本框中的數字在數字爲零時爲紅色,而在數字爲零時爲白色。我選擇了白色,以便在打印的頁面上根本看不到零。我有一個非常基本的宏:

Sub textbox_change() 

Worksheets("PAGE01").E21.LinkedCell = "PAGE01!AB23" 
If Worksheets("PAGE01").E21.Value > 0 Then 
    Worksheets("PAGE01").E21.ForeColor = RGB(255, 0, 0) 
Else 
    Worksheets("PAGE01").E21.ForeColor = RGB(255, 255, 255) 
End If  

Worksheets("PAGE01").E22.LinkedCell = "PAGE01!AB24" 
If Worksheets("PAGE01").E22.Value > 0 Then 
    Worksheets("PAGE01").E22.ForeColor = RGB(255, 0, 0) 
Else 
    Worksheets("PAGE01").E22.ForeColor = RGB(255, 255, 255) 
End If 

End Sub 

正如你所看到的,每個文本框的代碼一次完成一個。我怎樣才能組合這些宏使得宏一次改變這些顏色,而不必爲每個文本框設置一段代碼?

注意:在示例中,我只使用了兩個文本框,但我希望這些框總共最多有48個。當我肯定有一個更短的方法來照顧這些討厭的顏色變化時,這將是很多冗餘。

你能友善的幫忙嗎?非常感謝......

+0

你爲什麼要更新鏈接的單元格的所有複選框?他們沒有設置? –

+0

它們被設置爲打印爲兩個單獨的報告。一份報告將顯示僅顯示數字的表格,一份報告將打印爲帶有圖像的視覺儀表板,以直觀地表示數字的含義。 –

回答

1

您可以循環遍歷表的OLEObjects收集和檢查文本框:

Sub Tester() 
    Dim t 
    For Each t In Worksheets("PAGE01").OLEObjects 
     'is it a textbox ? 
     If t.progID = "Forms.TextBox.1" Then 
      'check the name begins with "E" 
      If t.Name Like "E*" Then 
       'Set the forecolor: using the built-in color constants, 
       ' but you could instead use specific RGB() values 
       t.Object.ForeColor = IIf(t.Object.Value > 0, vbRed, vbWhite) 
      End If 
     End If 
    Next t 
End Sub 
+0

非常感謝! –