excel vba根据值更改文本框

时间:2015-02-06 08:14:47

标签: vba excel-vba excel

我正在尝试根据单元格中的值更改字体颜色(16,3)。 由于某种原因,它无法正常工作。 16,3的现值为94%,呈现绿色而不是琥珀色。非常感谢您的帮助。

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

如果您使用

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

而不是

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

您将看到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