Несоответствие типов наиболее вероятно встречается здесь:
.Sort.SetRange ("B8:L" & AccuracySortRow)
Поскольку выражение ("B8:L" & AccuracySortRow)
разрешается в String
, а Sort.SetRange
ожидает Range
объект .Обратите внимание, что .Sort.SetRange (someRangeObject)
также выдаст ошибку несоответствия типов, потому что эти круглые скобки заставляют выражение, которое должно быть оценено до , результат передается методу, так что будет передаваться массив 2D Variant
(через неявный вызов члена по умолчанию для Range.[_Default]
, который в этом контексте разрешается до Range.Value
, который все еще не является Range
объектом: удалите скобки.
Кроме того, я подозреваю, что значение AccuracySortRow
таков, что вы включаете эти «другие данные», в которые вы не хотите вмешиваться - при условии, что столбец L содержит данные в обоих наборах данных.
Если в столбце L нет пробелов, вам необходимо использовать .End(xlDown)
сверху (ну, из строки 8, я думаю), а не .End(xlUp)
снизу, если вы хотите получить номер строки, который находится в верхнем наборе данных.Все это было бы гораздо проще сделать, если бы сортируемый диапазон был ListObject
/ table (обратите внимание, что .Sort.SetRange
нельзя использовать с таблицей).