Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.11.2017, 21:35   #1
lutorius
 
Регистрация: 15.11.2017
Сообщений: 5
По умолчанию Нужна помощь с привязкой функции и не только (Excel VBA)

Добрый день

Имеется функция

Код:
Sub HideEmptyRows() 
Dim r As Long, FirstRow As Long, LastRow As Long 
FirstRow = ActiveSheet.UsedRange.Row 
LastRow = ActiveSheet.UsedRange.Rows.Count - 1 + ActiveSheet.UsedRange.Row 
   For r = LastRow To FirstRow Step -1 
       If Application.CountA(Rows®) = 0 Then 
           Rows®.Hidden = True 
           Else 
           Rows®.Hidden = False 
       End If 
   Next r 
End Sub
Как ее привязать к отдельным листам и указать в ней строки, которые не надо скрывать на этих листах?
(Строки на каждом листе разные)

Спасибо


_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 16.11.2017 в 09:31.
lutorius вне форума Ответить с цитированием
Старый 16.11.2017, 07:59   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Код:
Sub HideEmptyRows()
Dim r As Long, FirstRow As Long, LastRow As Long
dim s as string
dim a() as string
s="Лист1,Лист2"
a=split(s,",")

For i = LBound(A) To UBound(A)
              
 with a(i)       
 FirstRow = .UsedRange.Row
 LastRow = .UsedRange.Rows.Count - 1 + .UsedRange.Row
 For r = LastRow To FirstRow Step -1
  If Application.CountA(.Rows®) = 0 Then
   .Rows®.Hidden = True
  Else
   .Rows®.Hidden = False
  End If
 Next r
 end with
Next i
End Sub
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 16.11.2017, 09:40   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

извините за оффтоп. а что это за значок "®" после .Rows ?
code.png
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.11.2017, 11:06   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Сергей это
Код:
Rows(r)
если код обрамлять тегом код, то
Код:
0;) будет выглядеть как 0;)
а не 0 в тексте сообщения
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 16.11.2017, 11:32   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
Сергей это
Код:
Rows(r)
Теперь всё понятно. спасибо.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.11.2017, 12:20   #6
lutorius
 
Регистрация: 15.11.2017
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
Код:
Sub HideEmptyRows()
Dim r As Long, FirstRow As Long, LastRow As Long
dim s as string
dim a() as string
s="Лист1,Лист2"
a=split(s,",")

For i = LBound(A) To UBound(A)
              
 with a(i)       
 FirstRow = .UsedRange.Row
 LastRow = .UsedRange.Rows.Count - 1 + .UsedRange.Row
 For r = LastRow To FirstRow Step -1
  If Application.CountA(.Rows®) = 0 Then
   .Rows®.Hidden = True
  Else
   .Rows®.Hidden = False
  End If
 Next r
 end with
Next i
End Sub
А можно пояснить что тут что? Я не разбираюсь в программировании
Например на первом листе не надо скрывать строки с 1 по 5 включительно, а на втором 7-ю и 16-ю
Спасибо

Последний раз редактировалось lutorius; 16.11.2017 в 12:28.
lutorius вне форума Ответить с цитированием
Старый 16.11.2017, 14:59   #7
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
Sub HideEmptyRowsExclus()
  Dim ws&, Exc&(1 To 2, 1 To 16), Excs, i&, hd As Boolean
  Excs = Array(1, 2, 3, 4, 5) ' исключения на 1-м листе
  For i = LBound(Excs) To UBound(Excs): Exc(1, Excs(i)) = 1: Next
  Excs = Array(7, 16)         ' исключения на 2-м листе
  For i = LBound(Excs) To UBound(Excs): Exc(2, Excs(i)) = 1: Next
  For ws = 1 To 2
    With Worksheets(ws)
      For r = 1 To .UsedRange.Rows.Count - 1 + UsedRange.Row
        If r > 16 Then hd = True Else hd = Exc(ws, r) = 0
        .Rows(r).Hidden = WorksheetFunction.CountA(.Rows(r)) = 0 And hd
      Next
    End With
  Next
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 16.11.2017 в 15:24.
IgorGO вне форума Ответить с цитированием
Старый 17.11.2017, 11:37   #8
lutorius
 
Регистрация: 15.11.2017
Сообщений: 5
По умолчанию

Спасибо на винде работает, но вот на маке не хочет. В чем может быть проблема?

Код:
Sub HideEmptyRows()
  Dim i As Long, row As Long, firstRow As Long, lastRow As Long

 Dim excludeRows()
  excludeRows = Array(Array(1, 2, 3, 4, 5, 9, 17, 40), Array(1, 2, 3, 4, 5, 28), Array(1, 2, 3, 4, 5, 74), Array(1, 2, 3, 4, 5, 510))
  
 Dim sheets()
  sheets = Array("Summary", "Carline", "Variant", "Area - Carline")

For i = LBound(sheets) To UBound(sheets)

  With Worksheets(sheets(i))
    
  firstRow = .UsedRange.row
   lastRow = .UsedRange.Rows.Count - 1 + .UsedRange.row
    
  For row = lastRow To firstRow Step -1
      If (IsError(Application.Match(row, excludeRows(i), 0))) Then
        If Application.WorksheetFunction.CountA(.Rows(row)) = 0 Then
          .Rows(row).Hidden = True
        Else
          .Rows(row).Hidden = False
        End If
      End If
    Next row
    
  End With
  Next i


End Sub
Это итоговый код, который записан в модуле. На каждой странице есть такой триггер на запуск этой функции:

Код:
Private Sub Worksheet_PivotTableChangeSync(ByVal Target As PivotTable)

Call HideEmptyRows

End Sub
Но на маке такая схема не хочет работать

Последний раз редактировалось lutorius; 17.11.2017 в 12:05.
lutorius вне форума Ответить с цитированием
Старый 17.11.2017, 20:44   #9
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

проблема может быть в несовместимости
высылайте мне МАК
я Вам вышлю работающий код
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 24.11.2017, 16:19   #10
lutorius
 
Регистрация: 15.11.2017
Сообщений: 5
По умолчанию

Пробелма решена. Тему можно закрыть
lutorius вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VBA помощь нужна!!! lodret Помощь студентам 1 23.04.2014 09:33
Нужна помощь по VBA masha93 Помощь студентам 2 09.10.2013 23:55
Очень нужна помощь c матрицами, макросами в Excel. Заранее благодарен(поверьте, очень-очень нужна помощь) Farridjan Помощь студентам 1 03.07.2009 12:24
Нужна помощь по вставке изображения путем VBA ACCESS в файл EXCEL AlVBA Microsoft Office Access 2 18.05.2009 15:58
нужна помощь - работа с объектами и не только freemotivation Паскаль, Turbo Pascal, PascalABC.NET 6 22.11.2008 01:29