2014-12-03 73 views
1

爲標題說我正在尋找一種方法來改變細胞的顏色的基礎上一定範圍內,如果它們比閾值標準較低或較高。因爲我想重新着色每一個閾值改變時發生,這是到目前爲止我的代碼,但我不斷收到就行溢出異常,我定義了基於RGB顏色代碼值EXCEL VBA改變背景顏色 - RGB不起作用

Option Explicit ' Force explicit variable declaration 

Private Sub Worksheet_Change(ByVal Target As Excel.Range) 

Dim thresholdValue As Double 
Dim resetColumnStart As Integer 
Dim resetRowStart As Integer 
Dim resetRowEnd As Integer 
Dim ii, kk As Integer 
Dim lightColor As Integer 
Dim darkColor As Integer 
Dim cellInRange As Excel.Range 

thresholdValue = Sheets("ThresholdValues").Range(Cells(Target.Row, Target.Column), Cells(Target.Row, Target.Column)) 

If Target.Column = 2 Then 
    If Target.Row = 3 Then 
    resetColumnStart = 11 
    lightColor = RGB(242, 221, 220) 
    darkColor = RGB(217, 151, 149) 
ElseIf Target.Row = 4 Then 
    resetColumnStart = 18 
    lightColor = RGB(219, 229, 241) 
    darkColor = RGB(149, 179, 215) 
Else 
    Exit Sub 
End If 
Else 
    Exit Sub 
End If 

resetRowStart = 3 
For ii = 2 To 4 Step 1 
Sheets(ii).Activate 
resetRowEnd = Range("A65536").End(xlUp).Row 
For kk = 1 To 7 Step 2 
'reset the background colour for each data sheet 
    With Range(Cells(resetRowStart, resetColumnStart + kk), Cells(resetRowEnd, kk)) 
     .Interior.Color = lightColor 
     .Font.Color = RGB(0, 0, 0) 
    End With 
    With Range(Cells(resetRowStart, kk + 1), Cells(resetRowEnd, kk + 1)) 
     .Interior.Color = darkColor 
     .Font.Color = RGB(255, 255, 255) 
    End With 
Next kk 
Next ii 


'color the values that are below the threshold for each data sheet 
For ii = 2 To 4 Step 1 
Sheets(ii).Activate 
resetRowEnd = Range("A65536").End(xlUp).Row 
currentRange = Range(Cells(resetRowStart, resetColumnStart), Cells(resetRowEnd, resetColumnStart + 6)) 
For Each cellInRange In currentRange 
    If cellInRange.Value < thresholdValue Then 
     cellInRange.Interior.Color = RGB(0, 255, 255) 
     cellInRange.Font.Color = RGB(255, 0, 0) 
    End If 
Next cellInRange 
Next ii 

End Sub 

我完全地新的VBA編碼,所以它似乎我缺少的東西essentialy,我希望你可以幫助我,因爲編碼這應該很容易,我失去了這麼多時間花哨的東西,而沒有做實際工作

+0

你有沒有考慮條件格式? https://www.youtube.com/watch?v=9Dk1JoL_Pe4 – dav1dsm1th 2014-12-03 13:19:27

+0

的問題是,我產生了Excel與MATLAB腳本文件,所以我想這不會是可能的 – Ingrid 2014-12-03 13:24:21

回答

2

你的代碼的一個原因無法工作,它整數類型不能保持值,你想傳遞的事實。整數有16位的邊界,這意味着最高和最低值是-32,768到32,767。現在RGB(242,221,220)實際上是在16位邊界之外的值14,474,738。

你可以做的是改變下列

Dim lightColor As Integer -> ... as Long 
Dim darkColor As Integer -> ... as Long 

長變量邊界2,147,483,648 2,147,483,647應該涵蓋你的需要。

+0

謝謝,沒有考慮這個,因爲它在說RGB的功能幫助輸出是一個整數,我不知道有這種差異 – Ingrid 2014-12-03 13:47:53

+0

這是有問題的,因爲它實際上是共同的語言整數意味着它返回一個整數,但返回的數據類型的長度不是整型數據類型。龍是一個整數太;) – 2014-12-03 13:55:11

+0

是的,它是長整型的簡寫。在64位VBA中也有Long Long。一般來說,你可能會使用Longs而不是Integers。 VBA將值從整數轉換爲長整型,進行計算,然後轉換回來。所以即使整數佔用較少的內存,它們也會強制執行兩次轉換。出於同樣的原因,使用Double而不是Single。 – 2015-01-22 19:43:21