Corel FORUM
Forum użytkowników programów firmy Corel. Grafika wektorowa, rastrowa i obróbka zdjęć cyfrowych

Makra - Pomoc z makrem - od danej liczby X do danej liczby Y

zmysl84 - 5 Maj 2011, 12:03
Temat postu: Pomoc z makrem - od danej liczby X do danej liczby Y
Mam makro, które zamienia mi wszystko na aktywnej stronie w kolejności od 1 do iluś tam (w zależności ile mam pól tekstowych).

Kod:
Sub zamienWszystkoNaAktywnejStronie()

Dim s As Shape, sr As ShapeRange, p As Page
Dim n As Long, oldStr As String

n = 1

For Each p In ActiveDocument.Pages
    Set sr = ActivePage.FindShapes(oldStr, cdrTextShape)
    For Each s In sr
        oldStr = s.Text.Story.Characters.All
        If VBA.InStr(oldStr, "") Then
           
            s.Text.Story.Characters.All = n
            n = n + 1
        End If
    Next s
Next p

End Sub


Chciałbym, aby ktoś mi pomógł z tym makrem, aby zamieniało mi do pewnej wartości.

Np. mam na aktywnej stronie 150 pól tekstowych o wartości "X" i chcę, aby makro zamieniło mi ich wartości od 1 do 100 i się zatrzymało, a te pozostałe pola zostawił w spokoju.

To makro co mam wyżej zamienia mi wszystkie pola lub te, których wartości sam podam.
Lecz, jeżeli mam wszystkie pola takie same to zamieni mi wszystko i lipa, a nie wiem jak zmodyfikować te makro, aby zmieniało mi np. tylko do liczby 100 i koniec.

(sorki, trochę zagmatwane) :P

Pomoże ktoś? Dzięki.

chezare - 5 Maj 2011, 17:44

Musisz zastosować konstrukcję typu
Kod:
For i = 1 To 10
If i > 5 Then GoTo koniec
Next i
koniec:

albo
Kod:
For i = 1 To 10
If i > 5 Then End
Next i

albo
Kod:
For i = 1 To 10
If i > 5 Then Exit For
Next i


Zatrzymać łatwo, znacznie trudniej sprawić żeby działało :-)
Jak szaman zobaczy co powypisywałem to mnie zabije :-)

zmysl84 - 5 Maj 2011, 22:20

Dzięki chezare ;-)
Czemu od razu zabije :-P Hehe!
Przecież działa! I to była bardzo pomocna p/odpowiedź.

Oto makro po modyfikacji (u mnie działa):

Kod:
Sub zamienWszystkoNaAktywnejStronieModyfikacja()

Dim s As Shape, sr As ShapeRange, p As Page
Dim n As Long, oldStr As String

For n = 1 To 10
'zmień wartości "n" od ilu do ilu ma zmienić

For Each p In ActiveDocument.Pages
    Set sr = ActivePage.FindShapes(oldStr, cdrTextShape)
    For Each s In sr
        oldStr = s.Text.Story.Characters.All
        If VBA.InStr(oldStr, "x") Then
        'wpisz w cudzysłów znak, jaki ma znaleźć i zamienić np. "x"

            s.Text.Story.Characters.All = n
            If n = 10 Then End
            'zmień wartość "n" na taką, po której chcesz, aby się zatrzymało

             n = n + 1
           
        End If
    Next s
  Next p
Next n
End Sub

chezare - 5 Maj 2011, 22:42

Zmysl84, powiedz mi, bo nie daje mi to spokoju, do czego Ci to potrzebne? Nie mogę się doszukać sensu działania tej procedury :-) . Przerób go jeszcze odrobinę tak żebyś nie musiał za każdym razem grzebać w kodzie.
zmysl84 - 5 Maj 2011, 23:25

Do ułatwienia w pracy, przy układaniu. Dotychczas układałem tyle pól tekstowych, ile potrzebowałem i wtedy startowałem z tym makrem. A teraz mam ułatwienie, bo ułożę sobie na całym arkuszu pola i wtedy zapodam od jakiego numeru ma robić i na jakim kończyć, wtedy dalej pozostałe robię podobnie lecz z innymi wartościami.

A nie umiem wstawic w makro tych box'ów, useform itp. :(

Żeby chociaż ktoś zapodał mi prosty przykład to może na jego podstawie bym spróbował. A tak lipa, nie kumam.

chezare - 5 Maj 2011, 23:27

Pachnie mi tu czymś w rodzaju druku seryjnego, a jeśli mam rację, to to co robisz można zrobić łatwiej szybciej i przyjemniej, ale może tylko tak mi się wydaje?
zmysl84 - 5 Maj 2011, 23:39

A jak byś rozwiązał to, gdybyś musiał wydrukować numery od 1 do 1000, następnie numery od 200 do 400, itd..., lecz bez tracenia arkuszy, tzn. zapełnić arkusz jak się da.
Np. na ostatnim arkuszu z pierwszej serii (ta od 1 do 1000) wejdzie 150 numerów z drugiej serii (od 200 do 400), itd... ?

A co do grzebania w kodzie to jak na razie tylko mi to pozostaje, gdyż nie kumam jak wstawiać/przypisywać w makro te box'y, useform'y, itp...
Żeby ktoś tak podał mi prosty przykład, to wtedy mógłbym na jego podstawie popróbować, a tak lipa.

/Edit
Lecę spać bo do pracy muszę wstać o 4:35 :-P :-/

chezare - 5 Maj 2011, 23:49

Zmysl84, musiałbym zobaczyć jakiś kawałek takiego pliku najlepiej opisany co jak i gdzie, bo jakoś wyobraźnia mi ostatnio szwankuje :-) Całkiem poważnie, to mam jakieś takie przeczucia, że to co robisz da się zrobić jakoś prościej, a przecież komputery są dla ludzi leniwych, którzy wolą sobie poleżeć na słońcu niż ślęczeć nad klawiaturą. Co do modyfikacji skryptu, to myślę, że da się obyć bez okien formularzy, wystarczy żeby skrypt zadał dwa pytania. Nie czuję się w tym temacie specjalistą, ale wydaje mi się, że potrafię Ci wytłumaczyć jak skrypt do tego zmusić. Pomyślę nad jakąś instrukcją :-)
Ja też bym poszedł spać, ale jeszcze muszę przygotować do wydrukowania 68 obrazków. Na szczęście nie muszę wstawać w nocy :-)

zmysl84 - 6 Maj 2011, 07:14

Pisze z kom.

Podaje przykład, jak ja to robię - załącznik.
Chyba zrozumiale :-)

chezare - 6 Maj 2011, 07:32

Cześć, tak jak myślałem, robisz kawał dobrej i niepotrzebnej nikomu roboty :-) . Dosyć pobieżnie się temu przyjrzałem ale wydaje mi się, że da się to zrobić prosto, łatwo i przyjemnie. Teraz muszę trochę popracować, ale jak wrócę to się przyjrzę temu dokładnie i wykombinuję jakiś prostszy sposób na robienie tych etykietek.
Miłego dnia.

zmysl84 - 6 Maj 2011, 07:49

Ok. Spoko. Ja właśnie pracuję :-)
Też miłego.


Powered by phpBB modified by Przemo © 2003 phpBB Group