Страницы: 1
RSS
Ошибка RemoveDuplicates, Ошибка VBA при обработке RemoveDuplicates
 
Друзья, столкнулся с проблемой не понимаю с чем связана. Взял свой старый код и разбил на несколько блоков после чего код стал вылетать с ошибкой.
Друзья, подскажите свежим взглядом что вызывает ошибку? Код хранится в GoSendBuget остальные файлы кладем в одну папку.

Возможно кто то предложит альтернативный вариант агрегации значений, я сделал через удаление дубликатов (которое не работает).

Заранее спасибо.
Изменено: phelex - 28.02.2021 15:37:46
невозможное делаем сразу, чудо - требует небольшой подготовки.
 
Предлагаете перечитать код и определить, когда возникает ошибка?
 
Нет, предлагаю запустить и дебаг покажет где возникает, а вот почему возникает.
Ошибку вызывает
Код
Sub HeinCalc(FB As String)   
    Set FBB = Workbooks.Open(FB)
    With Workbooks(FBB.Name).Sheets("Data")   
      .Range(Cells(1, 1), Cells(Last(FBB.Name, "Data", 1, "R"), 2)).RemoveDuplicates Columns:=Array(1, 2), Header:=xlYes
    End With
End Sub
Причем в этой же структуре есть почти аналогичный блок (,Range, Last)
Код
.Range(Cells(2, 3), Cells(Last(FBB.Name, "Data", 1, "R"), Last(FBB.Name, "Data", 1, "C"))).Clear
Вот похоже что то не так со структурой RemoveDuplicates Columns:=Array(1, 2), Header:=xlYes, хотя ранее она работала.
невозможное делаем сразу, чудо - требует небольшой подготовки.
 
.Range(Cells(1, 1), Cells(Last(FBB.Name, "Data", 1, "R"), 2)) ...
Либо
.Range(.Cells(1, 1), .Cells(Last(FBB.Name, "Data", 1, "R"), 2))...
Либо
Range(Cells(1, 1), Cells(Last(FBB.Name, "Data", 1, "R"), 2))...

Работало скорее по тому что активный лист был  то на котором .Range
Изменено: БМВ - 28.02.2021 15:47:31
По вопросам из тем форума, личку не читаю.
 
Добрый день! Думаю, что проблема в Option Base 1. Похоже, метод RemoveDuplicates c этой опцией не дружит.

P.S. Предлагаю не рассматривать подобные просьбы в отношении текстов модулей, не содержащих Option Explicit. Не все мы Гераклы. :(  
Изменено: sokol92 - 28.02.2021 16:14:47
Владимир
 
Цитата
sokol92 написал:
Предлагаю не рассматривать подобные просьбы в отношении
примеров, которые спотыкаются совершенно на другом
Код
    With Workbooks(FRR.Name).Sheets("ХО")

и где этот Экстра Олд шит?
По вопросам из тем форума, личку не читаю.
 
БМВ, нет в изначальном формате который работает формат написания такой, сделал везде с точками.
Код
.Range(Cells(1, 1), Cells(Last(FBB.Name, "Data", 1, "R"), 2)).RemoveDuplicates Columns:=Array(1, 2), Header:=xlYes
sokol92,
Option Explicit добавил, возможно действительно стоит :)
Option Base 1 - создает ошибку, а вот почему непонятно.

БМВ,в файле Report - с этим то все ок :)  
невозможное делаем сразу, чудо - требует небольшой подготовки.
 
Цитата
phelex написал:
Option Base 1 - создает ошибку, а вот почему непонятно.
Баг в чистом виде.
Код
Option Explicit
Option Base 1
Sub Test()
  Workbooks.Add
  With Range("A1")
    .Value = 1
    .RemoveDuplicates Array(1), xlNo
  End With
End Sub

Если убрать "Option Base 1", то ошибки нет.
Владимир
 
sokol92,угу.
Уже пишу без нее, интересно другое, переписал все циклы по массиву начиная с 0, а не с 1, стало выдавать ошибку "Вне диапазона". Т.е. без опции Base, он по умолчанию 1? (вроде читал что без нее по умолчанию 0)
невозможное делаем сразу, чудо - требует небольшой подготовки.
 
Пардон, в каталоге оказалcя другой файл с тем же именем :-) и без XO
Цитата
phelex написал:
Option Base 1 - создает ошибку, а вот почему непонятно.
почему не понятно. Дали студенту написать и он не корректно организовал цикл, всегда с 0.
По вопросам из тем форума, личку не читаю.
 
У Вас длинный код - смотрите внимательно. Для того, чтобы использовать массивы с индексом от 1, указанная выше опция не нужна, достаточно при объявлении / переопределении массива указывать явно нижнюю границу. Если Option Base не указана, то по умолчанию нижняя граница массивов равна 0. Некоторые конструкции VBA, например, Split, возвращают массивы с нулевой нижней границей при любой "Option Base".
Изменено: sokol92 - 28.02.2021 17:13:46
Владимир
 
phelex,
Цитата
sokol92: некоторые конструкции VBA, например, Split, возвращают массивы с нулевой нижней границей при любой "Option Base"
… а некоторые методы, например ,получение массива из диапазона arr=Range.Value всегда вернут двухмерный массив, если диапазон более 1ой ячейки  ;)
Массивы в VBA
Изменено: Jack Famous - 01.03.2021 09:30:50
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1
Наверх