RunTime-ошибка 424;Попытка DIM именованного (находится в нескольких книгах) рабочего листа - PullRequest
1 голос
/ 12 апреля 2019

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

Я успешно установил каждую из моих книг как WB1 (шаблон),WB2, WB3 и т. Д., И каждая рабочая книга имеет одинаковые рабочие таблицы (январь, февраль, март и т. Д.).Мой код будет копировать то, что я делаю в шаблоне, вставлять в каждую рабочую книгу, обновлять их сводные таблицы, а затем сортировать результаты по ежемесячным листам.

'Dim March worksheet?

Dim WS As Worksheets
    Set WS = Workbook.Sheets("Mar")

'sort for worksheets
'Macro3 Macro


wb2.WS.Sort.SortFields.Add Key:=Range("C3:C190" _
        ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With wb2.WS.Sort
        .SetRange Range("B2:E189")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
        .SetRange Range("B191:E8040")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

Я хочу иметь возможность изменить тусклость (то есть на «АПРЕЛЬ» на следующий месяц), так как у меня есть много рабочих книг, которые нужно отсортировать на этом листе.В настоящее время, если я не пытаюсь затемнить рабочий лист и просто заменить WS на Worksheets («Mar»), это сработает, но для этого потребуются десятки изменений в «APR», «May» и так далее.Я хочу изменить только «Mar» в строке, в которой я установил переменную.

1 Ответ

1 голос
/ 12 апреля 2019

Dim WS As Worksheets является частью проблемы. Вы хотите это As Worksheet (без "s", это один лист, а не набор листов). Затем вы пытаетесь присвоить его:

Set WS = Workbook.Sheets("Mar")

Мы не знаем, что такое Workbook, но, предполагая, что он содержит действительную ссылку на объект Workbook, с которым вы хотите работать, вы захотите разыменовать лист из коллекции Worksheets, чтобы избежать Удивляет позже: Sheets может содержать Worksheet объектов, но также Chart элементов и полдюжины других устаревших типов листов, не относящихся к рабочему листу, которые не имеют элемента Range.

wb2.WS.Sort....

Предполагая, что wb2 уже содержит ссылку на объект Workbook, с которым вы собираетесь работать (?), Это объект Workbook, представляющий членов интерфейса Workbook, который не включает в себя WS участник. Если WS является объектом Worksheet, объявленным и назначенным выше, вам не нужно его уточнять: например, Range знает, к чему Worksheet принадлежит, Worksheet знает, к чему относится Workbook к.

Вы хотели работать с WS напрямую?

WS.Sort.....

Далее:

.SetRange Range("B2:E189")

Этот неквалифицированный Range неявно ссылается на тот рабочий лист, который в настоящее время является ActiveSheet - вероятно, не то, что вы хотите сделать. Это должно быть WS.Range?

...