Страница 1 из 2

Изменение Имени Контролла

Добавлено: 28 янв 2008, 20:24
stepankobzey
Здраствуйте,
есть такая проблема. На форме есть много контролов, которые нужно переименовать под свои нужди, соответствено 700 контролов рукачи переименововать - неинтересно. Есть кусок кода получений с одного туториала, но чтото он неработает:

Код: Выделить всё

Sub ChangeControls()    
    Dim ctl As Control
    Dim uf As VBIDE.VBComponent
    Dim vbp As VBProject 
    Set vbp = Application.VBE.VBProjects("SalesInfoSheet")    
    Set uf = vbp.VBComponents("UOrders") 
    For Each ctl In uf.Designer.Controls
        Select Case ctl.Left
            Case 6
                ctl.Name = "mybutton" & CLng(((ctl.Top - 30) / 18) + 1)
                Next ctl    
End Sub
точнее неработает uf.Designer.Controls -> ексель говорит, что в uf.Designer нет свойства Controls и на етом всьо тормозит.

Если ктото знает как ето исправить, или какието другие варианти помогите пожалуста
Версия Excel 2003 или Excel 2007. Спасибо

Re: Изменение Имени Контролла

Добавлено: 28 янв 2008, 23:01
Teslenko_EA
Здравствуйте stepankobzey.
в коде ошибки синтаксиса, (не закрыт Select) !
Имя проекта действительно "SalesInfoSheet", а форрмы "UOrders", к которым идет обращение в скрипте?
Set vbp = Application.VBE.VBProjects("SalesInfoSheet") - подключение к проекту VB, "Версия Excel 2003 или Excel 2007" - как понимать VB или VBA?
В VB править форму (файл frm) можно с помощью текстового редактора.

Думаю Вам стоит пересмотреть "свои нужди", 700 контролов размещенных на форме, это не есть хорошо. Только для того что бы задать им имена - создается специальный скрипт(!), Пожалейте пользователей.
Евгений.

Re: Изменение Имени Контролла

Добавлено: 29 янв 2008, 01:20
stepankobzey
Спасибо Евгений за ответ,
действительно не закрыт Select, моя ошибка, удалил при редактировании поста, на самом деле она существует, eто пример VBA, пробивал на Excel 2003 и Excel 2007. Пример очень хороший, но не работает. Вот для примера ещо один:

Код: Выделить всё

Sub RenameControls() 
    Dim vbpTemp As VBProject 
    Dim frmTemp As VBComponent 
    Dim cntTemp As MSForms.Control      
    Set vbpTemp = Application.VBE.ActiveVBProject 
    Set frmTemp = vbpTemp.VBComponents.Item("Userform1")      
    For Each cntTemp In frmTemp.Designer.Controls 
        If TypeOf cntTemp Is MSForms.TextBox Then 
            Select  Case UCase(cntTemp.Name) 
            Case "TEXTBOX1" 
                cntTemp.Name = "txtUsername" 
            Case "TEXTBOX2" 
                cntTemp.Name = "txtDepartment" 
            Case "TEXTBOX3" 
                cntTemp.Name = "txtAccount" 
            End Select 
        End If 
    Next      
End Sub 
вроде всьо ОК, но вот frmTemp.Designer.Controls -> ексель говорит, что в frmTemp.Designer нет свойства Controls и на етом всьо тормозит. Викидает runtime error '424' -> Object required. И подсвечивает "For Each cntTemp In frmTemp.Designer.Controls ". Но смотрю что другие пользовались, и коментируюют что работает. А у меня нет. Ета функция визиваетса один раз при визове форми для переименования TEXTBOX, что им легко било присвоить значение ячеек екселя. Пробивал вручную редактировать фаил екселя, но он после етого неработает. Пожалуста если кто знает как заставить ету функуцию работать, ПОМОГИТЕ. Спасибо большие

Re: Изменение Имени Контролла

Добавлено: 29 янв 2008, 11:53
Pavel55
Ваш последний код у меня замечательно отработал и изменил название всех 3-х TextBox'ов. Я лишь подключил библиотеку "Microsoft Visual Basic for Applications Extensibility 5.3" в Tools-References. У меня Office 2003. Проверял в Excel

Re: Изменение Имени Контролла

Добавлено: 29 янв 2008, 16:18
stepankobzey
Ваш последний код у меня замечательно отработал и изменил название всех 3-х TextBox'ов. Я лишь подключил библиотеку "Microsoft Visual Basic for Applications Extensibility 5.3" в Tools-References. У меня Office 2003. Проверял в Excel

Спасибо, за ответ,
но почемуто у меня проблема остайотса. Пробивал и на разних машинах и на Excel-х. Библиотека "Microsoft Visual Basic for Applications Extensibility 5.3" подключена. При попитке запустить код на рабочей машине, получаю Runtime Error '91'-> Object Variable or With block not set и подсвечиваетса For Each cntTemp In frmTemp.Designer.Controls. Что же у меня не так? Подскажите пожалуста. Спасибо за помощь

Re: Изменение Имени Контролла

Добавлено: 29 янв 2008, 16:32
Pavel55
У меня подключены след. библиотеки

1) Visual Basic for Application
2) Microsoft Excel 11.0 Object Library
3) OLE Automation
4) Microsoft Office 11.0 Object Library
5) Microsoft Form 2.0 Object Library
6) Microsoft Visual Basic for Applications Extensibility 5.3

Подключены ли они у вас? Если ДА, то снимите галочки с них и поставьте заново.

Re: Изменение Имени Контролла

Добавлено: 29 янв 2008, 19:17
Pavel55
Вот, посмотрите

Re: Изменение Имени Контролла

Добавлено: 29 янв 2008, 21:18
stepankobzey
Особая благодарность обявляетса тобарищу Pavel55 за помощь и терпение проявленое в ходе боевих дествий с VBA. Также товарищу Teslenko_EA обявляетса благодарность, за хороший ответ. Проблема била решина. Все оказалось просто. Я визивал функцию переименования, с самой USERFORM, тогда как ее следовало визивать, з рабочего листа(что прекрасно показано в примере Pavel55), пока форма закрита. Все гениальное просто. :) Тему можно щитать закритой. Все товарищам мойо многократное УРА...

Re: Изменение Имени Контролла

Добавлено: 29 янв 2008, 23:12
kminas
Pavel55 писал(а):У меня подключены след. библиотеки

1) Visual Basic for Application
2) Microsoft Excel 11.0 Object Library
3) OLE Automation
4) Microsoft Office 11.0 Object Library
5) Microsoft Form 2.0 Object Library
6) Microsoft Visual Basic for Applications Extensibility 5.3

Подключены ли они у вас? Если ДА, то снимите галочки с них и поставьте заново.
А почему у меня не все эти библиотеки?
4) Microsoft Office 11.0 Object Library только 10.0
5) Microsoft Form 2.0 Object Library - нет

Re: Изменение Имени Контролла

Добавлено: 29 янв 2008, 23:49
stepankobzey
попробуй переустанови офис и скачай обновдения