我想在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颜色为蓝色,我使用此代码将整个句子转换为蓝色(使用记录宏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)
...你试图在变量letter
中访问这个属性,这是一个String
(你没有明确地声明它,但它会在你上面执行letter = mid(string, i, 1)
时自动声明)。
这就是为什么你得到一个Object required
例外:你试图访问属性.Font.Color
的东西不是Range
对象(实际上,根本不是Object
)。
关于你的真正需要:
我不太明白你想要做什么。您是否尝试将多色文本转换为Excel中的单个单元格?如果我做对了,你会有一个字符串:
string="asdfghjkl"
(请注意:你不能调用你的变量String
,这是代码的保留关键字。想想把它称为别的东西,虽然我猜你已经在你的真实代码中执行了它,否则你将无法执行它所有)。
......并且,对于该字符串的每个字母,
for i=1 to len(string)
...你希望用户给你一个颜色。在这种情况下,您无法在Excel中执行此操作。如果不是这样,你能否更好地表达你真正的需求?
下面的代码最接近您的OP逻辑并使用包含您的字符串值的单元格.Characters
(B11)的Range
属性进行注释:
码
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
in您的模块声明头。所以你会发现String
不允许作为变量名,因为它是一个函数。
在If
条件下的额外颜色检查似乎是多余的,因为字符长得很蓝。
你似乎更喜欢在InputBox
- For
循环中重复的Next
es,可以减少到一个电话。