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.ColorRange类的一个属性,但是在你的代码行中:

 if letter = input_letter 'and letter.Font.Color = RGB(31,78,120) 

…你正试图访问variablesletter中的这个属性,这是一个String (你不明确地声明它是这样的,但是当你执行letter = mid(string, i, 1)时它会自动声明以上)。

这就是为什么你得到一个Object requiredexception:你试图访问属性.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条件中额外的颜色检查似乎是多余的,因为字符很长是蓝色的。

你似乎更喜欢在ForNext循环中重复使用InputBox ,可以简化为一次调用。