2017-09-01 82 views
0

我想单击一个单元格并运行一个宏以创建边框,如果单元格没有它,并且单元格具有边框则会删除边框。但是当细胞合并时我无法做到。单击合并单元格VBA时如何运行宏

此代码只工作了正常细胞,如果我合并的L11和L12不能运行:

If Not Intersect(Target, Range("L11")) Is Nothing Then 

     If ActiveSheet.Range("L11").Borders(xlEdgeBottom).LineStyle <> xlLineStyleNone And ActiveSheet.Range("L11").Borders(xlEdgeTop).LineStyle <> xlLineStyleNone Then 

      'if has border erase it. 
      ActiveSheet.Range("L11").Borders.LineStyle = xlNone 


     Else 

      'if doesn't have border create it. 
      ActiveSheet.Range("L11").Borders.LineStyle = xlContinuous 

     End If 

我尝试使用相同的代码,并更改范围,但它并不适用于检测工作的时候单击并为合并单元格创建边框。

If Intersect(Target, Range("$M$11:$N$11")) Is Nothing Then 

有人可以请我给我解决这个问题。 谢谢。

回答

0

我得到的东西用Worksheet_SelectionChange事件工作:

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
If Target.Borders(xlEdgeBottom).LineStyle <> xlLineStyleNone And 
Target.Borders(xlEdgeTop).LineStyle <> xlLineStyleNone Then 
    'if has border erase it. 
    Target.Borders.LineStyle = xlNone 
Else 
    'if doesn't have border create it. 
    Target.Borders.LineStyle = xlContinuous 
End If 
End Sub 

当您单击合并单元格,它认为该范围是左上角单元格。在我的代码中,合并的单元格只是作为“目标”传递的,它给了你需要的引用。

如果你想限制这只有一些单元格,你可以通过地址过滤它。该

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
'//Filter to limit behavior to cell we want: 
If InStr(1, Target.AddressLocal, "$L$11") Then  '//for a merged cell, .AddressLocal looks something like $L$11:$L$12 
    If Target.Borders(xlEdgeBottom).LineStyle <> xlLineStyleNone And 
    Target.Borders(xlEdgeTop).LineStyle <> xlLineStyleNone Then 
     'if has border erase it. 
     Target.Borders.LineStyle = xlNone 
    Else 
     'if doesn't have border create it. 
     Target.Borders.LineStyle = xlContinuous 
    End If 
End If 
End Sub 

由于合并单元格在$ TopLeftCell形式有.AddressLocal:$ BottomRightCell,您可以在左上角单元的地址进行过滤,以确定哪些接受这种治疗。

+0

感谢您answer.its工作,上创建边界合并单元格,但是,如何为此代码创建条件仅适用于特定单元格,如L11和L12(我合并L11和L12)。 –

+0

啊! - 好。请参阅编辑。 – ainwood

0

使用的大部分代码,一个简单的单行的伎俩对我来说:

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    If Not Intersect(Target, Range("L11")) Is Nothing Then Range("L11").MergeArea.Borders.LineStyle = (Range("L11").MergeArea.Borders.LineStyle = 1) + 1 
End Sub 

你只是错过了Range.MergeArea;)

相关问题