2015-02-06 136 views
0

我试图根据单元格中的值更改字体颜色(16,3)。 由于某种原因,它无法正常工作。 16,3的现值是94%,并且呈现绿色而不是琥珀色。您的帮助将不胜感激。excel vba根据值更改文本框

Private Sub TextBox1_Change() 

    TextBox1.Value = Cells(16, 3).Text 
    Cells(16, 3).Font.Bold = True 

    If TextBox1.Value > 95 Then TextBox1.ForeColor = RGB(0, 128, 0) 'Green 

    If TextBox1.Value > 80 And TextBox1.Value < 95 Then TextBox1.ForeColor = RGB(255, 153, 0) 'Amber 

    If TextBox1.Value < 80 Then TextBox1.ForeColor = RGB(255, 0, 0) 'Red 

End Sub 
+0

尝试在代码行'If TextBox1.Value> 95 [...]''处添加一个断点,然后将鼠标悬停在TextBox.Value部件上,以检查代码中的值视图。我无法在代码中看到错误,因此我们需要检查文本框是否提取了正确的值。用户窗体上还是工作表本身上的这个文本框? – Aiken 2015-02-06 08:34:33

+0

我现在检查了。单元格中的值是百分比94%。我用了以下来达成它。 TextBox1.Value =格式(单元格(16,3),“00%”) – SKP 2015-02-06 08:42:17

+0

在定义textbox1值时,使用.value .text的insead。由此你会看到你的if语句中计算出来的真实价值。 – Dubison 2015-02-06 09:28:15

回答

2

如果单元格中的值是文本格式而不是实际值,则会得到该结果。有可能是这种情况吗?

其他的事情要记住,虽然这不会是你存在的问题或文本将永远是红的原因,是94%,实际上是0.94,而不是94

编辑:(我正在对我的原始答案进行编辑以回应评论,因为我需要包含代码,但这些代码并没有进入评论)

您还有其他一些问题。

第一个是,如果这是由单元格(16,3)中的值驱动的,我不确定您应该从Textbox1_Change事件驱动它。通过这样做,您正在等待某人在该文本框中输入值,并立即用该单元格中的任何值覆盖它。最好在表单加载期间填写条目。

很大程度上取决于你想要做什么,而且我没有关于这方面的信息。其次,如果您逐步浏览代码,您会发现TextBox1.Value正在返回一个字符串;它有双引号。但是你将它与一组数值相比较。

第三是你的代码没有处理(比方说)80%的精确匹配的情况。

第四是如果你直接从单元格中抽取值,它实际上是一个百分比值,它会出现为0.94,而不是百分比格式。

这处理很多。

Dim rng As Excel.Range 

Set rng = ActiveSheet.Cells(16,3) 

TextBox1.Value = Format(rng.Value, "00%") 
rng.Font.Bold = True 

'You should really implement error checking here. 
'There's no point reading the value from the textbox if it's coming from a cell. 
'Just use the cell value. 
If rng.Value >= 0.95 Then 
    TextBox1.ForeColor = RGB(0, 128, 0) 'Green 
ElseIf rng.Value >= 0.8 And rng.Value < 0.95 Then 
    TextBox1.ForeColor = RGB(255, 153, 0) 'Amber 
ElseIf rng.Value < 0.8 Then 
    TextBox1.ForeColor = RGB(255, 0, 0) 'Red 
End If 

Set rng = Nothing 
+0

我甚至尝试过0.94,但没有奏效。私人小组TextBox1_Change() TextBox1.Value =格式(信元(16,3), “00%”) 将细胞(16,3).Font.Bold =真 如果TextBox1.Value> 0.95然后TextBox1.ForeColor = RGB(0,128,0)'Green If TextBox1.Value> 0.8 And TextBox1.Value <0.94 Then TextBox1.ForeColor = RGB(255,153,0)'Amber If TextBox1.Value <0.8 Then TextBox1 .ForeColor = RGB(255,0,0)'红色 End Sub – SKP 2015-02-06 09:04:12

+0

非常感谢ALAN K.您的代码正常工作。从你学到有用的东西。 – SKP 2015-02-06 18:07:06

+0

非常欢迎。 – 2015-02-06 18:27:25

1

如果您使用的

TextBox1.Value = Cells(16, 3).Text 

TextBox1.Value = Cells(16, 3).Value 

,而不是你会看到你的if语句中使用的实际值。而结果会像下面:

如果相关的细胞的文本类型是: “常规”

enter image description here

enter image description here

enter image description here

如果您使用相关的细胞类型为“百分比”。你会得到下面的结果

enter image description here

enter image description here

enter image description here

所以,根据自己的喜好,你可以使用单元格的值一般也可以将其从百分比转换的宏一般并按原样显示。

如果您想在您的相关工作表中继续使用百分比,这意味着实际上它的值为0.XX,但它会显示为XX%,那么您可以简单地将您的值乘以100,如下所示:

TextBox1.Value = Cells(16, 3).Value * 100