Excel Forum - Porady, Pomoc,  Excel Help, Excel FAQ Strona Główna
 FAQ  RegulaminRegulamin  Szukaj   Użytkownicy   Grupy   Rejestracja   Profil   Twoje wiadomości   Zaloguj 


Poprzedni temat «» Następny temat
ID tematu: 73999 Skopiuj do schowka Zapisywanie arkuszy na podstawie listy
Autor Wiadomość
Ayala 
ExcelGaduła 500+


Wersja: Win Office 2019
Posty: 503
Wysłany: 18-01-2023, 14:43   Zapisywanie arkuszy na podstawie listy

Witam
Zastosowałem makro z innego projektu do zapisywania nowych arkuszy na podstawie listy pracowników.
Dla nowego pracownika działa dobrze.
Jednak gdy zmienię dane w arkuszu Grafik K1 oraz E3:E368 oraz G3:G368 to nie aktualizują się mi te dane w starych arkuszach wcześniej utworzonych.
Może jakiś pomysł jak to makro zmodyfikować.
Zastosowałem ale nie wszystko dla mnie jest jasne i nie potrafię tego zmienić.


Kod:
Sub KopiujArkusze()
    Dim Rst As Object
    Dim sht As Worksheet
    Dim rng As Range
    Dim nazwa As String
    Dim nrArk As Long
   
    Set rng = Sheets("Dane pracowników").Range("A1").CurrentRegion
    Set Rst = RstFromRange(rng)

    With Rst
        .Sort = "Nazwisko, Imie ASC"
        .MoveFirst
        nrArk = 2
        Do While Not .EOF
            nazwa = Mid(!Nazwisko & " " & !Imie, 1, 31)
            On Error Resume Next
            Set sht = Sheets(nazwa)
            On Error GoTo 0
            If sht Is Nothing Then
                Sheets("Grafik").Copy after:=Sheets(nrArk)
                Set sht = ActiveSheet
                sht.Name = nazwa
                'sht.Range("G4") = ![Ulga podatkowa]
                sht.Range("L2") = !Id_kalendarza
                sht.Range("K1") = Worksheets("Grafik").Range("K1").Value '!Iden
                'sht.Range("G3:G368") = Worksheets("Grafik").Range("G3:G368").Value '!Iden
            End If
            nrArk = sht.Index
            Set sht = Nothing
            .MoveNext
        Loop
    End With
   
    Set Rst = Nothing
   
   Call Grafik_Odkryj
End Sub

Private Function RstFromRange(oRng As Range) As Object
    Dim oXML As Object
   
    Set RstFromRange = CreateObject("ADODB.Recordset")
    Set oXML = CreateObject("MSXML2.DOMDocument")
       
    oXML.LoadXML oRng.Value(12)
   
    RstFromRange.Open oXML

End Function



Pozdrawiam

Grafik 2023-01-18 test.xlsm
Pobierz Plik ściągnięto 7 raz(y) 326.42 KB

ID posta: 424314 Skopiuj do schowka
 
 
Tajan


Pomógł: 5234 razy
Posty: 11412
Wysłany: 18-01-2023, 15:47   

Aby aktualizowały się wcześniej utworzone arkusze, to powinno być tak:
Kod:
Sub KopiujArkusze()
    Dim Rst As Object
    Dim sht As Worksheet
    Dim rng As Range
    Dim nazwa As String
    Dim nrArk As Long
   
    Set rng = Sheets("Dane pracowników").Range("A1").CurrentRegion
    Set Rst = RstFromRange(rng)

    With Rst
        .Sort = "Nazwisko, Imie ASC"
        .MoveFirst
        nrArk = 2
        Do While Not .EOF
            nazwa = Mid(!Nazwisko & " " & !Imie, 1, 31)
            On Error Resume Next
            Set sht = Sheets(nazwa)
            On Error GoTo 0
           
           If sht Is Nothing Then
                Sheets("Grafik").Copy after:=Sheets(nrArk)
                Set sht = ActiveSheet
                sht.Name = nazwa
            End If

           'sht.Range("G4") = ![Ulga podatkowa]
            sht.Range("L2") = !Id_kalendarza
            sht.Range("K1") = Worksheets("Grafik").Range("K1").Value '!Iden
           sht.Range("B3:G368") = Worksheets("Grafik").Range("B3:G368").Value '!Iden
         
            nrArk = sht.Index
            Set sht = Nothing
            .MoveNext
        Loop
    End With
   
    Set Rst = Nothing
   
   Call Grafik_Odkryj
End Sub
ID posta: 424320 Skopiuj do schowka
 
 
Ayala 
ExcelGaduła 500+


Wersja: Win Office 2019
Posty: 503
Wysłany: 20-01-2023, 15:02   

Przy zapisywaniu arkuszy na podstawie listy nazwisk w komórce L1 nazwisko zapisuje się formułą.
Może dałoby się zmodyfikować makro, żeby nazwisko (z nazwy arkusza w komórce L1 zapisywało się jak wartość.
Kod:
Sub KopiujArkusze()
    Dim Rst As Object
    Dim sht As Worksheet
    Dim rng As Range
    Dim nazwa As String
    Dim nrArk As Long
   
    Set rng = Sheets("Dane pracowników").Range("A1").CurrentRegion
    Set Rst = RstFromRange(rng)

    With Rst
        .Sort = "Nazwisko, Imie ASC"
        .MoveFirst
        nrArk = 3 '2
        Do While Not .EOF
            nazwa = Mid(!Nazwisko & " " & !Imie, 1, 31)
            On Error Resume Next
            Set sht = Sheets(nazwa)
            On Error GoTo 0
           
           If sht Is Nothing Then
                Sheets("Grafik").Copy after:=Sheets(nrArk)
                Set sht = ActiveSheet
                sht.Name = nazwa
            End If

           'sht.Range("G4") = ![Ulga podatkowa]
            sht.Range("L2") = !Id_kalendarza
            sht.Range("K1") = Worksheets("Grafik").Range("K1").Value '!Iden
            sht.Range("B3:G368") = Worksheets("Grafik").Range("B3:G368").Value '!Iden
         
            nrArk = sht.Index
            Set sht = Nothing
            .MoveNext
        Loop
    End With
   
    Set Rst = Nothing
   
   Call GoToGrafik
End Sub


Formuła w komórce L1 przeszkadza w działaniu natępnych kodów.
Może jakiś pomysł na rozwiązanie tego problemu

Grafik_test.xlsm
Pobierz Plik ściągnięto 8 raz(y) 316.18 KB

ID posta: 424389 Skopiuj do schowka
 
 
Ayala 
ExcelGaduła 500+


Wersja: Win Office 2019
Posty: 503
Wysłany: 20-01-2023, 21:50   

Problem z formułą opanowałem
Chciałbym jeszcze zmienić wybieranie nazwisk z imieniem z jednej kolumny Nazwisko_Imie.
Może jakaś podpowiedź co trzeba zmienić w kodzie
Kod:
Sub KopiujArkusze()
    Dim Rst As Object
    Dim sht As Worksheet
    Dim rng As Range
    Dim nazwa As String
    Dim nrArk As Long
   
    Set rng = Sheets("Nazwiska").Range("A1").CurrentRegion
    Set Rst = RstFromRange(rng)

    With Rst
        .Sort = "Nazwisko, Imie ASC"
       
        .MoveFirst
        nrArk = 3 '2
        Do While Not .EOF
            nazwa = Mid(!Nazwisko & " " & !Imie, 1, 31)
           
            On Error Resume Next
            Set sht = Sheets(nazwa)
            On Error GoTo 0
           
           If sht Is Nothing Then
                Sheets("Grafik").Copy after:=Sheets(nrArk)
                Set sht = ActiveSheet
                sht.Name = nazwa
            End If

           'sht.Range("G4") = ![Ulga podatkowa]
            sht.Range("L1") = nazwa '!nazwisko i imię
            sht.Range("L2") = !Id_kalendarza
            sht.Range("K1") = Worksheets("Grafik").Range("K1").Value '!Iden
            sht.Range("B3:G368") = Worksheets("Grafik").Range("B3:G368").Value '!Iden
         
            nrArk = sht.Index
            Set sht = Nothing
            .MoveNext
        Loop
    End With
   
    Set Rst = Nothing
   
   Call GoToGrafik
End Sub


Nazwisko i imię zapisane będzie w kolumnie B.
Będę wdzięczny za podpowiedź

Pozdrawiam
Ayala

Grafik 2023-01-20.xlsm
Pobierz Plik ściągnięto 11 raz(y) 180.51 KB

ID posta: 424398 Skopiuj do schowka
 
 
Tajan


Pomógł: 5234 razy
Posty: 11412
Wysłany: 20-01-2023, 22:19   

Zmień zgodnie z nazwa pola:
Kod:
nazwa = Mid(!Nazwisko & " " & !Imie, 1, 31)

na:
Kod:
nazwa = Mid(!Nazwisko_imie, 1, 31)

i ewentualnie, jeżeli nie będzie osobnych pól Nazwisko oraz Imie, to:
Kod:
 .Sort = "Nazwisko, Imie ASC"

na:
Kod:
 .Sort = "Nazwisko_imie ASC"

W razie potrzeby, można też zmienić:
Kod:
sht.Range("L1") = nazwa '!nazwisko i imię

na
Kod:
sht.Range("L1") = !Nazwisko_imie
ID posta: 424400 Skopiuj do schowka
 
 
Ayala 
ExcelGaduła 500+


Wersja: Win Office 2019
Posty: 503
Wysłany: 21-01-2023, 14:35   

Dziękuję
Wszystko działa jak należy.

Robiłem podobnie, ale zostawiałem dodatkowe kolumny z Nazwiskiem i Imieniem z formułami rozdzielającymi nazwisko imię i to to było przeszkodą. Po usunięciu tych formuł problem zniknął.
Nie wiem czemu to nie działa przecież nie odwołuję się do tych dodatkowych kolumn.

Jeszcze raz dziękuję.
:clap
Pozdrawiam
Ayala
ID posta: 424413 Skopiuj do schowka
 
 
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
Theme xandgreen created by spleen& Programosy modified v0.3 by warna
Opieka techniczna www.wip.pl

Archiwum

Strona używa plików cookies.

Kliknij tutaj, żeby dowiedzieć się jaki jest cel używania cookies oraz jak zmienić ustawienia cookie w przeglądarce.
Korzystając ze strony użytkownik wyraża zgodę na używanie plików cookies, zgodnie z bieżącymi ustawieniami przeglądarki.
Sprawdź, w jaki sposób przetwarzamy dane osobowe