Excel - generatore automatico di fogli di lavoro

Excel è uno strumento utile per la numerazione e la rappresentazione dei dati. Quando combinato con VBA diventa un'applicazione altamente dinamica che può essere personalizzata per innumerevoli scenari. Uno di questi esempi è un caso in cui è possibile creare un generatore automatico di fogli di lavoro che verrebbe generato ogni volta che una voce viene aggiunta o eliminata da un elenco principale . Il codice VBA funziona in modo tale che il generatore automatico cerchi i nomi nel foglio master e passi attraverso tutti i fogli nella cartella di lavoro. Ovunque sia abbinato un criterio prestabilito, è possibile aggiungere o eliminare fogli di lavoro in base all'input dell'utente .

  • Problema
  • Soluzione
  • Nota

Problema

Ho una cartella di lavoro con un foglio dei nomi che ha tutte le informazioni che ho bisogno di mettere sul timecard e un foglio principale con il cartellino che il dipendente riempirà. Come posso generare automaticamente un nuovo set di timecard ogni settimana? Ho bisogno di nominare i fogli con il nome dell'impiegato nella scheda in modo che possano trovare la loro carta e inserire tutte le informazioni dal foglio del nome sulla loro carta. Come nuovi nomi vengono aggiunti o cancellati alla lista che sarà in ordine alfabetico, farà la nuova carta con i nomi e genererà le informazioni giuste su ogni carta dalla lista. Come posso fare questo? Sono nuovo a questo e questa è l'ultima cosa che deve essere fatta.

Soluzione

Non ho idea di come sia il tuo nome e modello

Crea una copia di backup del tuo file

Leggi il codice e apporta le modifiche appropriate, ho commentato tutto per te.

  • Premere ALT + F11 per aprire vbe
  • Fare clic su Inserisci e selezionare modulo
  • Copia e incolla il codice sottostante:

 Sub generateTimeSheets () Dim sMasterNameSheet As String 'nome del foglio che ha informazioni sui dipendenti Dim sTimeSheetTempate As String' nome del foglio che è un modello di timecard Dim iMaxNameCol As Integer 'il numero di colonna sotto il quale ci sono più file populate Dim lMaxNameRow As Integer Dim sTemp As String 'una variabile temporanea Dim vWarning As Variant' avviso per l'eliminazione '########################################################## ################### PERSONALIZZA QUI PER ADATTARE ALLE TUE ESIGENZE '#################################### ############################ sMasterNameSheet = "Nomi" "questo è il nome del foglio che ha informazioni sui dipendenti sTimeSheetTempate =" Modello scheda attività "'questo è il nome del foglio che è il modello di scheda attività Dim iNameCol As Integer" quale colonna nel foglio informativo dipendente, ha informazioni sul nome (aggiungi altre colonne similari) Dim sEmpName As String' nome del dipendente iMaxNameCol = 1 'questa colonna su foglio dei dipendenti ha il numero massimo di righe riempite in iNameCol = 1 'questa è la colonna dove empl Il nome di oyee è trovato vWarning = MsgBox ("Questo eliminerà tutti i fogli eccetto" _ & sMasterNameSheet & "e" & sTimeSheetTempate _ & ". Premere Sì per confermare ", vbCritical + vbDefaultButton2 + vbYesNo)" non si desidera continuare Se vWarning vbYes Quindi Esci da Sub "per eliminare tutti i fogli tranne i due" si spostano attraverso tutti i fogli nel libro Per ogni foglio di lavoro Nel foglio Fogli esaminati nel loop sTemp = mysheet.Name 'se il foglio esamina non è due foglio critico quindi lo elimina If ((UCase (Trim (sTemp)) UCase (Trim (sMasterNameSheet))) E _ (UCase (Trim (sTemp)) UCase (Trim ( sTimeSheetTempate)))) Then mysheet.Delete End If Next Sheets (sMasterNameSheet) .Seleziona 'trova il numero massimo di righe lMaxNameRow = Celle (65536, iMaxNameCol) .End (xlUp) .Row sTemp = sTimeSheetTempate For lThisRow = 2 A lMaxNameRow sEmpName = Cells (lThisRow, iNameCol) sEmpName = Trim (sEmpName) If (sEmpName "") Then Sheets (sTimeSheetTempate) .Select Sheets (sTimeSheetTempate) .Copy After: = Fogli (sTemp) ActiveSheet.Name = sEmpName sTemp = sEmpName 'qui devi fare le correzioni 'in questa linea di esempio sta dicendo che sul modello appena copiato, nella sua cella A1' metti il ​​valore e trovato nella colonna A dei fogli di fogli dei dipendenti (sEmpName) .Range ("A1") = Fogli (sMasterNameSheet) .Range ("A" e lThisRow) End If nextFor: Next End Sub 
  • 4. Premere F5 per eseguirlo

Nota

Grazie a rizvisa1 per questo suggerimento sul forum.

Articolo Precedente Articolo Successivo

I Migliori Consigli