изменение макроса Excel для ссылки на список текста, а не жесткого кода

Я пытаюсь получить помощь с последним шагом макроса Excel, над которым я работал. Я создал макрос, который будет принимать данные из листов из двух разных книг и вставлять их в третью книгу.

третьей книги-один из 15 файлов, приписываемых 15 разных человек, каждый из выявленных другое имя и номер.

Я настроил макрос, чтобы открывать и обновлять каждую из 15 книг по одной, а затем сохранять и закрывать их, но теперь у меня есть необходимость внести изменения в список 15 (когда сотрудники уходят или нанимают новых сотрудников).

так, как я написал макрос, мне нужно вручную войти в код и изменить ссылку на имена и идентификационные номера каждого из 15 сотрудников.

есть ли способ настроить его так, чтобы он мог читать имя и номер из списка (сохраненного в четвертой книге), чтобы я мог просто редактировать этот список по мере необходимости, а макрос мог оставаться прежним и запускаться на петле? Я знаю, что мог бы просто использовать Replace каждый раз, когда мне нужно было внести изменения, но все равно было бы легче работать с одним редактируемым списком. Спасибо тебе.

в этом примере ниже сотрудник с именем Melvin Smith ID # 2878 ссылается на:

‘ Using the AutoFilter on the workbook called NEW DD    
Windows("NEW DD.xlsx").Activate
    ActiveSheet.Range("$H:$H55").AutoFilter Field:=8, Criteria1:=”=*Melvin Smith*”, _ Operator:=xlAnd
    Selection.Copy
‘ Going back to Melvin’s workbook named 2878    
Windows("2878.xlsx").Activate
    Sheets("D dd N").Select
    Range("A1").Select
    ActiveSheet.Paste
17
задан Raystafarian
28.01.2023 13:56 Количество просмотров материала 3360
Распечатать страницу

1 ответ

Как я делал это в прошлом, чтобы сделать именно так, как вы говорите-я храню переменные в другом рабочем листе / книге.

Итак, допустим, вы создаете книгу с именем "сотрудники.xlsx " это выглядит так:

  | A               | B
  |-----------------|--------------------
 1| Employee        | Employee Num
 2| Melvin Smith    | 2878
 3| David Gilmour   | 1908

затем вы создаете две подзаголовки: один, который проходит через вашу таблицу, а другой, который делает копирование. Мы передаем имя и номер сотрудника во второй подраздел, и он будет использовать их вместо жестко заданных значений.

Sub CopyAllSheets()

    ' Store a reference to the workbook
    Dim Wb As Workbook
    Set Wb = Workbooks("Employees.xlsx")

    ' Start at row 2 to ignore the column headers
    Dim Counter As Long
    For Counter = 2 To Wb.Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
        CopySingleSheet Wb.Sheets(1).Range("A" & Counter), Wb.Sheets(1).Range("B" & Counter)
    Next Counter

End Sub

Sub CopySingleSheet(EmpName As String, EmpNumber As String)

    ' Using the AutoFilter on the workbook called NEW DD
    Windows("NEW DD.xlsx").Activate
    ActiveSheet.Range("$H:$H55").AutoFilter Field:=8, Criteria1:="=*" & EmpName & "*", Operator:=xlAnd
    Selection.Copy
    ' Going back to Melvin’s workbook named 2878
    Windows(EmpNumber & ".xlsx").Activate
    Sheets("D dd N").Select
    Range("A1").Select
    ActiveSheet.Paste

End Sub

надеюсь в этом есть смысл

0
отвечен user184994 2023-01-29 21:44

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх