Копирование значений на отдельный лист excel vba

У меня есть code, который автоматически копирует определенный cells из основного sheet в другой sheet. Это достигается, когда конкретный value вводится в Column B.

В приведенном ниже примере я хочу скопировать все cells, где value в Column B равен Faults Raised. Проблема, с которой я столкнулся, заключается в том, что главный sheet имеет отдельный script, который скрывает / показывает columns на основе других различных 'values', введенных в Column B.

Когда вводится Faults Raised, отображаются Columns B:C, AC:AE, BP. Но когда я пытаюсь выполнить автоматическое копирование, отображается только Column B. Я не могу заставить C, AC:AE и BP копировать? Что я делаю неправильно?

Option Explicit

Sub FilterAndCopy()
  Dim sht1 As Worksheet, sht2 As Worksheet

  Set sht1 = Sheets("SHIFT LOG")
  Set sht2 = Sheets("FAULTS RAISED")

  sht2.UsedRange.ClearContents
  Dim rng As Range

  With sht1.Cells(2, "B").CurrentRegion
      .Range("B:BP").EntireColumn.Hidden = False ' unhide columns
      .AutoFilter
      .AutoFilter 2, "Faults Raised"
      .SpecialCells(xlCellTypeVisible).Copy sht2.Cells(6, 2)
      .AutoFilter

      .Range("C:AA").EntireColumn.Hidden = True ' hide columns
      sht2.Range("C:AA").EntireColumn.Delete ' delete 'sht2' columns
      .Range("AE:BN").EntireColumn.Hidden = True ' hide columns
      sht2.Range("AE:BN").EntireColumn.Delete ' delete 'sht2' columns
  End With

Конец подписки

Внутри sht1.Columns ("B: BP"). CurrentRegion либо .Range ("B: BP"). WholeColumn неправильная адресация, либо поле .AutoFilter: = 1 относится к столбцу A. Почему не sht1.Cells (1, " A "). CurrentRegion?

user4039065 26.10.2018 06:28

Мне нужно, чтобы он был введен в столбец 2, строку 6 на листе 2. Неправильный автоматический фильтр. Так что моя ссылочная колонка неверна. Это должно быть B. Я изменил это, но он все тот же?

Chopin 26.10.2018 06:39
3
2
70
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваш .CurrentRegion засоряет область, в которой вы хотите работать. Внутри sht1.Columns ("B: BP"). CurrentRegion либо .Range ("B: BP"). WholeColumn неправильная адресация, либо поле .AutoFilter: = 1 относится к столбцу A. Пересечение может помочь преодолеть пару из них проблемы.

Option Explicit

Sub FilterAndCopy()
    Dim rng As Range, sht1 As Worksheet, sht2 As Worksheet

    Set sht1 = Worksheets("SHIFT LOG")
    Set sht2 = Worksheets("FAULTS RAISED")

    sht2.UsedRange.ClearContents

    With Intersect(sht1.Columns("B:BP"), sht1.UsedRange)
        .Cells.EntireColumn.Hidden = False ' unhide columns
        If .Parent.AutoFilterMode Then .Parent.AutoFilterMode = False
        'within B:BP, column B is the first column
        .AutoFilter field:=1, Criteria1:="Faults Raised"
        'within B:BP, Columns B:C, AC:AE, BP are referenced as .Columns A:B, AB:AD, BO
        .Range("A:B, AB:AD, BO:BO").Copy Destination:=sht2.Cells(6, "B")
        .Parent.AutoFilterMode = False

        'no need to delete what was never there
        'within B:BP, Columns C:AA, AE:BN, BP are referenced as .Columns B:Z, AD:BM
        .Range("B:Z").EntireColumn.Hidden = True ' hide columns
        .Range("AD:BM").EntireColumn.Hidden = True ' hide columns
    End With
End Sub

Спасибо за это. Однако я получаю сообщение об ошибке в строке Intersect. Это говорит о том, что диапазон не удался

Chopin 26.10.2018 07:01

Есть две пересекающиеся линии.

user4039065 26.10.2018 07:09

Извините за боль. Получение очередной ошибки со строкой автофильтра. Ошибка метода AtuoFilter объекта Range

Chopin 26.10.2018 07:12

Я просто копирую ваш код в редактор и возвращаю ошибку?

Chopin 26.10.2018 07:20

Я обнаружил небольшую синтаксическую ошибку в .Range ("A: B, AB: AD, BO: BO") см. Правку выше.

user4039065 26.10.2018 07:28

Просто быстрый вопрос @Jeeped. Что, если бы мастер-лист был таблицей, а не диапазоном. Возможно ли это? Потребовался бы совершенно другой код?

Chopin 31.10.2018 01:56

Другие вопросы по теме