Visual Basic excel,如何要求字母颜色
我想在If条件下要求提供一个字母颜色:
string="asdfghjkl" for i=1 to len(string) letter = mid(string, i, 1) input_letter = inputbox("Write a letter") if letter = input_letter 'and letter.Font.Color = RGB(31,78,120) 'my code here endif next
和letter.Font.Color = RGB(31,78,120)不起作用。 它说我需要一个对象。
有没有类似的方式来问这个? 这个RGB颜色是蓝色的,我用这个代码把整个句子转换成蓝色(用loggingmacros的excel设置)
With Selection.Font .ThemeColor = xlThemeColorAccent1 .TintAndShade = -0.499984740745262 End With
谢谢
关于你的问题的问题:
.Font.Color
是Range
类的一个属性,但是在你的代码行中:
if letter = input_letter 'and letter.Font.Color = RGB(31,78,120)
…你正试图访问variablesletter
中的这个属性,这是一个String
(你不明确地声明它是这样的,但是当你执行letter = mid(string, i, 1)
时它会自动声明以上)。
这就是为什么你得到一个Object required
exception:你试图访问属性.Font.Color
不是一个Range
对象(实际上,不是一个Object
)的东西。
关于你的真实需求:
我不知道你想做什么。 你是否试图在Excel中将单个单元格中的多色文本? 如果我说得对,你会得到一个string:
string="asdfghjkl"
(请注意:你不能调用你的variablesString
,这是代码的保留关键字,可以考虑把它称为别的东西,但是我猜你已经在你的真实代码中做了这个,否则你将无法执行它所有)。
…对于该string的每个字母,
for i=1 to len(string)
…你想要用户给你一个颜色。 在这种情况下,你不能在Excel中完成。 如果不是这样,你能否更好地expression你真正的需要?
下面的代码最接近您的OP逻辑并使用包含string值的单元格Range
(B11)的.Characters
属性注释:
码
Option Explicit Sub test() Dim blue As Long: blue = RGB(31, 78, 120) Dim s As String: s = "asdfgh" Dim letter As String Dim input_letter As String Dim i As Integer Dim rng As Range Set rng = ThisWorkbook.Worksheets("MySheet").Range("B11") With rng .Value = s ' color whole string .Characters(1, Len(s)).Font.Color = blue For i = 1 To Len(s) letter = Mid(s, i, 1) input_letter = InputBox("Write a letter") If letter = input_letter And .Characters(i, 1).Font.Color = blue Then 'color found character .Characters(i, 1).Font.Color = vbWhite ElseIf input_letter = "" Then Exit For End If Next End With End Sub
笔记
在模块声明头中始终使用Option Explicit
。 所以你会看到String
不允许作为variables名称,因为它是一个函数。
If
条件中额外的颜色检查似乎是多余的,因为字符很长是蓝色的。
你似乎更喜欢在For
– Next
循环中重复使用InputBox
,可以简化为一次调用。