Excel что такое refedit

Получение ссылки на диапазон ячеек и ее изменение путем выделения ячеек на рабочем листе с помощью элемента управления пользовательской формы RefEdit.

UserForm.RefEdit – это элемент управления пользовательской формы, предназначенный для получения и редактирования ссылок на диапазон ячеек путем выделения диапазона на рабочем листе или вручную в поле редактора ссылок.

Элемент управления 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

flash708

Дата: Суббота, 04.04.2015, 12:09 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 37


Репутация:

0

±

Замечаний:
20% ±


Excel 2010

Всем доброго времени суток!
Пытался с помощью Refedit выделить конкретную ячейку. У меня в Refedit всегда только одна ячейка, а не диапазон ячеек.
Когда я пытался ввести строку
Range(Refedit1).Activate
то выходит сообщение об ошибке:
Method ‘Range’ of object ‘_Global’ failed
Прошу помочь исправить данную ошибку.

К сообщению приложен файл:

Refedit.xlsm
(19.6 Kb)

 

Ответить

Pelena

Дата: Суббота, 04.04.2015, 12:16 |
Сообщение № 2

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Здравствуйте. У меня работает без ошибок и с одной ячейкой и с диапазоном


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

KuklP

Дата: Суббота, 04.04.2015, 13:37 |
Сообщение № 3

Группа: Проверенные

Ранг: Старожил

Сообщений: 2369


Репутация:

486

±

Замечаний:
0% ±


2003-2010

[vba]

Код

Sub ПоказатьФорму()
       Application.ReferenceStyle = xlA1
       UserForm1.Show
End Sub

[/vba]
Или:
[vba]

Код

Private Sub CommandButton1_Click()
     Range(Application.ConvertFormula(RefEdit1, xlR1C1, xlA1)).Activate
     MsgBox (ActiveCell.Row)
End Sub

[/vba]


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

Сообщение отредактировал KuklPСуббота, 04.04.2015, 13:51

 

Ответить

flash708

Дата: Суббота, 04.04.2015, 14:29 |
Сообщение № 4

Группа: Пользователи

Ранг: Новичок

Сообщений: 37


Репутация:

0

±

Замечаний:
20% ±


Excel 2010

KuklP, спасибо огромное :-)

 

Ответить

flash708

Дата: Суббота, 04.04.2015, 14:40 |
Сообщение № 5

Группа: Пользователи

Ранг: Новичок

Сообщений: 37


Репутация:

0

±

Замечаний:
20% ±


Excel 2010

KuklP, это интересно, но можно встречный вопрос — как выделить соседнюю ячейку? или может быть можно выяснить как называется шрифт в соседней ячейке (в той же строке или в том же столбце), не выделяя ее?

 

Ответить

flash708

Дата: Суббота, 04.04.2015, 14:43 |
Сообщение № 6

Группа: Пользователи

Ранг: Новичок

Сообщений: 37


Репутация:

0

±

Замечаний:
20% ±


Excel 2010

flash708, хотя я попробую сам. например так
N = activecell.row
M=activecell.column
cells(n+1,m).select
и т.д.

 

Ответить

KuklP

Дата: Суббота, 04.04.2015, 14:47 |
Сообщение № 7

Группа: Проверенные

Ранг: Старожил

Сообщений: 2369


Репутация:

486

±

Замечаний:
0% ±


2003-2010

У каждой ячейки может быть 8 соседних. Какую соседнюю желаете?
В общем пользуйтесь свойствами offset, font.name. И избегайте селектов. Свойства объектов можно получать не выделяя их. Так выясняем имя шрифта ячейки справа от указанной:
[vba]

Код

Private Sub CommandButton1_Click()
     MsgBox (Range(Application.ConvertFormula(RefEdit1, xlR1C1, xlA1)).Offset(, 1).Font.Name)
End Sub

[/vba]


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

Сообщение отредактировал KuklPСуббота, 04.04.2015, 14:55

 

Ответить

flash708

Дата: Суббота, 04.04.2015, 20:52 |
Сообщение № 8

Группа: Пользователи

Ранг: Новичок

Сообщений: 37


Репутация:

0

±

Замечаний:
20% ±


Excel 2010

KuklP, Огромное спасибо!!!

 

Ответить

flash708

Дата: Воскресенье, 05.04.2015, 20:17 |
Сообщение № 9

Группа: Пользователи

Ранг: Новичок

Сообщений: 37


Репутация:

0

±

Замечаний:
20% ±


Excel 2010

KuklP, простите за беспокойство, но у меня возникла проблема после запуска макроса. Часто Excel закрывается сам по себе, выдается ошибка типа Appcrash. Подскажите пожалуйста как можно ее устранить. Заранее спасибо.

 

Ответить

KuklP

Дата: Воскресенье, 05.04.2015, 20:53 |
Сообщение № 10

Группа: Проверенные

Ранг: Старожил

Сообщений: 2369


Репутация:

486

±

Замечаний:
0% ±


2003-2010

В макросе нет ничего такого, что могло бы валить экс. Причина не в нем. Мож криво ломаный экс, или кривая установка. А может какие программы с эксом конфликтуют.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

 

Ответить

flash708

Дата: Воскресенье, 05.04.2015, 21:08 |
Сообщение № 11

Группа: Пользователи

Ранг: Новичок

Сообщений: 37


Репутация:

0

±

Замечаний:
20% ±


Excel 2010

KuklP, у меня всё лицензионное. просто интересно как этого избежать, может в реестре что удалить?

 

Ответить

flash708

Дата: Воскресенье, 05.04.2015, 21:30 |
Сообщение № 12

Группа: Пользователи

Ранг: Новичок

Сообщений: 37


Репутация:

0

±

Замечаний:
20% ±


Excel 2010

KuklP, взял установочный диск, выполнил исправление ошибок, проблема исчезла

 

Ответить

KuklP

Дата: Воскресенье, 05.04.2015, 21:33 |
Сообщение № 13

Группа: Проверенные

Ранг: Старожил

Сообщений: 2369


Репутация:

486

±

Замечаний:
0% ±


2003-2010

Ну вот Вам и «лицензионный». :D У меня на портабельной сборке работает..


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

 

Ответить

flash708

Дата: Четверг, 09.04.2015, 22:11 |
Сообщение № 14

Группа: Пользователи

Ранг: Новичок

Сообщений: 37


Репутация:

0

±

Замечаний:
20% ±


Excel 2010

KuklP, простите, но можно еще вопрос по данной теме?
когда я ввожу Refedit2 но так чтобы его значение вычислялось автоматически

[vba]

Код

Private Sub CommandButton13_Click()

x2 = 7
y2 = 7

RefEdit2.Value = Range(Application.ConvertFormula(RefEdit1, xlR1C1, xlA1)).Offset(x2, y2).Address

a = Range(Application.ConvertFormula(RefEdit2, xlR1C1, xlA1)).Row
b = Range(Application.ConvertFormula(RefEdit2, xlR1C1, xlA1)).Column
Cells(a, b).Select

End Sub

[/vba]

то у меня выходит сообщение об ошибке, поскольку в Refedit1 содержится Лист1!R2C2, а в Refedit2 — $I$9. Подскажите пожалуйста как $I$9
перевести в другой формат (чтобы было Лист1!R9C9
Спасибо.
[moder]Оформите код тегами (кнопка #)[/moder]

Сообщение отредактировал flash708Четверг, 09.04.2015, 23:29

 

Ответить

KuklP

Дата: Четверг, 09.04.2015, 22:17 |
Сообщение № 15

Группа: Проверенные

Ранг: Старожил

Сообщений: 2369


Репутация:

486

±

Замечаний:
0% ±


2003-2010

Почитайте внимательно справку по Address. Там в параметрах можно задавать стиль R1С1. И не надо вычислять строку и столбец.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

 

Ответить

RAN

Дата: Четверг, 09.04.2015, 22:34 |
Сообщение № 16

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

Серег, ты не совсем прав.
RefEdit та еще зараза.
И там нужно либо конвертировать адрес, если включен стиль R1C1, либо, как я делал, по событию Enter менять стиль ссылки.


Быть или не быть, вот в чем загвоздка!

 

Ответить

KuklP

Дата: Четверг, 09.04.2015, 23:05 |
Сообщение № 17

Группа: Проверенные

Ранг: Старожил

Сообщений: 2369


Репутация:

486

±

Замечаний:
0% ±


2003-2010

Не Андрюх, так работает:
[vba]

Код

Private Sub CommandButton1_Click()
     RefEdit2.Value = Range(Application.ConvertFormula(RefEdit1, xlR1C1, xlA1)).Offset(7, 7).Address(, , xlR1C1)
     Range(Application.ConvertFormula(RefEdit2, xlR1C1, xlA1)).Select
End Sub

[/vba]Только почему-то выбрасывает все время в form.show :D


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

 

Ответить

RAN

Дата: Четверг, 09.04.2015, 23:14 |
Сообщение № 18

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

Серег, сейчас вспоминать подробности влом. Но без этого не работало <_<
[vba]

Код

Private Sub UserForm_Initialize()
       If Application.ReferenceStyle = xlR1C1 Then
           RefStyle = xlR1C1
           Application.ReferenceStyle = xlA1
       Else
           RefStyle = xlA1
       End If
       If TypeName(Selection) = «Range» Then RfRange = Selection.Address
       Call OptBtn_Chang
End Sub

[/vba]

Подумав, вспомнил. Я там с листа грузил. Пардоньте.


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RANЧетверг, 09.04.2015, 23:17

 

Ответить

flash708

Дата: Четверг, 09.04.2015, 23:35 |
Сообщение № 19

Группа: Пользователи

Ранг: Новичок

Сообщений: 37


Репутация:

0

±

Замечаний:
20% ±


Excel 2010

KuklP, Ура! Спасибо, получилось! Никуда ничего не выбрасывает! Правда, я пару дней назад переустановил весь Excel :-) Сначала весь Office удалил, потом снова поставил)

 

Ответить

Апострофф

Дата: Пятница, 10.04.2015, 07:12 |
Сообщение № 20

Группа: Проверенные

Ранг: Обитатель

Сообщений: 416


Репутация:

117

±

Замечаний:
0% ±


Excel 1997

[offtop] Pelena, проверьте пожалуйста почту на планете.
Извиняюсь за оффтоп[/offtop]

 

Ответить

 

GIG_ant

Пользователь

Сообщений: 3102
Регистрация: 24.12.2012

Добрый день, уважаемые!  
Столкнулся с RefEdit по необходимости, и что то не могу найти в литературе ответы на свои вопросы, как то скудненько его описывают.  
Вопросы такие:  
1) Можно ли запретить ввод с клавиатуры в поле RefEdit, а выбирать диапазон только через кнопку.  
2) Не могу найти событие которое возникает когда мы уже выбрали диапазон и нажимаем на кнопку что бы вернуться в форму.  
3) Можно ли запретить выбор больше одной ячейки.  
4) Что за событие RefEdit — AfterUpdate — когда оно наступает, никак не могу его словить. (Мне нужно после того как я изменил адрес с помощью RefEdit и вернулся в форму, на форме отобразилась например заливка выбранной ячейки.)  
Если есть какието наброски, буду благодарен, так же если есть полное описание свойств RefEdit, скиньте ссылу плз.

 

VovaK

Пользователь

Сообщений: 1716
Регистрация: 01.01.1970

1 вопрос:  
Эта процедура запретит ввол любого символа  
Private Sub RefEdit1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)  
       KeyAscii = 0  
   End Sub  
Эта процедура запретит копирование  
   Private Sub RefEdit1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)  
       If KeyCode = vbKeyV And Shift = 2 Then KeyCode = 0  
   End Sub  
2. BeforeUpdate  
3. Думаю только логикой, потому как выделение мышкой осуществляется внутренним кодом Excel. Хотя возможно я ошибаюсь.  
4.  AfterUpdate – это когда редактирование текстового окна завершено пользователем и он нажал Enter. Change в отличии от AfterUpdate откликается на ввод каждого символа.  
А вообще соберите все возможные процедуры событий (с объявлением переменной к примеру) и поставьте  Brakepoint  на  каждой и вы сможете сами отследить все реакции.

 

GIG_ant

Пользователь

Сообщений: 3102
Регистрация: 24.12.2012

{quote}{login=VovaK}{date=21.04.2011 09:34}{thema=}{post}1 вопрос:  
2. BeforeUpdate  
4.  AfterUpdate – это когда редактирование текстового окна завершено пользователем и он нажал Enter. Change в отличии от AfterUpdate откликается на ввод каждого символа.  
А вообще соберите все возможные процедуры событий (с объявлением переменной к примеру) и поставьте  Brakepoint  на  каждой и вы сможете сами отследить все реакции.{/post}{/quote}  
Спасибо что откликнулись.  
RE: 2. BeforeUpdate — насколько я понимаю это событие должно срабатывать перед обновлением, а не срабатывает (.  
В том то все и дело, что я собрал все продцедуры, и что бы я не делал не выскакивает ни BeforeUpdate не AfterUpdate. Может я чего не так делаю ?

 

GIG_ant

Пользователь

Сообщений: 3102
Регистрация: 24.12.2012

Для наглядности пример.    
В нем нужно при выборе с помощью RefEdit ячейки, на форме отобразилась ее заливка. Не могу придумать на какое событие RefEdit прицепить следующий оператор : Label2.BackColor = Range(RefEdit1.Text).Interior.Color — который сменит цвет лабела на форме ?

 

1) Я сжимаю RefEdit до размеров DropButton и прячу под TextBox, а в него вставляю  текст рефэдит’а.  
3) См. код формы в файле.

 

GIG_ant

Пользователь

Сообщений: 3102
Регистрация: 24.12.2012

{quote}{login=С.М.}{date=21.04.2011 10:37}{thema=Re: }{post}1) Я сжимаю RefEdit до размеров DropButton и прячу под TextBox, а в него вставляю  текст рефэдит’а.  
3) См. код формы в файле.{/post}{/quote}  

  Спасибо за вариант, поэксперементирую.  
Риторический вопрос: почему не сделать в самом Refedite например в свойствах мол, выбирать одну или несколько ячеек (или может я проглядел), и еще таки событие BeforeUpdate у меня не срабатывает, в чем загвоздка не пойму?

 

VovaK

Пользователь

Сообщений: 1716
Регистрация: 01.01.1970

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

По вопросу № 3. А событие Worksheet_SelectionChange, в котором подсчитывать к-во выделенных ячеек, разве нельзя прикрутить?

 

Igor67

Пользователь

Сообщений: 3726
Регистрация: 21.12.2012

Попробуйте так, но есть ошибка. Если будете выбирать ячейки через форму — нормально, шелкать сразу по листу — тоже, но чередовать — сбой, RefEdit не очищается и не знаю как это сделать.  

  Private Sub UserForm_Initialize()  
 RefEdit1 = Selection.Address(0, 0)  
   Label2.BackColor = Range(RefEdit1).Interior.Color  
End Sub  

  Private Sub RefEdit1_Change()  
   On Error Resume Next  
 RefEdit1 = Range(RefEdit1).Address(0, 0)  
   Label2.BackColor = Range(RefEdit1).Interior.Color  

  End Sub

 

GIG_ant

Пользователь

Сообщений: 3102
Регистрация: 24.12.2012

{quote}{login=VovaK}{date=21.04.2011 11:03}{thema=}{post}Событие Change{/post}{/quote}  
В вашем варианте если выбирать по одной ячейке то работает, а если один раз выбрать несколько ячеек, то уже не все так гладко.

 

VovaK

Пользователь

Сообщений: 1716
Регистрация: 01.01.1970

Действительно в отличии от textboxa, где BeforeUpdate и AfterUpdate исправно работают в Refedit тишина… Конфуз однако.

 

GIG_ant

Пользователь

Сообщений: 3102
Регистрация: 24.12.2012

{quote}{login=Юрий М}{date=21.04.2011 11:06}{thema=}{post}По вопросу № 3. А событие Worksheet_SelectionChange, в котором подсчитывать к-во выделенных ячеек, разве нельзя прикрутить?{/post}{/quote}  

  Не пробовал. Тоже мысль, единственное как прикрутить вот в чем вопрос ?

 

GIG_ant

Пользователь

Сообщений: 3102
Регистрация: 24.12.2012

{quote}{login=VovaK}{date=21.04.2011 11:20}{thema=}{post}Действительно в отличии от textboxa, где BeforeUpdate и AfterUpdate исправно работают в Refedit тишина… Конфуз однако.{/post}{/quote}  

  И я об этом :)

 

GIG_ant

Пользователь

Сообщений: 3102
Регистрация: 24.12.2012

{quote}{login=Igor67}{date=21.04.2011 11:13}{thema=}{post}Попробуйте так, но есть ошибка. Если будете выбирать ячейки через форму — нормально, шелкать сразу по листу — тоже, но чередовать — сбой, RefEdit не очищается и не знаю как это сделать.  

  Private Sub UserForm_Initialize()  
 RefEdit1 = Selection.Address(0, 0)  
   Label2.BackColor = Range(RefEdit1).Interior.Color  
End Sub  

  Private Sub RefEdit1_Change()  
   On Error Resume Next  
 RefEdit1 = Range(RefEdit1).Address(0, 0)  
   Label2.BackColor = Range(RefEdit1).Interior.Color  

  End Sub{/post}{/quote}  

  Опять же после выделения не одной а нескольких ячеек все сбивается, шо ж за напасть ё-моё.

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

А как Вы хотели? Выделяете несколько ячеек, а у них разная заливка. Какую Excel должен выбрать? Выделяйте по одной.

 

VovaK

Пользователь

Сообщений: 1716
Регистрация: 01.01.1970

А в чем идея зачем Вам вообще Refedit?

 

> Опять же после выделения не одной а нескольких ячеек все сбивается, шо ж за напасть ё-моё.  
Re:  
А если брать цвет только первой ячейки:  
‘  
Private Sub RefEdit1_Change()  
   On Error Resume Next  
   Label2.BackColor = Range(RefEdit1.Text).Cells(1).Interior.Color  
   If Err <> 0 Then Err.Clear  
End Sub  
‘  
Private Sub UserForm_Initialize()  
   RefEdit1.Text = ActiveWindow.RangeSelection(1).Address  
   Label2.BackColor = ActiveWindow.RangeSelection(1).Cells(1).Interior.Color  
End Sub

 

GIG_ant

Пользователь

Сообщений: 3102
Регистрация: 24.12.2012

{quote}{login=VovaK}{date=21.04.2011 11:45}{thema=}{post}А в чем идея зачем Вам вообще Refedit?{/post}{/quote}  

  Идея в следующем.  
Имеем форму на которой отображаются чекбоксы с параметрами ячейки (шрифт, выравнивание, заливка и т. д.) , пользователь выбирает ячейку, по идее с помощью Refedit, после выбора на форме должны обновиться эти параметры, потом пользователь выбирает нужные ему чекбоксы, и производит определенные действия над всеми ячейками с нужными ему параметрами (например банально выделяет все ячейки с одинаковой заливкой). Так вот именно в выборе одной ячейки, и передаче в форму адреса именно одной ячейки и загвоздка. Я так понимаю что при выборе более чем одной ячейки в Refedit нужно записать адрес левой верхней и все былобы нормально, но как это сделать, к какому событию приклеть, неужели только к Change, но тогда чекбоксы будут пересчитываться всю дорогу пока юзер будет выделять диапазон. Помоему это не вариант.

 

GIG_ant

Пользователь

Сообщений: 3102
Регистрация: 24.12.2012

Ура, йес, прорыв, заработало, вау!  
Долой глючный RefEdit, да здравствует Application.InputBox !!!  
Решилась проблема с выделением больше одной ячейки.  
Пример реализации моей задачи см. в файле.  
Хотелось бы улсышать мнение уважаемых профи, по поводу такого решения.

 

С.М.

Гость

#20

23.04.2011 22:09:20

{quote}{login=GIG_ant}{date=22.04.2011 09:22}{thema=Re: }{post}  
Идея в следующем.  
Имеем форму на которой отображаются чекбоксы с параметрами ячейки (шрифт, выравнивание, заливка и т. д.) , пользователь выбирает ячейку, по идее с помощью Refedit, после выбора на форме должны обновиться эти параметры, потом пользователь выбирает нужные ему чекбоксы, и производит определенные действия над всеми ячейками с нужными ему параметрами (например банально выделяет все ячейки с одинаковой заливкой).{/post}{/quote}  
GIG_ant, вот попытался воплотить:

Прикрепленные файлы

  • post_221874.xls (81 КБ)

Сегодня предлагаю обсудить тему Microsoft Office. А именно документов Excel. Многие из вас, я думаю, заметили, что, начиная с 2010 версии все документы открываются в одном окне, несколькими вкладками, а ведь многооконный режим Excel значительно удобнее. Причины, по которым это реализовали понятны, открывается одно окно- один процесс в системе, что позволяет сэкономить ресурсы компьютера. О вкусах не спорят, кому-то может и удобно так работать, но по моему опыту и количеству обращений от пользователей, комфорта от такой реализации нет.

В статье я опишу способ как настроить работу программы в многооконный режим Excel, документ будет открываться в своем окне, а также приложу видео всей процедуры.

Согласитесь, людям, которые используют для работы несколько мониторов — это просто необходимо.

Для реализации такой задачи нам потребуется внести некоторые изменения в реестр системы. Используйте сочетание клавиш «win+r«, в открывшемся окне введите команду «regedit«.

1

Excel в основе своей использует два вида файлов .xls и .xlsx, найдем их и посмотрим значения.

  • HKEY_CLASSES_ROOT.xls
  • HKEY_CLASSES_ROOT.xlsx
2

В этих разделах нас интересует параметр — «По умолчанию (default)«. Его значение говорит нам о том, в каком каталоге необходимо вносить изменения. Для файлов .xls каталог называется Excel.Sheet.8, а для .xlsx Excel.Sheet.12.

Спускаемся ниже и открываем нужные нам папки.

  • HKEY_CLASSES_ROOTExcel.Sheet.8shellOpencommand
  • HKEY_CLASSES_ROOTExcel.Sheet.12shellOpencommand
3

В данном разделе нас интересует параметр — «По умолчанию (default)». Его значение равно:

«C:Program Files (x86)Microsoft OfficeOffice14EXCEL.EXE» /dde«

В него мы и будем вносить изменения, значение должно иметь вид:

«C:Program Files (x86)Microsoft OfficeOffice14EXCEL.EXE» /e “%1“«.

Т.е. требуется значение /dde заменить на /e «%1»

  • В вашем случае путь может быть несколько иным, т.к. у меня установлена версия 32-бита.
4

Но это еще не все.

В каталоге 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.

RefEdit in Minimized Dialog While Range is Selected

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.

RefEdit Shows Address of Selected=

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.

VBA References

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.

Понравилась статья? Поделить с друзьями:
  • Excel что такое nerr
  • Excel что такое case
  • Excel что такое application volatile
  • Excel что отображается в строке формул excel
  • Excel что означает этот знак