Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Vba Excel - Makro wyszukujące ciąg znaków i zmieniające jego czcionkę

fulbin88 17 Oct 2012 20:05 4974 10
  • #1
    fulbin88
    Level 9  
    Witam,

    Mam problem z dokończeniem makra w vba, mianowicie chce wyszukać wyrazy (znaczniki html) wpisane do komórek w excel-u, w całym arkuszu. Arkusz posiada 5 kolumn i około 6000 wierszy. Po wyszukaniu wyborderować i zmienić kolor ich czcionki na czerwony. Oto kod który udało mi się zrobić. Mam problem również z ilością znaków zaznaczanych. Aktualnie jest ich 6, czy można zamienić tą wartość na funkcje która zlicza ile znaków ma dany znacznik?
    Code: vb
    Log in, to see the code



    Edit

    poradziłem sobie z zaznaczaniem odpowiedniej ilości znaków poleceniem "len"
    Code: vb
    Log in, to see the code

    Pozostaje mi tylko problem wpisania zakresu wyszukiwania, bo póki co wyszukuje mi tylko w jednej komórce A1. Wpisanie zakresu: "A1:AE" powoduje błąd 1004. Proszę o pomoc.
    Ethernet jednoparowy (SPE) - rozwiązania w przemyśle. Szkolenie 29.09.2021r. g. 11.00 Zarejestruj się za darmo
  • Helpful post
    #2
    adamas_nt
    Moderator of Programming
    fulbin88 wrote:
    Mam problem z dokończeniem makra w vba, mianowicie chce wyszukać wyrazy (znaczniki html) wpisane do komórek w excel-u, w całym arkuszu. Arkusz posiada 5 kolumn i około 6000 wierszy. Po wyszukaniu wyborderować i zmienić kolor ich czcionki na czerwony.
    Zdaje się, że źle się do tego zabierasz. Na razie pętla mieli A1 i na oko będzie mielić bez końca (pętla nieskończona)
    fulbin88 wrote:
    Mam problem również z ilością znaków zaznaczanych. Aktualnie jest ich 6, czy można zamienić tą wartość na funkcje która zlicza ile znaków ma dany znacznik?
    Patrz pytania.

    Najwydajniejsza w tym przypadku powinna być pętla For Each kom in UsedRange, w której sprawdzasz kom.Value i przypisujesz wartości właściwościom kom.Font.
    Nie opisujesz dokładnie jakie są warunki kolorowania, zastanawiam się nad zasadnością zastosowania tablicy. Jeśli mają być wyróżnione tylko znaczniki, pojawiają się pytania:
    Czy ciąg Np "<html>tu jakiś kod</html>" jest możliwy w pojedynczej komórce?
    Czy w/w powinien wyglądać mniej więcej (czerwony jest zastrzeżony w tym dziale) tak: <html>tu jakiś kod</html>
  • #3
    fulbin88
    Level 9  
    Ciąg "<html>tu jakiś kod</html>" jest jak najbardziej możliwy w jednej komórce. Co do ostatniego zdania, to tak właśnie chciałbym sformatować moje znaczniki.
  • Helpful post
    #4
    adamas_nt
    Moderator of Programming
    W takim razie to
    Code: vb
    Log in, to see the code
    nie zadziała. InStr zwróci Ci pozycję w ciągu i to należałoby wykorzystać...
  • #5
    fulbin88
    Level 9  
    Mój poziom programowania makr przeszkadza w zrozumieniu wskazówek. Mógłbym prosić jaśniej?
  • #6
    adamas_nt
    Moderator of Programming
    fulbin88 wrote:
    Mój poziom programowania makr przeszkadza w zrozumieniu wskazówek
    Hmmm. Kluczowe elementy już wykorzystujesz, więc... Może coś źle tłumaczę ;)
    Sprawdź poniższy kod i przeanalizuj uruchamiając krokowo (klawisz F8 w edytorze VBA). Obserwuj wartość zmiennej "i" reprezentującej pozycję pierwszego znaku szukanego ciągu.
    Code: vb
    Log in, to see the code
    LCase, bo może zdarzyć się "<html>" lub "<HTML>".
  • #7
    fulbin88
    Level 9  
    Wartość "i" sprawdziłem po każdym kroku (F8) bez zmian: 0. Przechodzę po kolei od początku kodu, ale przy przejściu z pierwszej pętli for dalej, wyskakuje błąd 424 "Object requiret"
  • #9
    fulbin88
    Level 9  
    O taki coś mi chodziło, świetna robota! Jeszcze tylko muszę poszukać funkcji lub polecenia odpowiedzialnego za zaznaczenie takich samych tagów, bo np w jednej komórce mam <html> blabla<html> to zaznaczy mi tylko pierwszy znacznik.
  • Helpful post
    #10
    adamas_nt
    Moderator of Programming
    Trzeba było od razu ;) Można zamiast instrukcji If zastosować pętlę Do
    Code: vb
    Log in, to see the code
  • #11
    fulbin88
    Level 9  
    O to właśnie chodziło. Dziękuje :) Powiem szczerze to "moje" pierwsze makro, na pewno nie ostatnie. Połknąłem bakcyla :) Dziękuje za pomoc!