2016-03-16 158 views
0

我有三列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

+0

由于您有一个命令按钮,并且想要控制更新,您必须使用VBA。但是,如果您想自动更新格式(带或不带删除线),那么您还可以使用条件格式和无VBA代码来完成此操作。 – Ralph

+0

可用性列由用户操纵,一旦用户添加或删除了可用性值中的数字,我想点击命令按钮,员工姓名和号码将得到删除线或删除一个,或者没有任何变化发生在员工编号和ID –

+0

我已经添加了我正在使用的文件的图片...您可以看到可用性值是第4列中的那些数字...所以我想要发生的是如果这些值中的任何一个显示的变化没有任何变化,或者如果添加了值,删除线就会消失。但那些在绿色和橙色的底部没有可用性价值我不希望这些得到删除线,因为他们永远不会改变..我只需要这些值从某个东西改变为无或从无到有 –

回答

0

有关你的问题,任务可以在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事件:它将在列“D”中的任何更改时自动运行。或者,您可以将其封装到您的Sub AircraftChange(ByVal Target As Range)中并在按钮单击事件中运行它。此外,您可以设置与列“B”最后一行相关的数组ColumArray(65000)的最大索引(按照您的代码:endrow = Cells(Rows.count,“B”)。End(xlUp).Row) 。

最普遍的解决方案(虽然有点更长)将是对Workbook_Open创建放置在加入Excel中VBA代码模块(例如模块1)存储的值的全局阵列,例如,Worksheet(1)列“d”,并添加Sub程序就像上面的Worksheet(1)所示。

希望这有助于。

相关问题