更改单元格值格式

时间:2016-03-16 16:33:49

标签: excel vba excel-vba

我有一张包含三列的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

有人可以帮助我吗?

提前谢谢你 enter image description here

1 个答案:

答案 0 :(得分:0)

与您的问题相关,可以使用Array在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

请注意,此过程不需要Button事件:它将在Column&#34; D&#34;中的任何更改时自动运行。或者,您可以将其封装到Sub AircraftChange(ByVal Target As Range)中并在Button click事件上运行它。此外,您可以设置与列&#34; B&#34;相关的数组ColumArray(65000)的最大索引。最后一行(根据你的代码:endrow = Cells(Rows.count,&#34; B&#34;)。End(xlUp).Row)。

最通用的解决方案(虽然稍微长一些)将创建一个放置在添加的Excel VBA代码模块(例如Module1)中的全局数组,以存储例如Worksheet(1)列&#34; D&的值#34;在Workbook_Open上,并将如上所示的Sub过程添加到工作表(1)。

希望这可能会有所帮助。