Witam.
Walczę sobie już od jakiegoś czasu z pewnym arkuszem, co jakiś czas dodając więcej i więcej “ficzerów”. Tym razem miałoby się pojawić konwertowanie zakresu komórek z hiperłącza na bbcode phpBB.
Pierwotnie makro wyglądało tak:
Sub convert()
Dim c As Range, h As Hyperlink
For Each c In ActiveSheet.Range("I159:I200").SpecialCells(xlCellTypeConstants)
Set h = c.Hyperlinks(1)
c.Offset(0, 1).Value = "[url=" & h.Address & "]" & h.TextToDisplay & "[/url]"
Next c
End Sub
I w ten sposób działa. Wszystkie komórki “o jedną w prawo” (chyba dobrze zrozumiałem ten fragment kodu?) z danego zakresu pięknie konwertuje. Zupełnie się na tym nie znam, ale podjąłem próbę dodania tutaj warunku - jeżeli komórka V z tego samego wiersza wynosi 0, to formatowanie ma wyglądać nieco inaczej. Kiedy V=0
c.Offset(0, 1).Value = "[url=" & h.Address & "][color=darkblue][b]" & h.TextToDisplay & "[/b][/color][/url]"
Kiedy V=reszta
c.Offset(0, 1).Value = "[url=" & h.Address & "][color=darkblue]" & h.TextToDisplay & "[/color][/url]"
Nie wiem jednak jak złożyć to do kupy : ) Spróbowałem czegoś takiego:
Sub convert()
Dim c As Range, h As Hyperlink
For Each c In ActiveSheet.Range("I159:I200").SpecialCells(xlCellTypeConstants)
If c.Offset(0, 15).Value = 0 Then
Set h = c.Hyperlinks(1)
c.Offset(0, 1).Value = "[url=" & h.Address & "][color=darkblue][b]" & h.TextToDisplay & "[/b][/color][/url]"
Else
c.Offset(0, 1).Value = "[url=" & h.Address & "][color=darkblue]" & h.TextToDisplay & "[/color][/url]"
End If
Next c
End Sub
I nawet działa, ale tylko przy spełnieniu warunku Kiedy wartość pola V jest inna niż 0, na ekranie pojawia się następujący błąd:
91: Object variable or With block variable not set
Debugger wskazuje na linijkę numer osiem (tą po Else), jednak nie mam pojęcia o co mu chodzi 8) Nie wykonuje już dalej swojej roboty. Spróbowałem jeszcze czegoś troszeczkę bardziej szczegółowego.
Sub convert()
Dim c As Range, h As Hyperlink
For Each c In ActiveSheet.Range("I159:I200").SpecialCells(xlCellTypeConstants)
If c.Offset(0, 15).Value = 0 Then
Set h = c.Hyperlinks(1)
c.Offset(0, 1).Value = "[url=" & h.Address & "][color=darkblue][b]" & h.TextToDisplay & "[/b][/color][/url]"
Else
If c.Offset(0, 15).Value > 0 Then
c.Offset(0, 1).Value = "[url=" & h.Address & "][color=darkblue]" & h.TextToDisplay & "[/color][/url]"
Else
c.Offset(0, 1).Value = "cosnietak"
End If
End If
Next c
End Sub
No i konwertuje bez problemu na linki pogrubione (spełniony if), ale zamiast spełnić zagnieżdżony w else’ie warunek wywala drugiego else’a - “cosnietak”. Nie przerywa jednak pracy i kolejne komórki, gdzie warunek jest spełniony, zmienia tak jak sobie tego życzę.
Gdzie popełniłem - zapewne jakiś drobny - błąd? Może tutejsi spece uraczą mnie swoją pomocą? Przydałaby się bardzo.
Pozdrawiam serdecznie.
PS Nie orientujecie się może, dlaczego makro nie chce znaku # w linkach? Przez to muszę skracać linki przez pośrednie serwery Chodzi mi konkretnie o coś takiego: http://www.smanager.pl/#team.php%zm;id=3135 co jest zmieniane na http://www.smanager.pl/