Всех приветствую! Помогите, пожалуйста, с написанием макроса, который загонял бы в массив только отфильтрованные(видимые) значения. Макрос: [vba]
Код
Sub FltR() Dim qarr, lrw&, i&, b#, s With Лист1 s = 0 lrw = .Range("D" & Rows.Count).End(xlUp).Row qarr = .Range("C2:D" & lrw).SpecialCells(xlVisible) On Error Resume Next For i = LBound(qarr) To UBound(qarr) If qarr(i, 2) = "EUR" Then b = 1 Else b = .Range("F1").Value End If qarr(i, 1) = Application.Round(qarr(i, 1) / b, 2) s = s + qarr(i, 1) Next i On Error GoTo 0 .Range("K1") = "ВСЕГО КП на сумму: " & Format(s, "Standard") & " " & " евро." With .Range("K1") .Font.Color = -3407872 .Font.Bold = True End With End With End Sub
[/vba] работает не совсем корректно. При фильтрации по нескольким диапазонам, он сохраняет данные только первого отфильтрованного блока, игнорируя остальные. Подскажите, где подправить нужно? И ещё вопрос: можно ли как-то сделать, чтобы макрос запускался автоматически при фильтрации? Пример прилагаю.
Всех приветствую! Помогите, пожалуйста, с написанием макроса, который загонял бы в массив только отфильтрованные(видимые) значения. Макрос: [vba]
Код
Sub FltR() Dim qarr, lrw&, i&, b#, s With Лист1 s = 0 lrw = .Range("D" & Rows.Count).End(xlUp).Row qarr = .Range("C2:D" & lrw).SpecialCells(xlVisible) On Error Resume Next For i = LBound(qarr) To UBound(qarr) If qarr(i, 2) = "EUR" Then b = 1 Else b = .Range("F1").Value End If qarr(i, 1) = Application.Round(qarr(i, 1) / b, 2) s = s + qarr(i, 1) Next i On Error GoTo 0 .Range("K1") = "ВСЕГО КП на сумму: " & Format(s, "Standard") & " " & " евро." With .Range("K1") .Font.Color = -3407872 .Font.Bold = True End With End With End Sub
[/vba] работает не совсем корректно. При фильтрации по нескольким диапазонам, он сохраняет данные только первого отфильтрованного блока, игнорируя остальные. Подскажите, где подправить нужно? И ещё вопрос: можно ли как-то сделать, чтобы макрос запускался автоматически при фильтрации? Пример прилагаю.Xpert
Здравствуйте. Так не работают с видимыми ячейками, их только перебирают [vba]
Код
Sub FltR() Dim qarr, lrw&, i&, b#, b1#, s#, Rng As Range, cel As Range, vl# With Лист1 s = 0 b1 = .Range("F1").Value lrw = .Range("D" & Rows.Count).End(xlUp).Row Set Rng = .Range("C2:D" & lrw).SpecialCells(xlVisible) For Each cel In Rng.Cells Select Case cel.Column Case 3 vl = cel Case 4 b = IIf(cel = "EUR", 1, b1) s = s + vl / b End Select Next s = Math.Round(s, 2) .Range("K1") = "ВСЕГО КП на сумму: " & Format(s, "Standard") & " " & " евро." With .Range("K1") .Font.Color = -3407872 .Font.Bold = True End With End With End Sub
Здравствуйте. Так не работают с видимыми ячейками, их только перебирают [vba]
Код
Sub FltR() Dim qarr, lrw&, i&, b#, b1#, s#, Rng As Range, cel As Range, vl# With Лист1 s = 0 b1 = .Range("F1").Value lrw = .Range("D" & Rows.Count).End(xlUp).Row Set Rng = .Range("C2:D" & lrw).SpecialCells(xlVisible) For Each cel In Rng.Cells Select Case cel.Column Case 3 vl = cel Case 4 b = IIf(cel = "EUR", 1, b1) s = s + vl / b End Select Next s = Math.Round(s, 2) .Range("K1") = "ВСЕГО КП на сумму: " & Format(s, "Standard") & " " & " евро." With .Range("K1") .Font.Color = -3407872 .Font.Bold = True End With End With End Sub
Андрей не предлагал никаких методов Суть поста Андрея сводится к тому, что применяя на листе любую волатильную функцию, использовать возникающее при использовании фильтра событие пересчета листа
Андрей не предлагал никаких методов Суть поста Андрея сводится к тому, что применяя на листе любую волатильную функцию, использовать возникающее при использовании фильтра событие пересчета листа
Суть поста Андрея сводится к тому, что применяя на листе любую волатильную функцию, использовать возникающее при использовании фильтра событие пересчета листа
Serge_007, именно это я и назвал "методом". Завёл на лист функцию СЕГОДНЯ, и прикрутил макрос doober'а к событию Calculate. При использовании фильтра возникает ошибка
Суть поста Андрея сводится к тому, что применяя на листе любую волатильную функцию, использовать возникающее при использовании фильтра событие пересчета листа
Serge_007, именно это я и назвал "методом". Завёл на лист функцию СЕГОДНЯ, и прикрутил макрос doober'а к событию Calculate. При использовании фильтра возникает ошибкаXpert
doober, к сожалению, при таком способе также выскакивает ошибка(ссылается ошибку метода Special Cells объекта Range), далее файл зависает, и выйти из него можно только через диспетчер задач...
doober, к сожалению, при таком способе также выскакивает ошибка(ссылается ошибку метода Special Cells объекта Range), далее файл зависает, и выйти из него можно только через диспетчер задач...Xpert
Private Sub Worksheet_Calculate() With Application .Calculation = xlCalculationManual .EnableEvents = False FltR .Calculation = xlCalculationAutomatic .EnableEvents = True End With
End Sub
[/vba]
так надо[vba]
Код
Private Sub Worksheet_Calculate() With Application .Calculation = xlCalculationManual .EnableEvents = False FltR .Calculation = xlCalculationAutomatic .EnableEvents = True End With
Всем доброго времени суток! Давно уже бьюсь над задачей копирования данных из одной книги в другую, НО с учетом фильтра в одном столбце (фильтр должен быть в файле откуда копируются данные). У нас с работы просто уволился коллега, который отлично шарил в макросах, но писал довольно непростые коды мягко говоря, для понимания новичка и вот собственно некоторые коды удалось мне переварить и использовать в работе, но вот в одном из кодов наступил конкретный ступор....
Добрые и умные люди, можете, пожалуйста, подсказать где и какие правки нужно внести в код? Заранее благодарю!
'не получается у меня правильно поставить фильтр / условие в 12-ой графе (графа L в файле-доноре), чтобы в этой графе фильтровалось значение «Основной долг» и копировалась бы информация в рабочий файл с учетом этого фильтра. 'В разные места это условие пытался ставить – бестолку, на фильтр реакции либо не было, либо копировался всё равно весь массив данных или вообще ничего не копировалось, пробовал вносить всякие правки и корректировки в разные строки кода – в итоге макрос писал Debug постоянно….уже не знаю что делать…
Всем доброго времени суток! Давно уже бьюсь над задачей копирования данных из одной книги в другую, НО с учетом фильтра в одном столбце (фильтр должен быть в файле откуда копируются данные). У нас с работы просто уволился коллега, который отлично шарил в макросах, но писал довольно непростые коды мягко говоря, для понимания новичка и вот собственно некоторые коды удалось мне переварить и использовать в работе, но вот в одном из кодов наступил конкретный ступор....
Добрые и умные люди, можете, пожалуйста, подсказать где и какие правки нужно внести в код? Заранее благодарю!
'не получается у меня правильно поставить фильтр / условие в 12-ой графе (графа L в файле-доноре), чтобы в этой графе фильтровалось значение «Основной долг» и копировалась бы информация в рабочий файл с учетом этого фильтра. 'В разные места это условие пытался ставить – бестолку, на фильтр реакции либо не было, либо копировался всё равно весь массив данных или вообще ничего не копировалось, пробовал вносить всякие правки и корректировки в разные строки кода – в итоге макрос писал Debug постоянно….уже не знаю что делать…