Excel - generator automatyczny arkusza

Excel jest poręcznym narzędziem do analizowania liczb i reprezentacji danych. W połączeniu z VBA staje się wysoce dynamiczną aplikacją, którą można dostosować do niezliczonych scenariuszy. Jednym z takich przykładów jest przypadek, w którym można utworzyć automatyczny generator arkuszy, który będzie generowany za każdym razem, gdy wpis zostanie dodany lub usunięty z listy głównej . Kod VBA działa w taki sposób, że generator automatyczny szuka nazw w arkuszu głównym i porusza się po wszystkich arkuszach skoroszytu. Wszędzie tam, gdzie dopasowane są wstępnie określone kryteria, można dodawać lub usuwać arkusze na podstawie danych wprowadzonych przez użytkownika .

  • 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.

Poprzedni Artykuł Następny Artykuł

Najważniejsze Wskazówki