2017-09-01 1 views
0

Ich möchte auf eine Zelle klicken und ein Makro ausführen, um Rahmen zu erstellen, wenn die Zelle nicht über die Grenze verfügt. aber ich kann es nicht tun, wenn die Zelle zusammengeführt wird.So führen Sie ein Makro aus, wenn Sie klicken Zelle VBA verbinden

Dieser Code ist nur für die normale Zell arbeiten, können nicht ausgeführt werden, wenn ich L11 und L12 fusionieren:

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 

Ich versuche, denselben Code zu verwenden und den Bereich zu ändern, aber es funktioniert nicht für die erkennen, wenn Klicken Sie auf und, um einen Rahmen für die Zusammenführungszelle zu erstellen.

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

kann mir jemand bitte eine lösung für dieses problem geben. Danke.

Antwort

0

bekam ich etwas arbeiten, um die Worksheet_SelectionChange Veranstaltung mit:

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 

Wenn Sie auf einer fusionierten Zelle klicken, es denkt, dass der Bereich die linke obere Zelle ist. In meinem Code wird die verbundene Zelle nur als "Ziel" übergeben, wodurch Sie die benötigte Referenz erhalten.

Wenn Sie dies auf einige Zellen beschränken möchten, können Sie sie nach Adressen filtern. Die

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 

Da eine fusionierte Zelle ein .AddressLocal in Form von $ TopLeftCell hat: $ Bottom, können Sie auf der Adresse der oberen linken Zelle filtern, um festzustellen, welche diese Behandlung erhalten.

+0

Vielen Dank für Ihre answer.its arbeiten Grenze erstellen merge cell, aber wie man eine Bedingung für diesen Code erstellt, funktioniert nur bei bestimmten Zellen wie L11 und L12 (ich füge L11 und L12 zusammen). –

+0

Ah! - OK. Siehe Bearbeiten. – ainwood

0

das Beste aus Ihrem Code verwenden, eine einfache einzeilige funktioniert der Trick für mich:

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 

Sie verfehlten nur Range.MergeArea;)

Verwandte Themen