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

Tworzę makro, które ma za zadanie skopiować zawartość zaznaczonego wiersza i skopiowanie go powyżej. Prosta sprawa. Komplikacje pojawiają się kiedy w konkretnej kolumnie makro ma za zadanie stworzyć formatowanie warunkowe sprawdzane za pomocą formuły która odnosi się do komórki po prawej.

udało mi się stworzyć coś takiego:

Sub nowy()
'
' nowy Makro
'

'
ActiveCell.Rows("1:1").EntireRow.Select
Selection.Copy
Selection.Insert Shift:=xlDown
ActiveCell.Rows("1:1").EntireRow.Select
Cells(Application.ActiveCell.Row, 53).Select

Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=NIE((ActiveCell.Offset(0,1).Address)=""TAK"")"

Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
End Sub

 

Makro działa tylko kiedy w miejscu boldowanego wyrażenia wpisuje konkretny adres komórki. Chciałbym żeby adres był relatywny do ostatniego Select.

Czego brakuje?

Jerzy_Święcicki
  • Zapytał
  • @ Jerzy_Święcicki | 30.01.2021
    • 1
    • 0
    • 0

Odpowiedź (1)

  • 0

 Pogrubiony fragment podajesz wewnątrz cudzysłowów, czyli jest on traktowany jako zwykły ciąg tekstu, a nie fragment kodu. Musisz wyciągnąć go poza cudzysłowy i połączyć z formułą np. operatorem "&":

Cells(ActiveCell.Row, 53).FormatConditions.Add Type:=xlExpression, Formula1:="=" & ActiveCell.Offset(0, 1).Address & "<>""TAK"""

 Nie wiem, po co zastosowałeś kombinację "nie(równa się)", skoro można napisać po prostu "<>", ale jeżeli koniecznie tak chcesz, to w VBA musisz używać angielskich nazw funkcji: "=NOT(...".

 I rzecz, którą będę powtarzał do znudzenia: unikaj konstrukcji Cells.Select, Selection.Cośtam, jedynie słuszna wersja to Cells.Cośtam.

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