Excel - generator automatyczny arkusza
- Kwestia
- Rozwiązanie
- Uwaga
Kwestia
Mam skoroszyt z kartą imienną, która zawiera wszystkie informacje, które muszę umieścić na karcie czasu i arkusz główny z kartą czasu, którą pracownik wypełni. Jak mogę automatycznie generować nowy zestaw kart czasowych w każdym tygodniu? Potrzebuję go, aby nazwać arkusze imieniem i nazwiskiem pracownika na karcie, aby mogli znaleźć swoją kartę i umieścić wszystkie informacje z arkusza z nazwiskiem na karcie. Po dodaniu lub usunięciu nowych nazw na liście, które będą w kolejności alfabetycznej, nowa karta będzie miała nazwy i wygeneruje odpowiednie informacje na każdej karcie z arkusza listy. Jak mogę to zrobić? Jestem nowy w tym i to jest ostatnia rzecz, którą należy zrobić.
Rozwiązanie
Nie mam pojęcia, jak wygląda twoje imię i szablon
Utwórz kopię zapasową pliku
Przeczytaj kod i dokonaj odpowiednich zmian, wszystko dla ciebie skomentowałem.
- Naciśnij ALT + F11, aby otworzyć vbe
- Kliknij Wstaw i wybierz moduł
- Skopiuj i wklej poniższy kod:
Sub generateTimeSheets () Dim sMasterNameSheet As String 'nazwa arkusza z informacjami o pracowniku Dim sTimeSheetTempate As String' nazwa arkusza, który jest szablonem karty czasowej Dim iMaxNameCol As Integer 'numer kolumny, pod którym znajdują się najbardziej zaludnione wiersze Dim lMaxNameRow As Integer Dim sTemp As String 'zmienna tymczasowa Dim vWarning As Variant' ostrzeżenie o usunięciu '################################## ################### CUSTOMIZE TUTAJ, ABY UZYSKAĆ SWOJE POTRZEBY '######################## ############################ sMasterNameSheet = "Nazwy" "to nazwa arkusza, na którym znajdują się informacje o pracowniku sTimeSheetTempate =" Szablon grafiku „” to jest nazwa arkusza, który jest szablonem grafiku Dim iNameCol As Integer ”, który w arkuszu informacyjnym pracownika ma informacje o nazwie (dodaj pozostałe kolumny) Dim sEmpName As String„ nazwa pracownika iMaxNameCol = 1 ”ta kolumna Arkusz pracownika ma maksymalną liczbę wierszy wypełnionych iNameCol = 1 'jest to kolumna gdzie zatrud Nazwa oyee zostaje znaleziona. vWarning = MsgBox („Spowoduje to usunięcie wszystkich arkuszy oprócz„ _ & sMasterNameSheet & ”i„ & sTimeSheetTempate _ & ”. Naciśnij Yes, aby conitnue ", vbCritical + vbDefaultButton2 + vbYesNie)" nie chcesz kontynuować Jeśli vWarning vbYes Then Exit Sub ', aby usunąć wszystkie, ale dwa arkusze zostaną przesunięte przez wszystkie arkusze w książce Dla każdego arkusza mysheet w arkuszach sprawdzanego w pętla sTemp = mysheet.Name 'jeśli badanie arkusza nie ma dwóch arkuszy krytycznych, usuń je, jeśli ((UCase (Trim (sTemp)) UCase (Trim (sMasterNameSheet))) I _ (UCase (Trim (sTemp)) UCase (Trim ( sTimeSheetTempate)))) Następnie mysheet.Delete Koniec jeśli następne arkusze (sMasterNameSheet) .Wybierz 'znajdź maksymalną liczbę wierszy lMaxNameRow = Komórki (65536, iMaxNameCol) .End (xlUp) .Row sTemp = sTimeSheetTempate Dla lThisRow = 2 Do lMaxNameRow sEmpName = Cells (lThisRow, iNameCol) sEmpName = Trim (sEmpName) If (sEmpName "") Then Sheets (sTimeSheetTempate). Wybierz Arkusze (sTimeSheetTempate). Kopiuj po: = Arkusze (sTemp) ActiveSheet.Name = sEmpName sTemp = sEmpName tutaj musisz zrobić poprawki w tej linii próbnej, która mówi, że na nowo skopiowanym szablonie w komórce A1 'umieść wartość e znajduje się w kolumnie A arkusza pracownika Arkusze (sEmpName) .Range ("A1") = Arkusze (sMasterNameSheet) .Range ("A" i lThisRow) Koniec jeśli dalejDla: Następny koniec Sub
- 4. Naciśnij klawisz F5, aby go uruchomić
Uwaga
Dziękujemy rizvisa1 za tę poradę na forum.