2008-12-18 7 views
6

में फ़ॉन्ट रंग सेट करना मैं एक सेल के फ़ॉन्ट रंग को एक विशिष्ट आरजीबी मान पर सेट करना चाहता हूं।वीबीए

अगर मैं

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

का उपयोग मैं पीला मिलता है, लेकिन अगर मैं की तरह एक और अधिक विदेशी आरजीबी मूल्य का उपयोग करें:

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

मैं बस वापस एक ग्रे रंग मिलता है।

मैं किसी भी आरजीबी मूल्य का उपयोग कैसे नहीं कर सकता? और क्या आप कोई कामकाज जानते हैं?

धन्यवाद।

उत्तर

7

एक्सेल केवल रंग पैलेट में रंगों का उपयोग करता है। जब आप आरजीबी मूल्य का उपयोग कर सेल सेट करते हैं, तो यह उस पैलेट में से एक को चुनता है जो निकटतम मैच है। आप अपने रंगों के साथ पैलेट को अपडेट कर सकते हैं और फिर अपना रंग चुन सकते हैं और यह काम करेगा।

इससे आपको यह देखने क्या पैलेट में है दूँगी:

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 
+0

आप * अपने रंगों के साथ पैलेट अपडेट कर सकते हैं, लेकिन आम तौर पर ऐसा करने से बचना चाहिए। एक समस्या यह है कि एक अलग पैलेट के साथ एक अलग कार्यपुस्तिका में प्रतिलिपि बनाना और पेस्ट करना आपको अलग-अलग रंग देगा। इस कारण से, डिफ़ॉल्ट पैलेट से चिपकना आमतौर पर बेहतर होता है। – Joe

+0

मेरा मतलब इसके खिलाफ सुझाव देना था ... ओह, धन्यवाद जो। – LeppyR64

0

रूप में अच्छी तरह जवाब और टिप्पणी के लिए धन्यवाद निर्धारित करने देगा।

यह वास्तव में मुझे बड़ी परेशानी मिली क्योंकि मेरे क्लाइंट में एक्सेल में अन्य प्लगइन्स स्थापित किए गए थे जो रंग पैलेट के साथ छेड़छाड़ करते थे।

मैंने पैलेट में कुछ रंगों को बदल दिया और उसके बाद मेरे तत्वों को विशिष्ट रंग इंडेक्स को संरेखित कर दिया, लेकिन लड़का, यह सुंदर नहीं है।

1
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 
2

एक त्वरित युक्ति: 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 

अंत के साथ

तो Application.ScreenUpdating <> bScreenUpdating:

यहाँ 'नरम टोन' रंग है जो चूक की तुलना में कहीं कम आक्रामक हैं का एक उचित सेट बनाने के लिए कोड है फिर आवेदन।ScreenUpdating = bScreenUpdating अंत तो

End Sub

सार्वजनिक उप SetGreyPalette() 'यह सबरूटीन greyshades जो आप नियंत्रण, शीर्षकों के लिए उपयोग कर सकते हैं की एक कस्टम पैलेट और संवाद

बनाता है' ** यह कोड सार्वजनिक डोमेन ** 'निगेल हेफेरनान http://Excellerando.Blogspot.com

' एक्सेल रंग पैलेट दो छिपा पंक्तियों जो शायद ही कभी इस्तेमाल किया जाता है है में है: 012,'पंक्ति 1: रंग 17 से 24' - इस कार्यपुस्तिका में SetPalePalette द्वारा प्रयुक्त 'पंक्ति 2: रंग 25 से 32

' कोड मौजूदा स्क्रीन अद्यतन कर रहा है settting और, यदि आवश्यक हो, 'अस्थायी रूप से अद्यतन करने को निलंबित करते हुए कब्जा करने के लिए प्रक्रिया परेशान 'फ्लिकर ऑनस्क्रीन उत्पन्न करती है ... बाहर निकलने पर स्क्रीन अपडेट को पुनर्स्थापित करना याद रखें!

मंद bScreenUpdating के रूप में बूलियन

bScreenUpdating = Application.ScreenUpdating

तो bScreenUpdating = सच तो Application.ScreenUpdating = झूठी अंत तो

'Application.ScreenUpdating < हैं> bScreenUpdating फिर ' आवेदन। स्क्रीन अपडेटिंग = बीस्क्रीन अपडेटिंग 'अंत अगर

ThisWorkbook .Colors (25) = & HF0F0F0 .Colors (26) = & HE8E8E8 .Colors (27) = & HE0E0E0 .Colors (28) = & HD8D8D8 .Colors (29) = & HD0D0D0 के साथ। रंग (30) = & HC8C8C8 '& HC0C0C0' को छोड़ दिया गया & HC0C0C0 - यह मुख्य पैलेट में नियमित रूप से 25% ग्रे है .Colors (31) = & HB8B8B8 'नोट कि अंतराल व्यापक हो रही है: मानव आँख अधिक है संवेदनशील रंग (32) = & HA8A8A8 ' प्रकाश grays में बदलाव के लिए है, तो इस के साथ सीधे पैमाने समाप्ति रूप में माना जा जाएगा

'एक्सेल डिफ़ॉल्ट पैलेट के दाएँ हाथ के कॉलम को निर्दिष्ट निम्नलिखित grays:

' रंग (56) = & H333333 'रंग (16) = & H808080 ' रंग (48) = & H969696 'रंग (15) = & HC0C0C0' डिफ़ॉल्ट '25% ग्रे '

' यह रंग सुधार करने के लिए संशोधित किया जाना चाहिए 'की खाई 'और आसानी से रंगों को अलग-अलग बनाते हैं le:

ThisWorkbook .Colors (56) = & H505050 .Colors (16) = & H707070 .Colors (48) = & H989898 'के साथ

।रंग (15) = के साथ

Application.ScreenUpdating < हैं> bScreenUpdating फिर Application.ScreenUpdating = bScreenUpdating अंत तो

End Sub

आप चुन सकते हैं & HC0C0C0 समाप्ति प्रत्येक कार्यपुस्तिका के ओपन() और पहले क्लोज़() ईवेंट के लिए 'कैप्चरकॉलर्स' और 'रीइंस्टेट कलर्स' फ़ंक्शन लिखने के लिए ... या प्रत्येक काम के लिए भी हीट सक्रिय है और घटना को निष्क्रिय कर देता है।

मेरे पास कोड कहीं भी झूठ बोल रहा है जो 3-डी चार्ट के लिए 'थर्मल' रंग ढाल बनाता है, जिससे आपको 'दो' चरणों में 'शीत' नीले से 'गर्म' लाल रंग की प्रगति मिलती है। यह आपके विचार से कठिन है: रंगों का ढाल जो मानव दृश्य प्रणाली द्वारा 'बराबर अंतराल' के रूप में माना जाएगा (जो तीव्रता के लॉगरिदमिक पैमाने पर चलता है और इसमें लाल, हरे और नीले रंग के 'मजबूत' रंगों के लिए nonlinear भारोत्तोलन होता है) निर्माण करने में समय लगता है - और आपको निर्दिष्ट आदेश में, आपके द्वारा निर्दिष्ट रंगों का उपयोग करने के लिए एमएस चार्ट को कॉरपोरेट करने के लिए वीबीए का उपयोग करना होगा।

+0

नाइल, मेरे वृद्ध प्रश्न के लिए गुणवत्ता का उत्तर प्रदान करने के लिए धन्यवाद। –