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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2013, 20:18   #1
VITA11111
Пользователь
 
Регистрация: 03.07.2012
Сообщений: 50
По умолчанию ПРОБЛЕМА С ОБЪЕКТАМИ Label

Вобщем проблема такая:
Расставил объекты ,которые прописаны макросом на скрытие диапазона строк, эти диапазоны пересекаются поэтому при скрытии строк объекты в этом диапазоне тоже скрываются все было бы хорошо если бы после записи и закрытии книги , а потом открытия файла и раскрытия строк объекты не становятся по строкам
решил проблему макросом ,но каждый раз получается надо выполнять макрос по растановки объектов (а их около 150 шт.)по строкам ,а это немного тормозит
Код:
Private Sub КНОПКИ_ПЛЮС_МИНУС()
     Application.ScreenUpdating = False
     Sheets("РАБОЧИЙ ПЛАН").Shapes.Range(Array("ТП_МИНУС", "ТП_ПЛЮС")).Top = Cells(Sheets("kn").Range("C1"), 8).Top
      End Sub
приклепляю пример нажмите на "+"
Вложения
Тип файла: rar Книга1.xlsx.rar (131.7 Кб, 20 просмотров)

Последний раз редактировалось VITA11111; 03.05.2013 в 20:57.
VITA11111 вне форума Ответить с цитированием
Старый 03.05.2013, 20:31   #2
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Попробуйте поиграть с параметрами привязки объекта к ячейкам: Формат - Свойства - Привязка объекта к фону.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 03.05.2013, 20:42   #3
VITA11111
Пользователь
 
Регистрация: 03.07.2012
Сообщений: 50
По умолчанию

Я пробывал много раз и так и так проблема не решается,поэтому решил только через макрос
VITA11111 вне форума Ответить с цитированием
Старый 04.05.2013, 08:41   #4
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Предлагаю не использовать объекты, а макросы запускать по событию
Код:
Worksheet_SelectionChange(ByVal Target As Range)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 04.05.2013, 19:50   #5
VITA11111
Пользователь
 
Регистрация: 03.07.2012
Сообщений: 50
По умолчанию

я так понимаю что при выделении ячейки будет выполнятся макрос
это хорошая идея даже незнал



так надо написать
Код:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Application.ScreenUpdating = False
     If Target.Row = Sheets("kn").[C1] And Target.Column = 8 Then
 'МАКРОС1
     End If
     If Target.Row = Sheets("kn").[C1] And Target.Column = 9 Then
'МАКРОС2
     End If
    Application.ScreenUpdating = True
End Sub
т.е. если расположение выделенной ячейки в столбце 8 на листе "рабочий план" = расположению(значение вычисляется по формуле на листе "kn"(счет строк в диапазоне на литсе "рабочий план") ) в столбце 8 на листе "рабочий план"

Последний раз редактировалось VITA11111; 05.05.2013 в 01:17.
VITA11111 вне форума Ответить с цитированием
Старый 05.05.2013, 07:27   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Именно так. Еще можно присвоить имя требуемым ячейкам, и тогда при добавлении (удалении) строк (столбцов) не потребуется вычислять их адрес. Например:
Код:
If Target.Address = Range("плюс").Address Then Макрос1
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 06.05.2013, 16:42   #7
VITA11111
Пользователь
 
Регистрация: 03.07.2012
Сообщений: 50
По умолчанию

Код:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     If Target.Address = Range("ТП_МИНУС").Address Then: Run "лист16.ТП_МИНУС"
     If Target.Address = Range("ТП_ПЛЮС").Address Then: Run "лист16.ТП_ПЛЮС"
     If Target.Address = Range("ОФП_МИНУС").Address Then: Run "лист16.ОФП_МИНУС"
     If Target.Address = Range("ОФП_ПЛЮС").Address Then: Run "лист16.ОФП_ПЛЮС"
     If Target.Address = Range("СФП_МИНУС").Address Then: Run "лист16.СФП_МИНУС"
     If Target.Address = Range("СФП_ПЛЮС").Address Then: Run "лист16.СФП_ПЛЮС"
End Sub
И ТАКИХ СТРОК МНОГО (264)
ИЗ-ЗА ЭТОГО ПИШЕТ ОШИБКУ ПРОЦЕДУРА СЛИШКОМ БОЛЬШАЯ
ЧТО ДЕЛАТЬ?
ТУТ ХОРОШО ЧТО ИМЯ МАКРОСА СОВПАДАЕТ С ИМЕНЕМ ЯЧЕЙКИ КОТРАЯ ЗАПУСКАЕТ МАКРОС

Последний раз редактировалось VITA11111; 06.05.2013 в 17:36.
VITA11111 вне форума Ответить с цитированием
Старый 06.05.2013, 20:22   #8
VITA11111
Пользователь
 
Регистрация: 03.07.2012
Сообщений: 50
По умолчанию

т.е. мысля такая
если выделенная ячейка равняется одной из ячеек в массиве именнованых ячеек в книге тогда запускается макрос по имени выделенной ячейки

Код:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo Ex
  Run "лист16." & Target.Name.NameLocal
Ex:
End Sub
надо дать имя макросу такое же как и выделенной ячейке
и поместить в модуль листа этот макрос
срабатывает лучше чем объекты label и исчезла проблема
спасибо огромное SAS888 за идею и помощь

Последний раз редактировалось VITA11111; 07.05.2013 в 13:08.
VITA11111 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с неиспользуемыми объектами ViRTaCe C# (си шарп) 0 18.03.2012 23:26
проблема с объектами ((( katysha Общие вопросы Delphi 2 24.04.2011 08:27
Проблема с Label + Frame + Image iPanG Общие вопросы Delphi 9 21.02.2011 11:07
Проблема с WordWrap y Label MyLastHit Общие вопросы Delphi 3 02.01.2011 23:17
Проблема с объектами С++ bobby2008 Общие вопросы C/C++ 4 13.09.2010 15:58