Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Не обрабатывать строки скрытые фильтрами - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Не обрабатывать строки скрытые фильтрами (Макросы/Sub)
Не обрабатывать строки скрытые фильтрами
Sancho Дата: Понедельник, 06.06.2016, 17:44 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 279
Репутация: 19 ±
Замечаний: 0% ±

2007, 2010, 2013
Всем привет. Подскажите пожалуйста как поправить код что бы скрытые строки несколькими фильтрами пропускались при обработке макросом
[vba]
Код

Sub createFiles()
    Application.ScreenUpdating = False
    Dim folderName$, myPath$
    Dim avFiles
    myPath = ThisWorkbook.Path
    Set sh = ThisWorkbook.Sheets(1)
    avFiles = Application.GetOpenFilename("Excel files(*.xls*),*.xls*", , "1", , True) '
    Set template = Workbooks.Open(avFiles(1))
    template.Sheets(5).Protect "1", UserInterfaceOnly:=True
    template.Sheets(2).Protect "1", UserInterfaceOnly:=True
    With sh
        For i = 3 To .Cells(Rows.Count, 1).End(xlUp).Row
            folderPath = myPath & "\" & .Cells(i, 17) & " " & .Cells(i, 15)
            If Dir(folderPath, vbDirectory) = "" Then MkDir (folderPath)
            With template.Sheets(5)
                .[o53] = sh.Cells(i, 14)
            End With
            With template.Sheets(2)
                .[A4] = sh.Cells(i, 1): .[d7] = sh.Cells(i, 4): .[s7] = sh.Cells(i, 5)
                .[H9] = sh.Cells(i, 7): .[x9] = sh.Cells(i, 8): .[AH9] = sh.Cells(i, 6)
                .[d11] = sh.Cells(i, 2): .[I11] = sh.Cells(i, 3): .[AH11] = sh.Cells(i, 9)
                .[d13] = sh.Cells(i, 10): .[j13] = sh.Cells(i, 11): .[N13] = sh.Cells(i, 12): .[AC13] = sh.Cells(i, 13)
                .[d15] = sh.Cells(i, 15): .[S15] = sh.Cells(i, 16)
                template.SaveCopyAs folderPath & "\" & sh.Cells(i, 7) & " " & sh.Cells(i, 4) & " " & sh.Cells(i, 18) & ".xlsm"
            End With
Next i
    End With
    template.Close False
    Application.ScreenUpdating = True
    MsgBox "ÃÎÒÎÂÎ!"
End Sub

[/vba]

ну и до кучи не могу описать условие отмены Application.GetOpenFilename пишу наподобие такого
[vba]
Код

avFiles = Application.GetOpenFilename("Excel files(*.xls*),*.xls*", , "1", , True)
if avFiles = cancel Then Exit Sub
Else:  Set template = Workbooks.Open(avFiles(1))
end if
[/vba] Отмена начинает срабатывать а выбор файла нет
Выручайте. %)


Сообщение отредактировал Sancho - Понедельник, 06.06.2016, 17:45
 
Ответить
СообщениеВсем привет. Подскажите пожалуйста как поправить код что бы скрытые строки несколькими фильтрами пропускались при обработке макросом
[vba]
Код

Sub createFiles()
    Application.ScreenUpdating = False
    Dim folderName$, myPath$
    Dim avFiles
    myPath = ThisWorkbook.Path
    Set sh = ThisWorkbook.Sheets(1)
    avFiles = Application.GetOpenFilename("Excel files(*.xls*),*.xls*", , "1", , True) '
    Set template = Workbooks.Open(avFiles(1))
    template.Sheets(5).Protect "1", UserInterfaceOnly:=True
    template.Sheets(2).Protect "1", UserInterfaceOnly:=True
    With sh
        For i = 3 To .Cells(Rows.Count, 1).End(xlUp).Row
            folderPath = myPath & "\" & .Cells(i, 17) & " " & .Cells(i, 15)
            If Dir(folderPath, vbDirectory) = "" Then MkDir (folderPath)
            With template.Sheets(5)
                .[o53] = sh.Cells(i, 14)
            End With
            With template.Sheets(2)
                .[A4] = sh.Cells(i, 1): .[d7] = sh.Cells(i, 4): .[s7] = sh.Cells(i, 5)
                .[H9] = sh.Cells(i, 7): .[x9] = sh.Cells(i, 8): .[AH9] = sh.Cells(i, 6)
                .[d11] = sh.Cells(i, 2): .[I11] = sh.Cells(i, 3): .[AH11] = sh.Cells(i, 9)
                .[d13] = sh.Cells(i, 10): .[j13] = sh.Cells(i, 11): .[N13] = sh.Cells(i, 12): .[AC13] = sh.Cells(i, 13)
                .[d15] = sh.Cells(i, 15): .[S15] = sh.Cells(i, 16)
                template.SaveCopyAs folderPath & "\" & sh.Cells(i, 7) & " " & sh.Cells(i, 4) & " " & sh.Cells(i, 18) & ".xlsm"
            End With
Next i
    End With
    template.Close False
    Application.ScreenUpdating = True
    MsgBox "ÃÎÒÎÂÎ!"
End Sub

[/vba]

ну и до кучи не могу описать условие отмены Application.GetOpenFilename пишу наподобие такого
[vba]
Код

avFiles = Application.GetOpenFilename("Excel files(*.xls*),*.xls*", , "1", , True)
if avFiles = cancel Then Exit Sub
Else:  Set template = Workbooks.Open(avFiles(1))
end if
[/vba] Отмена начинает срабатывать а выбор файла нет
Выручайте. %)

Автор - Sancho
Дата добавления - 06.06.2016 в 17:44
Udik Дата: Понедельник, 06.06.2016, 18:00 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
По второму вопросу что-то типа этого должно быть (последние 2 строки)
[vba]
Код

fileToOpen = Application.GetOpenFilename("All Files (*.*),*.*")
    If fileToOpen = False Then Exit Sub
    Workbooks.Open (fileToOpen)
    Set w2 = ActiveWorkbook
[/vba]


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
СообщениеПо второму вопросу что-то типа этого должно быть (последние 2 строки)
[vba]
Код

fileToOpen = Application.GetOpenFilename("All Files (*.*),*.*")
    If fileToOpen = False Then Exit Sub
    Workbooks.Open (fileToOpen)
    Set w2 = ActiveWorkbook
[/vba]

Автор - Udik
Дата добавления - 06.06.2016 в 18:00
SLAVICK Дата: Понедельник, 06.06.2016, 22:04 | Сообщение № 3
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
что бы скрытые строки несколькими фильтрами пропускались при обработке макросом

Пробуйте так:
[vba]
Код
Sub createFiles()
    Application.ScreenUpdating = False
    Dim folderName$, myPath$, r As Range, r1 As Range
    Dim avFiles
    myPath = ThisWorkbook.Path
    Set sh = ThisWorkbook.Sheets(1)
    avFiles = Application.GetOpenFilename("Excel files(*.xls*),*.xls*", , "1", , True) '
    Set template = Workbooks.Open(avFiles(1))
    template.Sheets(5).Protect "1", UserInterfaceOnly:=True
    template.Sheets(2).Protect "1", UserInterfaceOnly:=True
    With sh
    Set r = Range(.Cells(3, 1), .Cells(.Cells(Rows.Count, 1).End(xlUp).Row, 1)).SpecialCells(xlCellTypeVisible)
        For Each r1 In r
            i = r1.Row
            folderPath = myPath & "\" & .Cells(i, 17) & " " & .Cells(i, 15)
            If Dir(folderPath, vbDirectory) = "" Then MkDir (folderPath)
            With template.Sheets(5)
                .[o53] = sh.Cells(i, 14)
            End With
            With template.Sheets(2)
                .[A4] = sh.Cells(i, 1): .[d7] = sh.Cells(i, 4): .[s7] = sh.Cells(i, 5)
                .[H9] = sh.Cells(i, 7): .[x9] = sh.Cells(i, 8): .[AH9] = sh.Cells(i, 6)
                .[d11] = sh.Cells(i, 2): .[I11] = sh.Cells(i, 3): .[AH11] = sh.Cells(i, 9)
                .[d13] = sh.Cells(i, 10): .[j13] = sh.Cells(i, 11): .[N13] = sh.Cells(i, 12): .[AC13] = sh.Cells(i, 13)
                .[d15] = sh.Cells(i, 15): .[S15] = sh.Cells(i, 16)
                template.SaveCopyAs folderPath & "\" & sh.Cells(i, 7) & " " & sh.Cells(i, 4) & " " & sh.Cells(i, 18) & ".xlsm"
            End With
        Next
    End With
    template.Close False
    Application.ScreenUpdating = True
    MsgBox "AIOIAI!"
End Sub
[/vba]


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
что бы скрытые строки несколькими фильтрами пропускались при обработке макросом

Пробуйте так:
[vba]
Код
Sub createFiles()
    Application.ScreenUpdating = False
    Dim folderName$, myPath$, r As Range, r1 As Range
    Dim avFiles
    myPath = ThisWorkbook.Path
    Set sh = ThisWorkbook.Sheets(1)
    avFiles = Application.GetOpenFilename("Excel files(*.xls*),*.xls*", , "1", , True) '
    Set template = Workbooks.Open(avFiles(1))
    template.Sheets(5).Protect "1", UserInterfaceOnly:=True
    template.Sheets(2).Protect "1", UserInterfaceOnly:=True
    With sh
    Set r = Range(.Cells(3, 1), .Cells(.Cells(Rows.Count, 1).End(xlUp).Row, 1)).SpecialCells(xlCellTypeVisible)
        For Each r1 In r
            i = r1.Row
            folderPath = myPath & "\" & .Cells(i, 17) & " " & .Cells(i, 15)
            If Dir(folderPath, vbDirectory) = "" Then MkDir (folderPath)
            With template.Sheets(5)
                .[o53] = sh.Cells(i, 14)
            End With
            With template.Sheets(2)
                .[A4] = sh.Cells(i, 1): .[d7] = sh.Cells(i, 4): .[s7] = sh.Cells(i, 5)
                .[H9] = sh.Cells(i, 7): .[x9] = sh.Cells(i, 8): .[AH9] = sh.Cells(i, 6)
                .[d11] = sh.Cells(i, 2): .[I11] = sh.Cells(i, 3): .[AH11] = sh.Cells(i, 9)
                .[d13] = sh.Cells(i, 10): .[j13] = sh.Cells(i, 11): .[N13] = sh.Cells(i, 12): .[AC13] = sh.Cells(i, 13)
                .[d15] = sh.Cells(i, 15): .[S15] = sh.Cells(i, 16)
                template.SaveCopyAs folderPath & "\" & sh.Cells(i, 7) & " " & sh.Cells(i, 4) & " " & sh.Cells(i, 18) & ".xlsm"
            End With
        Next
    End With
    template.Close False
    Application.ScreenUpdating = True
    MsgBox "AIOIAI!"
End Sub
[/vba]

Автор - SLAVICK
Дата добавления - 06.06.2016 в 22:04
Sancho Дата: Понедельник, 06.06.2016, 22:28 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 279
Репутация: 19 ±
Замечаний: 0% ±

2007, 2010, 2013
SLAVICK, ой как здорово! боялся, что цикл все равно будет по всем строкам пробегать, а тут прям все быстро получается hands , СПАСИБО ВАМ!!!

сам ваял вот это [vba]
Код

For i = 3 To .Cells(Rows.Count, 1).End(xlUp).Row
        If Rows(i).Hidden = True Then

        End If
[/vba] но ни как не соображу что надо ставить после then. понимаю что надо вернуться в начало цикла а вот как, не знаю. то что интуитивно ставил next i после then не прокатывало(


Сообщение отредактировал Sancho - Понедельник, 06.06.2016, 22:34
 
Ответить
СообщениеSLAVICK, ой как здорово! боялся, что цикл все равно будет по всем строкам пробегать, а тут прям все быстро получается hands , СПАСИБО ВАМ!!!

сам ваял вот это [vba]
Код

For i = 3 To .Cells(Rows.Count, 1).End(xlUp).Row
        If Rows(i).Hidden = True Then

        End If
[/vba] но ни как не соображу что надо ставить после then. понимаю что надо вернуться в начало цикла а вот как, не знаю. то что интуитивно ставил next i после then не прокатывало(

Автор - Sancho
Дата добавления - 06.06.2016 в 22:28
_Boroda_ Дата: Понедельник, 06.06.2016, 23:23 | Сообщение № 5
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS

For i = 3 To .Cells(Rows.Count, 1).End(xlUp).Row
If Rows(i).Hidden = True Then

End If
но ни как не соображу что надо ставить после then

А если наоборот?
[vba]
Код
For i = 3 To .Cells(Rows.Count, 1).End(xlUp).Row
        If Rows(i).Hidden = false Then
'что-то делаем
        End If
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение

For i = 3 To .Cells(Rows.Count, 1).End(xlUp).Row
If Rows(i).Hidden = True Then

End If
но ни как не соображу что надо ставить после then

А если наоборот?
[vba]
Код
For i = 3 To .Cells(Rows.Count, 1).End(xlUp).Row
        If Rows(i).Hidden = false Then
'что-то делаем
        End If
[/vba]

Автор - _Boroda_
Дата добавления - 06.06.2016 в 23:23
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Не обрабатывать строки скрытые фильтрами (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!