Страницы: 1
RSS
Макрос копирования диапазона (строки) по условию из комбобокса, при запуске вручную рабтает, кнопкой - нет
 
Добрый день всем служителям цифрового бубна )))) , есть такой макрос :
Код
Dim iLastRowNal As Long, I As Long
Dim iLastRowArhiv As Long
Dim Ip As String

    iLastRowNal = Cells(Rows.Count, 12).End(xlUp).Row
         
       MsgBox iLastRowNal
        
    For I = 3 To iLastRowNal
         If Cells(I, 12) = FirmUnic Then
       
            iLastRowArhiv = Sheets("Dog1").Cells(Rows.Count, 12).End(xlUp).Row + 1
            
            MsgBox iLastRowArhiv
            
            Range(Cells(I, 1), Cells(I, 12)).Copy
            Sheets("Dog1").Cells(iLastRowArhiv, 1).PasteSpecial Paste:=xlPasteValues
'            Range(Cells(i, 2), Cells(i, 7)).ClearContents
        End If
     ' MsgBox FirmUnic
     Next I
       
     
    Application.CutCopyMode = False
    
 
        У меня есть список, из него выбираю макросом уникальные элементы в отдельный диапазон. Далее в форме есть комбобокс который заполняю из списка уникальных элементов. Запускаю макрос, выбираю в комбобоксе элемент, и соответствуэщие строки копируются на отдельный лист.
        В ручном режиме, при запуске из VB код работает идеально, как только присваиваю его кнопке, и запускаю с кнопки, цикл обрывается на 2, 3  I.  FirmUnic это публичная переменная, которй присваивается значение из комбобокса.
       Собственно вопрос, почему это происходит ???? И что нужно изменить в макросе ? Помогите, а ?
 
Если макрос находится в модуле листа, то при работе с другими листами может возникать подобная проблема.
Поместите макрос (задайте ему имя) в программный модуль, а по кнопке запускайте его.
Чем шире угол зрения, тем он тупее.
 
Как раз макрос в отдельном модуле. Сейчас попробую наоборот его в лист засунуть.
 
В  модуле листа размещаются макросы событий листа. У Вас не тот случай.
Макрос работает с активным листом. Может, активен не тот?
 
приложенный файл 100% облегчает общение.
 
Знаю за файл, стыдно перед Гуру такое выкладывать . Но всё таки вопрос решили )) Засунул всю процедуру в лист, изменил вызов в кнопке, и всё теперь работет )) Что ему нужно было не знаю.  Спасибо  SAS888 за наводку. Потестирую немножко, если опять лагнет, приду на поклон .
Изменено: Дмитрий Князев - 26.04.2019 11:20:15
 
Цитата
Дмитрий Князев написал:
Dim Ip As String
Скажите, пожалуйста, для чего Вы объявляете переменную, которую не используете в макросе? Ибо я не увидел, где в коде фигурирует эта переменная.
 
Это я менял переменную  I на Ip, думал где-то остаётся в памяти от другой переменной след. Не почистил код.

PS Гуры, а не подскажите как изменить макрос, чтобы строки копировались не на отдельный лист, а  в создаваемый новый документ Excel на основе шаблона  ?
Изменено: Дмитрий Князев - 26.04.2019 12:22:25
 
Цитата
Дмитрий Князев написал: Засунул всю процедуру в лист...  и всё теперь работет...
Неправильно сделали.
Цитата
Дмитрий Князев написал: Что ему нужно было не знаю.
Цитата
vikttur написал: Макрос работает с активным листом
Правильно - макрос в общем модуле, запускать при нужном активном листе или прописать лист-родитель ссылкам на лист
 
Проблему так и не понял, ведь макрос выполнялся при ручном запуске. Какая ему разница ? Ставил Sheets ("Dog1").Activate  в цикле, та же проблема, выбирает несколько строк и выходит из цикла.  Сейчас доделаю работу используя макрос в таком состоянии, дальше буду переделывать чтобы выбирал строки и в документ Excel из шаблона заносил,  работа быстрее пойдет, в данный момент копирую и вставляю вручную ((( Программист из меня аховый, все что помню, это наследие ZXSpectrum )))
Страницы: 1
Наверх