Получение ссылки на диапазон ячеек и ее изменение путем выделения ячеек на рабочем листе с помощью элемента управления пользовательской формы RefEdit.
UserForm.RefEdit – это элемент управления пользовательской формы, предназначенный для получения и редактирования ссылок на диапазон ячеек путем выделения диапазона на рабочем листе или вручную в поле редактора ссылок.
Кнопка справа от поля ввода и редактирования ссылок предназначена для сворачивания пользовательской формы в «одну строку». На свернутой форме остается только элемент управления RefEdit и становится доступным ввод адреса диапазона путем выделения ячеек на рабочем листе.
В стандартном наборе инструментов пользовательской формы Toolbox элемента управления RefEdit нет. Чтобы его добавить, кликните правой кнопкой мыши на Toolbox и выберите ссылку «Additional Controls…»:
В окне Additional Controls найдите строку RefEdit Ctrl:
Выберите строку RefEdit Ctrl и нажмите кнопку «OK». Значок элемента управления RefEdit будет добавлен на Toolbox (последний в списке):
Свойства элемента RefEdit
Почти все свойства элемента управления RefEdit аналогичны свойствам текстового поля (TextBox). Со всеми доступными свойствами редактора ссылок вы можете ознакомиться в окне Properties элемента управления RefEdit.
Основное свойство RefEdit, являющееся свойством по умолчанию, – это Text. Как и у текстового поля, свойство Text элемента RefEdit дублируется свойством Value. Если в окне Properties начать набор символов в поле свойства Text, ввод будет автоматически дублироваться в поле свойства Value.
Использование редактора ссылок
Открываем пользовательскую форму с элементом управления RefEdit:
Нажимаем на кнопку справа и выбираем диапазон на рабочем листе:
Полный адрес включает название листа и абсолютный адрес выбранного диапазона ячеек. После повторного нажатия на кнопку справа от поля ввода пользовательская форма принимает первоначальный вид:
Проверяем, что свойство Text редактора ссылок является свойством по умолчанию:
Private Sub CommandButton1_Click() MsgBox RefEdit1 End Sub |
Присвоение текста «VBA Excel» всем выбранным ячейкам по записанному адресу диапазона:
Range(RefEdit1) = «VBA Excel» |
Так можно обратиться к первой из выбранных ячеек и отобразить ее значение в информационном окне MsgBox:
MsgBox Range(RefEdit1).Cells(1) |
Получение адреса диапазона путем его ручного выбора на рабочем листе возможно также с помощью метода Application.InputBox.
Как работает Refedit |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
GIG_ant Пользователь Сообщений: 3102 |
Добрый день, уважаемые! |
VovaK Пользователь Сообщений: 1716 |
1 вопрос: |
GIG_ant Пользователь Сообщений: 3102 |
{quote}{login=VovaK}{date=21.04.2011 09:34}{thema=}{post}1 вопрос: |
GIG_ant Пользователь Сообщений: 3102 |
Для наглядности пример. |
1) Я сжимаю RefEdit до размеров DropButton и прячу под TextBox, а в него вставляю текст рефэдит’а. |
|
GIG_ant Пользователь Сообщений: 3102 |
{quote}{login=С.М.}{date=21.04.2011 10:37}{thema=Re: }{post}1) Я сжимаю RefEdit до размеров DropButton и прячу под TextBox, а в него вставляю текст рефэдит’а. Спасибо за вариант, поэксперементирую. |
VovaK Пользователь Сообщений: 1716 |
|
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
По вопросу № 3. А событие Worksheet_SelectionChange, в котором подсчитывать к-во выделенных ячеек, разве нельзя прикрутить? |
Igor67 Пользователь Сообщений: 3726 |
Попробуйте так, но есть ошибка. Если будете выбирать ячейки через форму — нормально, шелкать сразу по листу — тоже, но чередовать — сбой, RefEdit не очищается и не знаю как это сделать. Private Sub UserForm_Initialize() Private Sub RefEdit1_Change() End Sub |
GIG_ant Пользователь Сообщений: 3102 |
{quote}{login=VovaK}{date=21.04.2011 11:03}{thema=}{post}Событие Change{/post}{/quote} |
VovaK Пользователь Сообщений: 1716 |
Действительно в отличии от textboxa, где BeforeUpdate и AfterUpdate исправно работают в Refedit тишина… Конфуз однако. |
GIG_ant Пользователь Сообщений: 3102 |
{quote}{login=Юрий М}{date=21.04.2011 11:06}{thema=}{post}По вопросу № 3. А событие Worksheet_SelectionChange, в котором подсчитывать к-во выделенных ячеек, разве нельзя прикрутить?{/post}{/quote} Не пробовал. Тоже мысль, единственное как прикрутить вот в чем вопрос ? |
GIG_ant Пользователь Сообщений: 3102 |
{quote}{login=VovaK}{date=21.04.2011 11:20}{thema=}{post}Действительно в отличии от textboxa, где BeforeUpdate и AfterUpdate исправно работают в Refedit тишина… Конфуз однако.{/post}{/quote} И я об этом |
GIG_ant Пользователь Сообщений: 3102 |
{quote}{login=Igor67}{date=21.04.2011 11:13}{thema=}{post}Попробуйте так, но есть ошибка. Если будете выбирать ячейки через форму — нормально, шелкать сразу по листу — тоже, но чередовать — сбой, RefEdit не очищается и не знаю как это сделать. Private Sub UserForm_Initialize() Private Sub RefEdit1_Change() End Sub{/post}{/quote} Опять же после выделения не одной а нескольких ячеек все сбивается, шо ж за напасть ё-моё. |
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
А как Вы хотели? Выделяете несколько ячеек, а у них разная заливка. Какую Excel должен выбрать? Выделяйте по одной. |
VovaK Пользователь Сообщений: 1716 |
А в чем идея зачем Вам вообще Refedit? |
> Опять же после выделения не одной а нескольких ячеек все сбивается, шо ж за напасть ё-моё. |
|
GIG_ant Пользователь Сообщений: 3102 |
{quote}{login=VovaK}{date=21.04.2011 11:45}{thema=}{post}А в чем идея зачем Вам вообще Refedit?{/post}{/quote} Идея в следующем. |
GIG_ant Пользователь Сообщений: 3102 |
Ура, йес, прорыв, заработало, вау! |
С.М. Гость |
#20 23.04.2011 22:09:20 {quote}{login=GIG_ant}{date=22.04.2011 09:22}{thema=Re: }{post} Прикрепленные файлы
|
Сегодня предлагаю обсудить тему Microsoft Office. А именно документов Excel. Многие из вас, я думаю, заметили, что, начиная с 2010 версии все документы открываются в одном окне, несколькими вкладками, а ведь многооконный режим Excel значительно удобнее. Причины, по которым это реализовали понятны, открывается одно окно- один процесс в системе, что позволяет сэкономить ресурсы компьютера. О вкусах не спорят, кому-то может и удобно так работать, но по моему опыту и количеству обращений от пользователей, комфорта от такой реализации нет.
В статье я опишу способ как настроить работу программы в многооконный режим Excel, документ будет открываться в своем окне, а также приложу видео всей процедуры.
Согласитесь, людям, которые используют для работы несколько мониторов — это просто необходимо.
Для реализации такой задачи нам потребуется внести некоторые изменения в реестр системы. Используйте сочетание клавиш «win+r«, в открывшемся окне введите команду «regedit«.
Excel в основе своей использует два вида файлов .xls и .xlsx, найдем их и посмотрим значения.
- HKEY_CLASSES_ROOT.xls
- HKEY_CLASSES_ROOT.xlsx
В этих разделах нас интересует параметр — «По умолчанию (default)«. Его значение говорит нам о том, в каком каталоге необходимо вносить изменения. Для файлов .xls каталог называется Excel.Sheet.8, а для .xlsx Excel.Sheet.12.
Спускаемся ниже и открываем нужные нам папки.
- HKEY_CLASSES_ROOTExcel.Sheet.8shellOpencommand
- HKEY_CLASSES_ROOTExcel.Sheet.12shellOpencommand
В данном разделе нас интересует параметр — «По умолчанию (default)». Его значение равно:
«C:Program Files (x86)Microsoft OfficeOffice14EXCEL.EXE» /dde«
В него мы и будем вносить изменения, значение должно иметь вид:
«C:Program Files (x86)Microsoft OfficeOffice14EXCEL.EXE» /e “%1“«.
Т.е. требуется значение /dde заменить на /e «%1»
- В вашем случае путь может быть несколько иным, т.к. у меня установлена версия 32-бита.
Но это еще не все.
В каталоге HKEY_CLASSES_ROOTExcel.Sheet.8shellOpen есть папка ddeexec, ее необходимо переименовать (щелкнуть правой кнопкой мыши выбрать пункт «переименовать»). Закройте редактор реестра.
Теперь можно открыть несколько документов Excel и довольствоваться результатом.
- Для уточнения, всю процедуру редактирования необходимо провести как с файлами .xls и .xlsx, в каталогах Excel.Sheet.8 и Excel.Sheet.12.
Видео инструкция с описанными выше действиями:
На этом все. Надеюсь кому-то эта статья окажется полезной.
Спасибо за внимание.
Пишите комментарии, подписывайтесь на блог, буду регулярно размещать интересные задачи, которые возникают в процессе работы.
Всем добра!
Monday, January 11, 2010
Peltier Technical Services, Inc., Copyright © 2023, All rights reserved.
RefEdit controls allow the user to select a range of cells with the mouse. While the user is selecting cells, the parent UserForm shrinks to the size of the RefEdit plus the title bar. The address of the selected range appears in the RefEdit and updates as the mouse is dragged, and the size of the selected range is displayed next to the cursor.
When the mouse is released, the UserForm returns to its original size, and the address remains in the RefEdit. When the RefEdit has focus, the indicated range is highlighted with the “marching ants” border.
The RefEdit actually contains a string variable, not a range. This allows the user to edit the address in the RefEdit, and in fact, the user can enter any text as if the RefEdit is a text box. This also allows the programmer to insert the address of a range (usually the current selection) into the RefEdit when loading the UserForm.
The Error Bar Utility that I introduced in Error Bars in Excel 2007 Charts makes use of this dual entry behavior, allowing a user to enter a constant or a range of cells for the error bar values.
RefEdit Irregularities
The RefEdit control has some strange and wonderful idiosyncrasies which must be considered when designing a dialog. There are (at least) four issues that are important to keep in mind.
RefEdits must be placed directly on the UserForm itself. If you put a RefEdit in a frame or on a multipage, strange things will happen, including bizarre Excel crashes.
RefEdits must not be used on modeless forms. RefEdits on modeless forms will result in bizarre Excel crashes.
RefEdit event procedures should be avoided. RefEdit events do not behave reliably, and they may result in VBA errors which are difficult to debug.
References to RefEdits must be removed. When a UserForm is added to a VB project, Excel adds a reference to the Microsoft Forms 2.0 Object Library. This reference is required for proper operation of the UserForms in your project. To see what references your project has, select the project in the Project Explorer, then select References from the Tools menu.
When a RefEdit is added to a UserForm, Excel sometimes adds a reference to the Ref Edit Control. This was fine in earlier versions of Excel, but there appear to be incompatibilities in recent versions of the RefEdit library. These problems often are associated with an Unspecified but Painfully Frustrating Error.
To reduce the risk of RefEdit-related issues, you should uncheck the box in front of Ref Edit Control in the References dialog. Otherwise, there may be problems loading the add-in on another user’s machine, including the removal of RefEdits from the dialogs and other bizarre behavior.
It is also helpful to process the workbook or add-in’s code through an earlier version of Excel. I use a VM with Office 2000 installed on it for this purpose. Open Excel 2000, open the workbook or add-in, run Rob Bovey’s free Code Cleaner application, then compile the code and save the file.
It may also be necessary to remove RefEdit.exd files from a user’s computer if problems occur and unchecking the reference doesn’t fix them. these exd files are temporary files that contain instructions Excel uses to build RefEdits, and the exd may conflict with the RefEdits in the workbook. If this doesn’t work, the next step is to run Detect and Repair on Excel, then reinstall Office, then sacrifice the computer at the next full moon.