Vba 更改单元格值格式

Vba 更改单元格值格式,vba,excel,Vba,Excel,我有一个excel表格,它有三列: 员工编号 员工姓名 可用性(有些已经没有任何值) 我试图做的是,当可用性值从一个数字变为零时,员工编号和与该行关联的员工姓名将被删除。 此外,如果添加了可用性编号,删除线将消失。我希望在按下命令按钮时运行此代码。到目前为止,当按下按钮时代码会运行,但是那些已经没有任何变化的可用性值会被删除。是否有一种方法可以使只有可用性值变为“无”而不是“已无”的值才能获得删除线? 我已经在下面写了一些代码,但我不知道我的方向是否正确 Sub AircraftChange(B

我有一个excel表格,它有三列:

员工编号

员工姓名

可用性(有些已经没有任何值)

我试图做的是,当可用性值从一个数字变为零时,员工编号和与该行关联的员工姓名将被删除。 此外,如果添加了可用性编号,删除线将消失。我希望在按下命令按钮时运行此代码。到目前为止,当按下按钮时代码会运行,但是那些已经没有任何变化的可用性值会被删除。是否有一种方法可以使只有可用性值变为“无”而不是“已无”的值才能获得删除线? 我已经在下面写了一些代码,但我不知道我的方向是否正确

Sub AircraftChange(ByVal Target As Range)
Dim watchrange As Range, r As Range, rw As Long
Dim intersectrange As Range, endrow As Long

endrow = Cells(Rows.count, "B").End(xlUp).Row
Set watchrange = Range("E2:E" & endrow)
Set intersectrange = Intersect(Target, watchrange)

If intersectrange Is Nothing Then Exit Sub

For Each r In intersectrange
rw = r.Row
If r.Value = "" Then
    Range("B" & rw & ":C" & rw).Font.Strikethrough = True
Else
    Range("B" & rw & ":C" & rw).Font.Strikethrough = False
End If
Next r
End Sub
有人能帮我吗

先谢谢你

与您的问题相关,可以在VBA中使用数组在D列中存储以前的值来完成任务,如以下代码段所示:

Dim ColumArray(65000) As String

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If Target.Column = 4 Then
        ThisRow = Target.Row
        If Target.Value = "" And ColumArray(ThisRow) <> "" Then
            Range("B" & ThisRow & ":C" & ThisRow).Font.Strikethrough = True
        Else
            Range("B" & ThisRow & ":C" & ThisRow).Font.Strikethrough = False
        End If
        ColumArray(ThisRow) = Target.Value
    End If
End Sub
Dim Column数组(65000)作为字符串
私有子工作表_变更(ByVal目标为Excel.Range)
如果Target.Column=4,则
ThisRow=Target.Row
如果Target.Value=“”和ColumArray(ThisRow)”,则
范围(“B”和ThisRow&“:C”和ThisRow)。Font.streethrough=True
其他的
范围(“B”和ThisRow&“:C”和ThisRow)。Font.streethrough=False
如果结束
ColumArray(ThisRow)=目标值
如果结束
端接头
请注意,此过程不需要按钮事件:它将在“D”列中的任何更改时自动运行。或者,您可以将其封装到Sub
AircraftChange(ByVal目标作为范围)
中,并在按钮单击事件上运行它。此外,您还可以设置与列“B”最后一行相关的数组columnarray(65000)的最大索引(根据您的代码:endrow=Cells(Rows.count,“B”).End(xlUp).row)

最通用的解决方案(虽然稍微长一点)是在添加的Excel VBA代码模块(例如模块1)中创建一个全局数组,以存储工作表(1)的值,例如,
工作簿打开
上的列“D”,并将如上所示的子过程添加到工作表(1)


希望这会有所帮助。

因为您有一个命令按钮,并且希望控制更新,所以必须使用VBA。但是如果要自动更新格式(带删除线或不带删除线),然后,您还可以使用条件格式和无VBA代码来完成此操作。可用性列由用户操作,一旦用户在可用性值中添加或删除一个数字,我想点击命令按钮,员工姓名和编号将被删除或删除,或者如果没有任何更改员工编号没有任何变化,IDI已经添加了我正在使用的文件的图片。。。您可以看到可用性值是第4列中的数字。。。所以我想要发生的是,如果显示的任何值变为零,它们会被划掉,或者如果添加了一个值,删除线就会消失。。。但是那些在底部的绿色和橙色没有可用性值的,我不希望它们被删除,因为它们永远不会改变。。我只需要那些从某物变为无或从无变为某物的值如果你想与以前的值(按下按钮时)进行比较,那么你需要知道以前的值。因此,您必须将该表复制到另一个(隐藏)工作表。然后有人可以按下按钮,您可以比较这两个列表,看看是否有更改。使用@Ralph建议的条件格式:它将根据您设置的条件自动更新字体属性(或任何其他属性)(无需VBA)。顺致敬意,