我正在为甘特图电子表格写一些VBA。
我在第5行有3个月的日期,我可以通过在更新整个工作表的单元格中输入日期来设置开始日期。
我的图表L6有一系列单元格:CZ42。对于此范围,如果第5行中的单元格是该月的第1个,则该列中的每个单元格都将具有灰色虚线左边框,而右侧没有任何内容。这就是我想要的方式。
问题是它在单元格的顶部和底部添加了一个灰色边框,对于第7行到第41行是可以的,但是对于第6行,我想要一个黑色的顶部边框,对于第42行,我想要一个黑色的底部边框。
我添加了这部分代码试图对此问题进行排序,但语法错误,检查是否在第6行
' If this is the first row (6) in the range then
' add a black continuous border to the top
If Cells(6, i) Then
With .Borders(xlEdgeTop)
.ColorIndex = 1
.Weight = xlThin
.LineStyle = xlContinuos
End With
End If
这是我的全部代码
Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long
Dim CuDate As Date
For i = 12 To 104
CuDate = Cells(5, i).Value
' Are we on the 1st day of the month
If Day(CuDate) = 1 Then
With Range(Cells(6, i), Cells(42, i))
' If this is the first row (6) in the range then
' add a black continuous border to the top
If Cells(6, i) Then
With .Borders(xlEdgeTop)
.ColorIndex = 1
.Weight = xlThin
.LineStyle = xlContinuos
End With
End If
With .Borders(xlEdgeLeft)
.ColorIndex = 15
.Weight = xlThin
.LineStyle = xlDot
End With
With .Borders(xlEdgeRight)
.LineStyle = xlLineStyleNone
End With
End With
Else
With Range(Cells(6, i), Cells(42, i))
' If this is the last row (42) in the range then
' add a black continuous border to the bottom
If Cells(42, i) Then
With .Borders(xlEdgeBottom)
.ColorIndex = 1
.Weight = xlThin
.LineStyle = xlContinuos
End With
End If
With .Borders(xlEdgeLeft)
.LineStyle = xlLineStyleNone
End With
With .Borders(xlEdgeRight)
.LineStyle = xlLineStyleNone
End With
End With
End If
Next
End Sub
答案 0 :(得分:6)
此行不符合您的预期:If Cells(6, i) Then
相当于说:If Cells(6, i).Value = True Then
,即“如果第6行和列i
上的单元格内容在隐式强制转换为布尔值时评估为True
,则”,显然不是你想要的。相反,尝试:
If ActiveCell.Row = 6 Then
您的代码中If Cells(42, i) Then
的原因也相同。
答案 1 :(得分:2)
[更新: Jean-FrançoisCorbett更正了您的代码逻辑:检查活动单元格是否在第6行。但是由于输入错误,代码不会产生顶部和底部边框。 ]
您的代码无法编译。请考虑在代码模块顶部使用Option Explicit
。我可以复制您的问题的唯一方法是删除Option Explicit
。我设置了VBA编辑器,因此它会自动将Option Explicit
放在新模块的顶部。
LineStyle属性必须是XlLineStyle常量之一:
在您的代码中,您编写了 xlContinuos 而非 xlContinuous 。一旦你进行了这个修正,代码应该可行。
此外,这是一个小问题,但从技术上讲,Worksheet_Change事件应声明如下:
Private Sub Worksheet_Change(ByVal Target As Range)
我建议您利用VBA编辑器的内置功能以及帮助文档吗?