Visual Basic excel,如何询问字母颜色

问题描述 投票:0回答:2

我想在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

谢谢

excel vba excel-vba
2个回答
1
投票

关于你的问题:

.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中执行此操作。如果不是这样,你能否更好地表达你真正的需求?


0
投票

下面的代码最接近您的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 Explicitin您的模块声明头。所以你会发现String不允许作为变量名,因为它是一个函数。

If条件下的额外颜色检查似乎是多余的,因为字符长得很蓝。

你似乎更喜欢在InputBox - For循环中重复的Nextes,可以减少到一个电话。

© www.soinside.com 2019 - 2024. All rights reserved.