Excel - генератор на работни листове

Excel е удобен инструмент за премахване на числа и представяне на данни. Когато се комбинира с VBA, той става изключително динамично приложение, което може да се персонализира за безброй сценарии. Един такъв пример е случаят, при който може да се създаде автоматичен генератор на работни листове, които да се генерират всеки път, когато се добавя или изтрива запис от главен списък . Кодът на VBA работи по такъв начин, че автогенераторът търси имената в основния лист и преминава през всички листове в работната книга. Навсякъде, където предварително е зададен критерий, той може да добавя или изтрива работни листове въз основа на входа на потребителя .

  • Проблем
  • Решение
  • Забележка

Проблем

Имам работна книга с листа с имена, която съдържа цялата информация, която ми трябва, поставена на timecard и главен лист с времевата карта, която служителят ще попълни. Как мога всяка седмица автоматично да генерирам нов набор от карти? Имам нужда от имената на листите с името на служителя в раздела, така че те да намерят картата си и да сложат цялата информация от листа с имената на картата си. Когато се добавят или изтриват нови имена в списъка, който ще бъде в азбучен ред, той ще направи новата карта с имената и ще генерира правилната информация за всяка карта от списъка. Как мога да направя това? Аз съм нов в това и това е последното нещо, което трябва да се направи.

Решение

Нямам представа как изглежда името и шаблона ви

Направете резервно копие на файла

Прочетете кода и направете съответните промени, коментирах всичко за вас.

  • Натиснете ALT + F11, за да отворите vbe
  • Кликнете върху Вмъкни и изберете модул
  • Копирайте и поставете кода по-долу:

 Sub generateTimeSheets () Dim sMasterNameSheet As String 'името на листа, който има информация за служителя Dim sTimeSheetTempate As String' име на листа, който е шаблон на timecard Dim iMaxNameCol As Integer 'номерът на колоната, под който има най-много населени редове. sTemp As String 'временна променлива Dim vWarning As Variant' предупреждение за изтриване '################################## ################### ИЗГОТВИТЕ ТУК ЗА ДА ИЗПОЛЗВАТЕ ВАШИТЕ НУЖДИ '######################## ############################ sMasterNameSheet = "Имена" "това е името на листа, който има информация за служителя sTimeSheetTempate =" Шаблон за разписание "" това е името на листа, който е шаблон за разписание Dim iNameCol As Integer ', който съдържа информация за служителя, има информация за името (добавете други подобни колони) Dim sEmpName As String' име на служителя iMaxNameCol = 1 'тази колона на служител лист има максимален брой редове, попълнени в iNameCol = 1 'това е колоната, където empl oyee name е намерено vWarning = MsgBox ("Това ще изтрие всички листове, с изключение на" _ & sMasterNameSheet & "и" & sTimeSheetTempate _ & ". Натиснете Да, за да conitnue ", vbCritical + vbDefaultButton2 + vbYesNo)" не желаете да продължите Ако vWarning vbYes Тогава Exit Sub ", за да изтриете всички, с изключение на двата листа" преминете през всички листове в книгата за лист loop sTemp = mysheet.Name ', ако листът не е изследван с два критични листа, след това го изтрийте Ако ((UCase (Trim (sTemp)) UCase (Trim (sMasterNameSheet))) и _ (UCase (Trim (sTemp)). sTimeSheetTempate)))) След това mysheet.Delete End Ако следващите листове (sMasterNameSheet). Изберете 'да откриете максимума брой редове lMaxNameRow = Cells (65536, iMaxNameCol). End (xlUp). sEmpName = Клетки (lThisRow, iNameCol) sEmpName = Trim (sEmpName) Ако (sEmpName "") След това листове (sTimeSheetTempate) .Изберете листове (sTimeSheetTempate) .Копиране след: трябва да направите корекциите "в тази примерна линия, казвайки, че на ново копирания шаблон, в клетката A1" се поставя стойността e се намира в колона А на листите на служителите (sEmpName) .Range ("A1") = Листове (sMasterNameSheet) .Range ("A" & lThisRow) Край Ако nextFor: Next End Sub 
  • 4. Натиснете F5, за да го стартирате

Забележка

Благодарение на rizvisa1 за този съвет на форума.

Предишна Статия Следваща Статия

Топ Съвети