[Excel] Makro konwertowania linków i kłopotliwy warunek


(Pawelekgno) #1

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 :slight_smile: 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ą? :slight_smile: 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 :frowning: Chodzi mi konkretnie o coś takiego: http://www.smanager.pl/#team.php%zm;id=3135 co jest zmieniane na http://www.smanager.pl/


(Ipsd) #2

wyciągnij Set h = c.Hyperlinks(1) przed warunek


(Pawelekgno) #3

Bomba szefie, hula aż miło :slight_smile: Wielkie dzięki.

"Gdzie popełniłem - zapewne jakiś drobny - błąd?" :wink: