سؤال

وأريد أن تعيين لون الخط من خلية إلى قيمة RGB محددة.

إذا كنت تستخدم

ActiveCell.Color = RGB(255,255,0)

وأنا لا تحصل الأصفر، ولكن إذا كنت تستخدم قيمة RGB أكثر غرابة مثل:

ActiveCell.Color = RGB(178, 150, 109)

وأنا مجرد الحصول على لون رمادي الظهر.

وكيف تأتي لا يمكنني مجرد استخدام أي قيمة RGB؟ وهل تعرف أي الحلول؟

وشكرا.

هل كانت مفيدة؟

المحلول

ويستخدم Excel فقط الألوان في لوحة الألوان. عند تعيين خلية باستخدام قيمة RGB، فإنه يختار واحدة في لوحة وهذا هو الأقرب المباراة. يمكنك تحديث لوحة مع الألوان الخاصة بك ومن ثم اختيار اللون الخاص بك، والتي ستعمل.

وهذا سوف تمكنك من رؤية ما هو حاليا في لوحة:

 Public Sub checkPalette()
      Dim i As Integer, iRed As Integer, iGreen As Integer, iBlue As Integer
      Dim lcolor As Long
      For i = 1 To 56
        lcolor = ActiveWorkbook.Colors(i)
        iRed = lcolor Mod &H100  'get red component
        lcolor = lcolor \ &H100  'divide
        iGreen = lcolor Mod &H100 'get green component
        lcolor = lcolor \ &H100  'divide
        iBlue = lcolor Mod &H100 'get blue component
        Debug.Print "Palette " & i & ": R=" & iRed & " B=" & iBlue & " G=" & iGreen
      Next i
    End Sub

وهذا سوف تتيح لك تعيين لوحة

Public Sub setPalette(palIdx As Integer, r As Integer, g As Integer, b As Integer)
  ActiveWorkbook.Colors(palIdx) = RGB(r, g, b)
End Sub

نصائح أخرى

وهناك معلومات سريعة: لوحة يتضمن Excel صفين من الألوان التي نادرا ما تستخدم ويمكن عادة أن يتم تعيين إلى القيم المخصصة دون تغييرات مرئية للأوراق الشعوب الأخرى.

وهنا هو رمز لإنشاء مجموعة معقولة من الألوان "اللينة لهجة" التي هي أقل بكثير من الهجوم الافتراضات:

Public Sub SetPalePalette(Optional wbk As Excel.Workbook) ' This subroutine creates a custom palette of pale tones which you can use for controls, headings and dialogues '

' ** THIS CODE IS IN THE PUBLIC DOMAIN ** ' Nigel Heffernan http://Excellerando.Blogspot.com

' The Excel color palette has two hidden rows which are rarely used: ' Row 1: colors 17 to 24 ' Row 2: colors 25 to 32 - USED BY SetGrayPalette in this workbook '

' Code to capture existing Screen Updating settting and, if necessary, ' temporarily suspend updating while this procedure generates irritating ' flickers onscreen... and restore screen updating on exit if required.

Dim bScreenUpdating As Boolean

bScreenUpdating = Application.ScreenUpdating

If bScreenUpdating = True Then Application.ScreenUpdating = False End If

'If Application.ScreenUpdating <> bScreenUpdating Then ' Application.ScreenUpdating = bScreenUpdating 'End If

If wbk Is Nothing Then Set wbk = ThisWorkbook End If

With wbk

.Colors(17) = &HFFFFD0  ' pale cyan
.Colors(18) = &HD8FFD8  ' pale green.
.Colors(19) = &HD0FFFF  ' pale yellow
.Colors(20) = &HC8E8FF  ' pale orange
.Colors(21) = &HDBDBFF  ' pale pink
.Colors(22) = &HFFE0FF  ' pale magenta
.Colors(23) = &HFFE8E8  ' lavender
.Colors(24) = &HFFF0F0  ' paler lavender

End With

If Application.ScreenUpdating <> bScreenUpdating Then Application.ScreenUpdating = bScreenUpdating End If

End Sub

Public Sub SetGreyPalette() ' This subroutine creates a custom palette of greyshades which you can use for controls, headings and dialogues

' ** THIS CODE IS IN THE PUBLIC DOMAIN ** ' Nigel Heffernan http://Excellerando.Blogspot.com

' The Excel color palette has two hidden rows which are rarely used: ' Row 1: colors 17 to 24 ' - USED BY SetPalePalette in this workbook ' Row 2: colors 25 to 32

' Code to capture existing Screen Updating settting and, if necessary, ' temporarily suspend updating while this procedure generates irritating ' flickers onscreen... remember to restore screen updating on exit!

Dim bScreenUpdating As Boolean

bScreenUpdating = Application.ScreenUpdating

If bScreenUpdating = True Then Application.ScreenUpdating = False End If

'If Application.ScreenUpdating <> bScreenUpdating Then ' Application.ScreenUpdating = bScreenUpdating 'End If

With ThisWorkbook .Colors(25) = &HF0F0F0 .Colors(26) = &HE8E8E8 .Colors(27) = &HE0E0E0 .Colors(28) = &HD8D8D8 .Colors(29) = &HD0D0D0 .Colors(30) = &HC8C8C8 ' &HC0C0C0 ' Skipped &HC0C0C0 - this is the regular 25% grey in the main palette .Colors(31) = &HB8B8B8 ' Note that the gaps are getting wider: the human eye is more sensitive .Colors(32) = &HA8A8A8 ' to changes in light greys, so this will be perceived as a linear scale End With

'The right-hand column of the Excel default palette specifies the following greys:

' Colors(56) = &H333333 ' Colors(16) = &H808080 ' Colors(48) = &H969696 ' Colors(15) = &HC0C0C0 ' the default '25% grey'

' This should be modified to improve the color 'gap' and make the colours easily-distinguishable:

With ThisWorkbook .Colors(56) = &H505050 .Colors(16) = &H707070 .Colors(48) = &H989898 ' .Colors(15) = &HC0C0C0 End With

If Application.ScreenUpdating <> bScreenUpdating Then Application.ScreenUpdating = bScreenUpdating End If

End Sub

ويمكنك اختيار لكتابة "CaptureColors 'وظيفة' ReinstateColors" لتوسيع كل مصنف () وBeforeClose () أحداث ... أو حتى لتفعيل كل ورقة عمل وإلغاء الحدث.

ولدي كود متناثرة في مكان ما أن يخلق "الحراري" التدرج اللون لمدة 3-D الرسوم البيانية، مما يتيح لك الانتقال من اللون الأزرق إلى الأحمر 'الباردة' 'ساخنة' في اثنين وثلاثين الخطوات. هذا هو أصعب مما تظن: التدرج من الألوان التي سوف ينظر إليها على أنها "فترات متساوية من قبل النظام البصري البشري (الذي يعمل على مقياس لوغاريتمي من شدة ولها أوزان غير الخطية لوالألوان القوية" الأحمر والأخضر والأزرق ) يستغرق وقتا طويلا لبناء - وكان لديك لاستخدام VBA لإجبار MS الرسم البياني في استخدام الألوان التي تحددها، وفقا للترتيب الذي حددته

Sub color()

bj = CStr(Hex(ActiveCell.Interior.Color))
If Len(bj) < 6 Then
    Do Until Len(bj) = 6
        bj = "0" & bj
    Loop
End If

R = CLng("&H" & Right(bj, 2))
bj = Left(bj, Len(bj) - 2)
G = CLng("&H" & Right(bj, 2))
bj = Left(bj, Len(bj) - 2)
B = CLng("&H" & bj)

End Sub

وشكرا لك على الإجابات والتعليقات كذلك.

وانها حقا أعطاني متاعب كبيرة لموكلي قد الإضافات الأخرى المثبتة إلى Excel التي العبث أيضا مع لوحة الألوان.

وانتهى بي الأمر استبدال بعض الألوان في لوحة وثم asigning عناصر بلدي ColorIndex محددة، ولكن الصبي، انها ليست جميلة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top