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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2014, 09:54   #1
who
Пользователь
 
Регистрация: 11.09.2014
Сообщений: 44
По умолчанию Перебор кнопок циклом

И снова, здравствуйте!
есть такой
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
'Stop
'Sub d2()
Dim rng As Range: Set rng = [B4:C4] If Not Intersect(rng, Target) Is Nothing Then
    Sheets(1).Name = Cells(2, 3)
    '
    If Sheets(3).Cells(23, 13) = "" Then
    Sheets(1).CommandButton2.Caption = "Перейти к изделию " & Sheets(3).index - 2
    Else
    Sheets(1).CommandButton2.Caption = "Перейти к " & Sheets(3).Cells(23, 13)
    End If
... вплоть до  Sheets(12).Cells(23, 13) и Sheets(1).CommandButton11 (10 листов и 10 кнопок)
можно ли перебрать кнопки циклом?
что-нибудь типа:
Код:
    For i = 3 To Sheets.Count - 1
    If Sheets(i).Cells(23, 13) = "" Then
    Sheets(1).CommandButton[(i-1) - для примера].Caption = "Перейти к изделию " & Sheets(i).index - 1
    Else
    Sheets(1).CommandButton[(i-1) - для примера].Caption = "Перейти к " & Sheets(i).Cells(23, 13)
    End If
?
я пока не допёр...

Последний раз редактировалось who; 06.11.2014 в 08:36.
who вне форума Ответить с цитированием
Старый 05.11.2014, 10:59   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

как-то так
Код:
dim sh as shape
for i = 3 to workSheets.Count - 1
  for each sh in worksheets(i).shapes
    if sh.name like "commandbutton*" then
      if ... then sh.caption = "..."
    end if
  next
next
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 05.11.2014, 11:08   #3
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Файлик бы показали с парой тройкой своих кнопок.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 05.11.2014, 11:23   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

если Вы полностью доверелись Ексель в названи кнопок - это уже сработает, а если, как нормальный программист, дали кнопкам осмысленные имена типа Save, Add, Del и пр. чтобы потом в коде читать (а главное - понимать) Save_Click гораздо проще, чем CommandButton3_Click

я называю кнопки так:
ComButSave, ComButAdd...
и по именам понятно предназначение кнопки и циклом можно пройтись при необходимости
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 05.11.2014, 15:48   #5
who
Пользователь
 
Регистрация: 11.09.2014
Сообщений: 44
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Файлик бы показали с парой тройкой своих кнопок.
показал бы, да он уже разросся до 30 метров, лень думать, что можно из него выкинуть

Цитата:
Сообщение от IgorGO
как-то так
Код:
dim sh as shape
for i = 3 to workSheets.Count - 1
  for each sh in worksheets(i).shapes
    if sh.name like "commandbutton*" then
      if ... then sh.caption = "..."
    end if
  next
next

спасибо буду пробовать.
Цитата:
Сообщение от IgorGO
если Вы полностью доверелись Ексель в названи кнопок - это уже сработает, а если, как нормальный программист, дали кнопкам осмысленные имена типа Save, Add, Del и пр. чтобы потом в коде читать (а главное - понимать) Save_Click гораздо проще, чем CommandButton3_Click

я называю кнопки так:
ComButSave, ComButAdd...
и по именам понятно предназначение кнопки и циклом можно пройтись при необходимости
кнопки на этом листе для перехода на другие листы. поэтому не переименовывал, да и в принципе имена почти не меняю ‒ какой-же я "нормальный программист", если самоучка? пишу макросы, чтобы немного облегчить себе работу в будущем
только сегодня допёр как и, главное, где объявлять глобальные переменные

Последний раз редактировалось who; 06.11.2014 в 08:36.
who вне форума Ответить с цитированием
Старый 05.11.2014, 15:59   #6
who
Пользователь
 
Регистрация: 11.09.2014
Сообщений: 44
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
как-то так
Код:
dim sh as shape
for i = 3 to workSheets.Count - 1
  for each sh in worksheets(i).shapes
    if sh.name like "commandbutton*" then
      if ... then sh.caption = "..."
    end if
  next
next
я тут немного проанализировал предложенный Вами код...
получается он перебирает кнопки на листах от "i" и до "workSheets.Count - 1"
а нужные мне кнопки находятся на первом листе, и их имена, присвоенные им excel-ем начинаются от "CommandButton2" и до "CommandButton11"
вот их я и хочу перебрать.
получается мне надо делать, наверное, так
Код:
dim sh as shape
for i = 3 to workSheets.Count - 1
  for each sh in worksheets(1).shapes
    if sh.name like "commandbutton*" & i-1 then
      if ... then sh.caption = "..."
    end if
  next
next
я верно рассуждаю?

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

да, осталось только лишний цикл (по листам) викинуть
Код:
dim sh as shape
  for each sh in worksheets(i).shapes
    if sh.name like "commandbutton*" then
      if ... then sh.caption = "..."
    end if
  next
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 06.11.2014, 08:48   #8
who
Пользователь
 
Регистрация: 11.09.2014
Сообщений: 44
По умолчанию

Ув . IgorGO, что-то я запутался.
в этом коде:
Код:
dim sh as shape
for i = 3 to workSheets.Count - 1
  for each sh in worksheets(1).shapes
    if sh.name like "commandbutton*" & i-1 then
      if ... then sh.caption = "..."
    end if
  next
next
строка
Код:
for i = 3 to workSheets.Count - 1
всего лишь определяет количество кнопок которые нужно переименовать, причём "workSheets.Count - 1" можно просто заменить на "12".
а строка " for each sh in worksheets(1).shapes" (для каждого sh из шейпов на рабочем листе (1)) описывает шейпы на листе, на котором перебираем шейпы, и, по моему ставить в дужки "i" получается незачем, так?
и соответственно выкидывать
for i = 3 to workSheets.Count - 1
не нужно

Последний раз редактировалось who; 06.11.2014 в 09:13.
who вне форума Ответить с цитированием
Старый 06.11.2014, 09:27   #9
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

в том коде строка
for i = 3 to workSheets.Count - 1
не определяет колическво кнопок, я ее вообще викинул и рекомендовал использовать то, что написал сообщением выше.

извините, используйте теперь что хотите, я выходу из переписки по теме
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 06.11.2014, 14:57   #10
who
Пользователь
 
Регистрация: 11.09.2014
Сообщений: 44
По умолчанию

Спасибо за помощь принцип понял... только
Код:
sh.caption = "..."
"Object doesn't support this property or method"

У меня получился такой
Код:
  For Each sh In Worksheets(1).Shapes
sn = sh.Name
    If sh.Name Like n Then
    If Sheets(i).Cells(23, 13) = "" Then
    Sheets(i).Name = Sheets(i).Cells(3, 14) & Sheets(i).index - 2
    Sheets(1).sh.Caption = "Перейти к изделию " & Sheets(i).Cells(23, 13) & Sheets(i).index - 2
    Sheets(i).Cells(1, 1) = Sheets(i).Cells(3, 3)
    Else
    Sheets(i).Name = Sheets(i).Cells(3, 14)
    Sheets(1).sh.Caption = "Перейти к" & Sheets(i).Cells(23, 13)
    Sheets(i).Cells(1, 1) = Sheets(i).Cells(3, 3)
    End If
    Exit Sub
    End If
  Next
в окне "Locals" при пошаговом выполнении видно как цикл находит нужный шейп, но в перечне его свойств действительно отсутствует "Caption"

Последний раз редактировалось who; 06.11.2014 в 15:03.
who вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа перебора вариантов (изменить перебор цифровой на перебор буквенный) BArt2000 Паскаль, Turbo Pascal, PascalABC.NET 5 02.03.2015 12:56
Перебор maxsept Общие вопросы Delphi 3 28.02.2013 19:03
VBA перебор циклом динамического диапазона Argentum Microsoft Office Excel 2 24.06.2012 05:45
перебор в с++ Girl/C++ Общие вопросы C/C++ 3 04.10.2010 09:50
задача с циклом while lammy Помощь студентам 1 09.12.2009 16:06