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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.04.2009, 15:53   #11
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Я так понял, что у вас на эти комбобоксы прописаны события. Естественно, после изменения имени комбобокса, они работать не будут.
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 26.04.2009, 16:42   #12
Fierce
Пользователь
 
Регистрация: 11.04.2009
Сообщений: 29
По умолчанию

EducatedFool, пишет, что все успешно переименовано. Но проблема в том, что если добавить процедуру, например:
Код:
Private Sub ComboBox1_1_Change()
Cells(1, 1) = 123
End Sub
Она не срабатывает. Я меняю значение на левом нижнем комбобоксе и ничего не происходит, хотя комбобокс по идее переименован из "ComboBox1_5" в "ComboBox1_1".
Да и в свойствах Name так и остаеться "ComboBox1_5", вот скрин
Fierce вне форума Ответить с цитированием
Старый 26.04.2009, 16:47   #13
Fierce
Пользователь
 
Регистрация: 11.04.2009
Сообщений: 29
По умолчанию

viter.alex Если сделать так
Код:
Private Sub Button_Click()
Dim iObject As OLEObject
For Each iObject In Me.OLEObjects
    If iObject.Name Like "*" & 1 Then
        iObject.Delete
    End If
Next
Call ppp
End Sub

Sub ppp()
For Each iObject In Me.OLEObjects
    If iObject.Name Like "*" & 5 Then
        iObject.Name = Left(iObject.Name, Len(iObject.Name) - 1) & 1
    End If
Next
End Sub
То на четырех комбобоксах события срабатывают, а на пятом нет
Fierce вне форума Ответить с цитированием
Старый 26.04.2009, 16:52   #14
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

EducatedFool, сдается мне, что без класса здесь не обойтись.
Fierce, а зачем их переименовывать?
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 26.04.2009, 18:06   #15
Fierce
Пользователь
 
Регистрация: 11.04.2009
Сообщений: 29
По умолчанию

viter.alex Для каждого объекта прописан код. i и j - переменные Пусть объекты А - объекты, имя которых заканчиваеться на i, B - объекты, имя которых заканчиваеться на j
Хочу сделать, чтобы удалялась строка объектов "А", а объектам "В" присваивался код объектов "А"
Вот такой алгоритм я придумал:
1. Удаляеться строка объектов "А"
2. Удаляеться код объектов "В"
3. Переименовываем имена объектов "В" в имена объектов "А"
Все получаеться, кроме 3 пункта.

Может задежку поставить перед 3 пунктом? Вызвать процедуру через определенное время можно с помощью Application.OnTime, только как этой процедуре передать аргументы?
Fierce вне форума Ответить с цитированием
Старый 26.04.2009, 19:12   #16
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Цитата:
Сообщение от viter.alex Посмотреть сообщение
EducatedFool, сдается мне, что без класса здесь не обойтись.
Да ну их нафиг, эти классы... долго их писать, однако
Хотя, конечно, это было бы правильнее.
Наверняка задачу можно решить намного проще (правда, я представления не имею, чего пытается добиться ТС при помощи этих комбобоксов)

Цитата:
Сообщение от Fierce Посмотреть сообщение
Вот такой алгоритм я придумал:
1. Удаляеться строка объектов "А"
2. Удаляеться код объектов "В"
3. Переименовываем имена объектов "В" в имена объектов "А"
Может, не надо ничего удалять?
А что если перемещать комбобоксы? (это вроде проще...)

К примеру, по какому-нибудь событию ВСЕ комбобоксы сдвигаются на пару сантиметров вверх, а верхний ряд комбобоксов спускается в нижнюю строку...
При желании отдельные комбобоксы можно скрыть (путем установки ширины и высоты в 0), и т.д.

И, вообще, зачем всё усложнять?
Зачем все эти комбобоксы? Чем Вас ячейки не устраивают?
В них тоже можно формировать выпадающие списки, да и работать с ними намного удобнее...
EducatedFool вне форума Ответить с цитированием
Старый 27.04.2009, 00:06   #17
Fierce
Пользователь
 
Регистрация: 11.04.2009
Сообщений: 29
По умолчанию

Я наверное действительно все сильно усложнил. Ладно, если ничего с переименовкой не придумаю, заменю комбобоксы ячейками с выпадающими списками.
Всем, кто помогал, большое спасибо
Fierce вне форума Ответить с цитированием
Старый 27.04.2009, 16:30   #18
Fierce
Пользователь
 
Регистрация: 11.04.2009
Сообщений: 29
По умолчанию

Проблема с переименовкой решена с помощью задержки на 1 сек.
Код:
Private Sub Button_Click()

Dim iObject As OLEObject
For Each iObject In Worksheets(1).OLEObjects
    If Right(iObject.Name, 1) = 1 Then
        iObject.Delete
    End If
Next
Application.OnTime Now + TimeValue("00:00:01"), "ppp"
End Sub

Sub ppp()
For Each iObject In Worksheets(1).OLEObjects
    If Right(iObject.Name, 1) = 5 Then
        iObject.Name = Left(iObject.Name, Len(iObject.Name) - 1) & 1
    End If
Next
End Sub
Fierce вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переименование файла Патрон Общие вопросы Delphi 17 09.04.2008 16:50