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
?