Kategorie szkoleń | Egzaminy | Kontakt
  • 2
  • 0
  • 1

Witam.

Mam problem z pewnym zadaniem, a mianowicie chodzi o wyznaczenie kodu, który będzie zaznaczał całe wiersze i kolumny nad i obok zaznaczonej komórki i je kolorował - bez względu na to, czy w takowym zaznaczeniu/zakresie występują jakieś znaki, czy też nie. 

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Application.EnableEvents = False

Range(Target.Offset(-1, 0), Target.Offset(-1, 0).End(xlUp)).Interior.Color = vbBlue
Range(Target.Offset(0, -1), Target.Offset(0, -1).End(xlToLeft)).Interior.Color = vbBlue

Application.EnableEvents = True
End Sub

Wszystko działa ok przy tym kodzie, jeśli komórki nad i obok są puste. Problem pojawia się w sytuacji, kiedy w którąś z komórek wpiszemy jakiś znak (w związku z użyciem xlup&toleft). Wówczas obszar, który jest kolorowany, kończy się w tym miejscu, w którym występuje ten znak. 

Próbowałam już chyba wszystkiego i nie mogę wymyślić jak to napisać.

z góry dziękuję za pomoc.

Angelika_Wit
  • Zapytał
  • @ Angelika_Wit | 17.09.2019
    • 0
    • 0
    • 0

Odpowiedzi (2)

  • 0

Proponuję tak:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Cells.Interior.ColorIndex = xlNone

Application.EnableEvents = False
i = Selection.Row - 1
j = Selection.Column - 1

If Selection.Row <> 1 Then Range(Target.Offset(-1, 0), Target.Offset(-i, 0)).Interior.Color = vbBlue
If Selection.Column <> 1 Then Range(Target.Offset(0, -1), Target.Offset(0, -j)).Interior.Color = vbBlue

Application.EnableEvents = True
End Sub

Racja, Mirku, pierwsza kolumna i wiersz jest problematyczny i trzeba je wykluczyć. :)

Tomasz_Kasprzycki
  • Odpowiedział
  • @ Tomasz_Kasprzycki | 18.09.2019
    • 2
    • 4
    • 8
  • 1

Użyj po prostu adresu pierwszej komórki w danym wierszu i kolumnie. :) Dodatkowo trzeba się zabezpieczyć przed wybraniem komórki z pierwszego wiersza i kolumny:

x = Selection.Row
y = Selection.Column

Union(Range(Cells(x, 1), Cells(x, IIf(y - 1, y - 1, 1))), Range(Cells(1, y), Cells(IIf(x - 1, x - 1, 1), y))).Interior.Color = vbBlue

 

 
Mirosław_Janiak
  • Odpowiedział
  • @ Mirosław_Janiak | 18.09.2019
    • 1
    • 7
    • 1