Excel 对象单元格/范围不为';不支持VBA中的.Font属性

Excel 对象单元格/范围不为';不支持VBA中的.Font属性,excel,vba,Excel,Vba,我正在尝试对单元格进行颜色编码,以便在运行计算之前向用户发出关于哪个单元格的数据不正确的警告。目前正在抛出一个: 运行时错误438对象不支持属性 在尝试运行所有数据时 基本上,创建一个工作表,允许用户在组上输入一些数据,然后根据一些后端数据/限制,给出他们可以/不能做什么的答案。当用户输入数据时,我已经在初始代码中进行了一定程度的错误检查(基本上是为了尝试并鼓励他们在尝试和运行计算之前确保输入的数据有效),使用工作表更改子例程可以一次循环所有单元格(在目标范围内)不用担心 如果我尝试复制它(使用

我正在尝试对单元格进行颜色编码,以便在运行计算之前向用户发出关于哪个单元格的数据不正确的警告。目前正在抛出一个:

运行时错误438对象不支持属性

在尝试运行所有数据时

基本上,创建一个工作表,允许用户在组上输入一些数据,然后根据一些后端数据/限制,给出他们可以/不能做什么的答案。当用户输入数据时,我已经在初始代码中进行了一定程度的错误检查(基本上是为了尝试并鼓励他们在尝试和运行计算之前确保输入的数据有效),使用工作表更改子例程可以一次循环所有单元格(在目标范围内)不用担心

如果我尝试复制它(使用一个命名区域而不是change函数中的目标单元格),它似乎会做两件事之一:它会尝试通过一个单元格区域而不是单个单元格发送数据,当它尝试匹配“单元格”而不是它应该匹配的单个单元格中的数据时失败,或者,当它尝试将其着色时,将抛出438错误

Private子命令按钮1\u单击()
Dim ErrorWagonPack为布尔型,ErrorCellsNotify为布尔型,WagonPack为整数型,cel为范围型,Target为范围型
ErrorWagonPack=False
errorcellsnofenty=False
设置目标=应用程序范围(“ConsistInput”)
对于Target中的每一个cel,我认为问题就在这里的某个地方。它与cel的创建方式以及它可以具有的属性有关
Application.EnableEvents=False
货车组=0
如果Len(cel.Value)>0,则
WagonPack=Application.Index(Application.Range(“wagonda”)、Application.Match(cel.Value、Application.Range(“wagonda”)。第(1)、0、4列)
如果单元偏移量(0,1)。Mod WagonPack的值大于0,则
ErrorWagonPack=True
cel.Font.colorIndex=RGB(156,0,6)'438此处出现错误
cel.Interior.colorIndex=RGB(255199206)'438此处也有错误
如果结束
如果结束
下一个细胞
如果ErrorWagonPack=True或ErrorCellsNotify=True,则
出口接头
如果结束
"算数,
Application.EnableEvents=True
端接头

理想情况下,我希望运行代码,用不正确的数据给导致问题的单元格着色,然后如果没有抛出任何错误变量,则运行计算,但438错误似乎是症结所在。我几乎愿意打赌,这是一件简单的事情,我只是错过了,但无法找到它。可能没有帮助,我对VBA还是很熟悉。

。ColorIndex
不正确。使用
.Color

Private Sub CommandButton1_Click()
    Dim ErrorWagonPack As Boolean, ErrorCellsNotEmpty As Boolean, WagonPack As Integer, cel As Range, Target As Range

    ErrorWagonPack = False
    ErrorCellsNotEmpty = False
    Set Target = Application.Range("ConsistInput")

    For Each cel In Target 'issue is here somewhere I think. It's related to how the cel is created and as such what properties it can have
        Application.EnableEvents = False
        WagonPack = 0
        If Len(cel.Value) > 0 Then
            WagonPack = Application.Index(Application.Range("WagonData"), Application.Match(cel.Value, Application.Range("WagonData").Columns(1), 0), 4)
            If cel.Offset(0, 1).Value Mod WagonPack > 0 Then
                ErrorWagonPack = True
                cel.Font.Color = RGB(156, 0, 6) '438 error here
                cel.Interior.Color = RGB(255, 199, 206) '438 error here too
            End If
        End If
    Next cel

If ErrorWagonPack = True Or ErrorCellsNotEmpty = True Then
    Exit Sub
End If

'calculate stuff
Application.EnableEvents = True
End Sub

.ColorIndex
属性介于1和56之间:

Sub TestMe()

    Dim cel As Range
    Set cel = Worksheets(1).Range("A1")
    cel.Interior.ColorIndex = 1
    cel.Font.ColorIndex = 20

End Sub
2个RGB值远远超过56:

Sub TestMe()

    Debug.Print RGB(156, 0, 6)          '393372
    Debug.Print RGB(255, 199, 206)      '13551615

End Sub
因此,安全使用的唯一值是56个红色值,介于:

cel.Font.ColorIndex=RGB(56,0,0)

cel.Font.ColorIndex=RGB(1,0,0)

或者,在不使用
ColorIndex
的情况下,
Range().Font.Color
支持完整的RGB值:

Range("A1").Font.Color = RGB(100, 20, 255)

这实际上是美国的颜色拼法。对不起,我是澳大利亚人。。。habitI错过了你也使用了错误的属性。哈哈,我看到你也做了同样的事情。。为什么语言不能是通用的!?是的,我也被抓住了。我知道这很简单。我应该添加
。ColorIndex
是介于
1
56
之间的值。它代表一些颜色,但不是全部(显然)。颜色与完整的RGB完美配合。带有正确数字的ColorIndex也可以使用。非常感谢。我知道这很简单。当你使用美国的颜色拼写法(习惯的力量)时也会有所帮助