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

FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  GrupyGrupy
RejestracjaRejestracja  ZalogujZaloguj  DownloadDownload

Poprzedni temat «» Następny temat
Makro do grupowania obiektów wewnątrz warstw
Autor Wiadomość
TheMan258 
Początkujący
TheMan258


Wersja CorelDRAW: x5
Wiek: 32
Dołączył: 22 Lut 2021
Posty: 14
Skąd: Kraków
  Wysłany: 22 Luty 2021, 16:47   Makro do grupowania obiektów wewnątrz warstw

Witam wszystkich,
Potrzebuję porady, pracuje w Corelu x5 i mam napisane różne makra, z których korzystam, na co dzień. Mam makro, które rozdziela obiekty na osobne warstwy następnie je sobie rozgrupowuję i np. zmieniam coś w tej rozgrupowanej grupie. I tu mam problem, ponieważ potrzebowałbym takie makro, które zgrupuje wszystkie te obiekty, ale w taki sposób, aby te kształty zostały w swoich warstwach tak jak w załączniku. (Makro które grupuje obiekty wewnątrz warstw)
Mam takie makro, ale działa tylko wtedy gdy warstwa nazywa się ,,Warstwa 1,,.
Nie wiem, czy dobrze myślę, ale próbowałem coś takiego dopisać
Kod:
( "Warstwa_" &)
jednak to nie działa.

Kod:
Sub Grupowanie()
    Dim sr As ShapeRange, s As Shape
    Set sr = ActivePage.Layers("Warstwa 1").Shapes.All
    If sr.count = 0 Then MsgBox "Żaden kształt nie jest zaznaczony": Exit Sub
    Set s = sr.Group
End Sub


Czasem mam 100 warstw z kształtami i zajmuje mi to trochę czasu zgrupować te wszystkie obiekty. Byłbym bardzo wdzięczny o wskazanie sposobu, w jaki sposób taką operację przeprowadzić.

Warstwy.jpg
Pobierz Plik ściągnięto 253 raz(y) 638.98 KB

 
 
maroQ 
Doradca


Pomógł: 16 razy
Wiek: 39
Dołączył: 08 Lut 2011
Posty: 117
Skąd: Kalisz
  Wysłany: 27 Czerwiec 2021, 23:12   

Rozumiem, że używasz pętli dla warstw. W takim przypadku należy jeszcze aktywować warstwę na której się operuje w przeciwnym wypadku zawsze pracujemy na aktywnej. Alternatywnie po zgrupowaniu można obiekty przenieść na inną warstwę.

Kod:
Sub GroupAllOnPage()
    Dim sr As ShapeRange, s As Shape
    Dim l As Layer
    Dim info As String
   
    For Each l In ActivePage.Layers
        If l.IsDesktopLayer Or l.IsSpecialLayer Or l.IsGridLayer Or l.IsGuidesLayer Or l.Editable = False Then
            GoTo skip
        End If
        l.Activate
       
        Set sr = l.Shapes.All
        If sr.Count = 0 Then
            info = info & "Na warstwie " & l.Name & " nie znaleziono obiektow!" & vbNewLine
        ElseIf sr.Count = 1 Then
            If sr.Item(1).Type = cdrGroupShape Then
                info = info & "Obiekty na warstwie " & l.Name & " zostaly uprzednio zgrupowane" & vbNewLine
            Else
                info = info & "Na warstwie " & l.Name & " byl tylko jeden obiekt wiec nie zostal zgrupowany" & vbNewLine
            End If
        Else
            Set s = sr.Group
            info = info & "Zgrupowano " & sr.Count & " krzywych na warstwie " & s.Layer.Name & vbNewLine
            's.MoveToLayer l
        End If
skip:
    Next l

W edytorze VBA odpal CTRL+G lub Immediate Windows z menu View by zobaczyć konsolę.

Makro pomija warstwy specjalne oraz nieedytowalne.

Linijka: Set s = sr.Group jest zbędna gdyż sr.Group nie wymaga przypisania do zmiennej. Jednak zostawiłem ją dla celów diagnostycznych by podglądać na jakiej warstwie leży nasz kształt s.
 
 
TheMan258 
Początkujący
TheMan258


Wersja CorelDRAW: x5
Wiek: 32
Dołączył: 22 Lut 2021
Posty: 14
Skąd: Kraków
Wysłany: 18 Wrzesień 2021, 13:45   

Dziękuję bardzo, makro wspaniale działa :dances
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Nowe zasady dotyczące cookies. Wykorzystujemy pliki cookies, aby nasz serwis lepiej spełniał Państwa oczekiwania. Można zablokować zapisywanie cookies, zmieniając ustawienia przeglądarki.
         
Strona wygenerowana w 0.12 sekundy. Zapytań do SQL: 15