У меня есть мастер-лист, у которого есть ряд, распределяемый по разным листам с определенными метками.

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

Я использовал код для распределения столбцов, но не мог удалить / обновить столбцы из мастера, если они изменились. Затем я добавил ID #, который будет уникальным для каждой задачи.

Я попытался изменить код для чтения из столбца B, но я получил новые листы с номерами от 1 до 31. Код работал до того, как я добавил его в столбец ID #, и в нем была строка: Set rng = ActiveSheet.Range(ActiveSheet.Range("B3"), _ читать A3 .

Мой код:

Sub ProcessRows()

Dim rng As Range, cell As Range
Set rng = ActiveSheet.Range(ActiveSheet.Range("B3"), _
                 ActiveSheet.Cells(Rows.Count, 1).End(xlUp))

For Each cell In rng.Cells
    cell.EntireRow.Copy CopyTo(cell)
Next cell
End Sub

'Return a range object to which a row should be copied
'  Range returned is determined by the value in "rng"
Function CopyTo(rng As Range) As Range

Dim s As Excel.Worksheet, sName As String

sName = Trim(rng.Value) 'just in case...

On Error Resume Next               'ignore any error
Set s = ThisWorkbook.Sheets(sName) 'see if we can grab the sheet
On Error GoTo 0                    'stop ignoring errors

If s Is Nothing Then    'sheet didn't exist: create it
    Set s = ThisWorkbook.Sheets.Add( _
      after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
    s.Name = sName
    rng.Parent.Rows(1).Copy s.Range("a1") 'copy headers
End If                  'needed a new sheet
'return the first empty cell in column 1
Set CopyTo = s.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
End Function

У меня проблема в том, что без уникального идентификатора я не знаю, как заставить макрос расшифровать, если строка изменилась, и обновить ее, и я получаю дубликаты. Мы добавляем в эту книгу весь год, поэтому обновление макроса отдельных листов значительно экономит время.

Подводя итог, мне нужен макрос, который будет:

  1. Распределите каждую строку мастер-листа по каждому соответственно помеченному рабочему листу.
  2. Мне нужен каждый уникальный идентификатор #, чтобы обновить эту строку, если что-то изменилось.
  3. Я также должен убедиться, что на листах нет дубликатов.

Если есть способ автоматически запускать макрос при закрытии документа, это было бы бонусом, но запуск макроса вручную - это то, с чем я могу жить.


Дублирующиеся строки и информация не обновляются

1 ответ1

0

Изменить этот код

Set rng = ActiveSheet.Range(ActiveSheet.Range("B3"), _
             ActiveSheet.Cells(Rows.Count, 1).End(xlUp)) 

потому что он читает первый столбец, к этому:

Set rng = ActiveSheet.Range(ActiveSheet.Range("B3"), _
             ActiveSheet.Cells(Rows.Count, 2).End(xlUp))

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .