Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > VB for Application > Как в Excel привязать столбец к userform?


Автор: ^D^ima 14.11.12, 07:07
Имеется таблица Excel. Как проще сделать так, чтобы при щелчке в любую ячейку определенного столбца открывалась UserForm и этой форме были переданы координаты ячейки? Или как привязать комбобокс к столбцу, чтобы пользователи выбирали данные этой ячейки из комбобокса?

Автор: ^D^ima 14.11.12, 08:44
Я нашел пример, только помогите понять:
1 В примере есть комбобокс, визуально найти не могу. Он судя по всему создается не в realtime, тогда где посмотреть список объектов, которые есть на листе?
2 В свойствах этого комбобокс есть поле ListFillRange, там стоит значение "области". Где посмотреть эти "области" и что это такое?

Sample__14_05_2010__22_29_35.zip (, : 420)

Автор: Akina 14.11.12, 09:21
Открой Эксель.
На листе пометь нужный диапазон (например, прямоугольный от C5 до F13, пометить заливкой... ну или весь столбец, как там тебе надо).
Иди в редактор VBA.
Добавь в проект форму UserForm1.
Брось на неё надпись Label1.
Выбери в списке объектов тот лист, на котором отмечал диапазон.
Открой его модуль и напиши там (поправив во второй строке адрес помеченного диапазона):
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect(Target, Range("C5:F13")) Is Nothing Then
        UserForm1.Label1.Caption = "Address: " & Target.Address
        UserForm1.Show
    End If
    End Sub

Наслаждайся эффектом.

Автор: ^D^ima 14.11.12, 10:17
Спасибо.
А если на форму добавить объект, то как к нему обратиться можно? Например добавили комбобокс и хотим изменить его местоположение на странице.

Автор: Akina 14.11.12, 10:22
Точно так же, как я изменяю текст надписи.

Автор: ^D^ima 14.11.12, 10:37
Я имел в виду не на форме, а на листе worksheet:
user posted image
Если мы нажимаем свойство этого объекта, то выскакивает окно "формат элемента управления", а не полноценное окно properties как для всего Листа. Т.е. не посмотреть имя объекта, для обращения к нему.

Автор: Akina 14.11.12, 11:08
Ну так и разбирайся в объектной модели Экселя, что это за объект и в каком контейнере и как его искать...

Автор: Old Bat 14.11.12, 13:34
Цитата ^D^ima @
как к нему обратиться можно? Например добавили комбобокс и хотим изменить его местоположение на странице.

ежели переместить вручную - то кликаешь по объекту мышой, удерживая Ctrl - и вперед
ежели хочешь помучить программно, то имя автоматом формируется по принципу: название объекта + инкремент, т.о. в твоем случае

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    For Each xx In ActiveSheet.Shapes
    Debug.Print xx.Name
    Next

выдаст нечто вроде Drop Down 1

Автор: ^D^ima 14.11.12, 13:50
Old Bat
Получил Drop Down 2. А как затем что-то изменить у этого объекта?
user posted image

Автор: Akina 14.11.12, 14:02
Цитата ^D^ima @
Old Bat

А фигли ты Dr начинаешь набирать? тебе же показали - ActiveSheet.Shapes("Drop Down 2"). набирать надо... или около того. Ну или xx - только тогда напиши для него правильный Dim.

Автор: Old Bat 14.11.12, 14:04
к объекту обращаемся либо по имени, либо по номеру, например:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ActiveSheet.Shapes("Drop Down 2").Name = "qwe"

Автор: Old Bat 14.11.12, 15:49
Но по-хорошему вопрос решается стандартными средствами, без программинга, через ИМЯ диапазона.

Автор: ^D^ima 14.11.12, 17:25
Old Bat
А в примере во 2-м посте как создается combobox? У него нормальные свойства.

Автор: Old Bat 14.11.12, 18:40
именно через диапазон, в данном случае с именем "области", ссылающееся на =Список!$A$1:$A$5

см. закладку ФОРМУЛЫ, раздел ОПРЕДЕЛЕННЫЕ ИМЕНА
+ встроенная справка, глава "Определение и использование имен в формулах"

Автор: ^D^ima 14.11.12, 18:56
Ясно. Спасибо.

Добавлено
И все-же не нашел где там создается сам combobox? На форме его не видно, при создании Worksheet_Activate() тоже ничего нет, а обращение Me.Combo есть.

Автор: Old Bat 14.11.12, 21:14
http://office.microsoft.com/ru-ru/excel-he...P010072599.aspx

Автор: ^D^ima 15.11.12, 06:21
Там не совсем так, но за ссылку спасибо. Оказывается все можно сделать проще...

Автор: Azx 06.03.20, 11:32
Добрый день!

Большое спрасибо за макрос.

Все работает, но у меня есть нюанс:

Если ввести в ячейку построчный текст как в поле [Реквизиты] - выает ошибку и не вставляет.

Что я делаю неправильно?

(прикрепил скрин)
____________.PNG (, : 191)

Автор: pashulka 07.03.20, 06:18
Azx, В макросе вообще нет никаких проблем с построчным текстом (кроме того, что в поле со списком, он будет отображаться в одну строку). Так что лучше опубликуйте свой файл (а не картинку), где происходит ошибка.

Автор: Azx 09.03.20, 09:29
Файл
Macro.rar (, : 122)

Добавлено
Как только удаляю все из поля [Реквизиты] - все работает. Добавляю реквизиты - ошибка.

Автор: pashulka 17.03.20, 19:03
Azx, В Word (как и в Excel) есть ограничение на количество символов в поиске/замене.
Если оно(кол-во) превышает 255, возникает ошибка. Так что заменить один текст на другой, таким способом - Вам не удастся.
Но повторюсь, никаких проблем с построчным текстом нет.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)