2017-09-01 18 views
0

セルをクリックしてセルがない場合はマクロを実行し、セルにはボーダーがある場合はボーダーを消去します。セルが結合されたときにはできません。マージセルをクリックしたときにマクロを実行する方法

このコードは、唯一正常な細胞のために働いている、私は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

ああ! - OK。編集を参照してください。 – ainwood

0

、シンプルな1行が私のためのトリックを行います。

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を逃し;)

関連する問題