Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBA - создание именованного диапазона

Ответить
Настройки темы
VBA - создание именованного диапазона

Аватара для Хоф

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


Сообщения: 105
Благодарности: 10

Профиль | Отправить PM | Цитировать


Здраствуйте всем.
Мне нужно создать именованный диапазон с привязкой на конкретную ячейку (на листе в эксель)
если делать это через Вставка - имя - присвоить то в коде даётся выражение activeworkbook.names.add name ...... referstoR1C1 = R100C5
а мне нужно чтобы вместо ссылки вида R1C1 было в виде (А100:Е5) или cells(100,5).
Пробовал сам писать выражение Activeworkbook.Names.Add Name:= .....
VBA - пишет ошибку 1004 - недопустимое имя или выражение.

Имя диапазона берётся из значения переменной FIO
координаты ячейки узнаются по activecell.row
мне нужно подставить значения FIO и activecell.row в выражение Activeworkbook.names.add name......

Как это правильно написать?
К сожалению в английском не силён.

-------
коллекционирую выдвижные столики..... для кофе.


Отправлено: 13:20, 27-09-2012

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Выложите образец документа и укажите куда и что присваивать.

Отправлено: 16:01, 27-09-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Хоф

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


Сообщения: 105
Благодарности: 10

Профиль | Отправить PM | Цитировать


Изображения
Тип файла: jpg прмер.jpg
(273.1 Kb, 12 просмотров)

Выкладываю пример.

На рисунке указана ячейка от которой будет строится следующая именованная область, или именованный диапазон при появлении нового персонажа стада.
координаты место положения ячейки относительно предидущего созданного именованного диапазона - всегда одни и теже: в первом столбце, через две строки.
Имя именованного диапазона - задаем через инпутбокс - и далее в переменную
координаты каждой новой ячейки - через activecell.row - и далее в переменную
Вопрос как при создании именованной области (именованного диапазона) увязать имя диапазона выраженное в значении переменной, и координаты ячейка выраженные через переменную значение которой получено через activecell.row

вот так - код работает
ActiveWorkbook.Names.Add Name:="буйвол_Дортмунд", RefersToR1C1:= _
"=Лист1!R31C1"

по другому - пишет ошибка 1004 - недопустимое значение.

-------
коллекционирую выдвижные столики..... для кофе.


Отправлено: 17:10, 27-09-2012 | #3


Аватара для Хоф

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


Сообщения: 105
Благодарности: 10

Профиль | Отправить PM | Цитировать


Я готов уточнить условия задачи

ActiveWorkbook.Names.Add Name:="буйвол_Дортмунд", RefersToR1C1:= _
"=Лист1!R31C1"

с помощью этого - задается именованная область.

я хочу уйти от refersToR1C1 и задавать этот диапазон в виде:

ActiveWorkbook.Names.Add Name:="буйвол_Дортмунд", RefersTo.. := _
"=Лист1!cells(row,column).select

или

ActiveWorkbook.Names.Add Name:=perenennaya, RefersTo := _
"=Лист1!range("A" & "peremennaya2")

где peremennaya принимает значения имени будующей именованной области
а peremennaya2 - номер строки будущей именованной области.

-------
коллекционирую выдвижные столики..... для кофе.


Отправлено: 11:54, 28-09-2012 | #4


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Хоф:
Я готов уточнить условия задачи »
Цитата Iska:
Выложите образец документа »
Образец документа — это, в данном случае, файл с расширением «*.xls», упакованный в архив. Необязательно с реальными данными.

Отправлено: 14:06, 28-09-2012 | #5


Аватара для Хоф

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


Сообщения: 105
Благодарности: 10

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: rar Пример для форума.rar
(9.5 Kb, 14 просмотров)

Прикрепляю файл как Вы просили.

-------
коллекционирую выдвижные столики..... для кофе.


Отправлено: 14:01, 01-10-2012 | #6


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Хоф:
Мне нужно создать именованный диапазон с привязкой на конкретную ячейку (на листе в эксель)
если делать это через Вставка - имя - присвоить то в коде даётся выражение activeworkbook.names.add name ...... referstoR1C1 = R100C5
а мне нужно чтобы вместо ссылки вида R1C1 было в виде (А100:Е5) или cells(100,5). »
Вы можете использовать RefersTo/RefersToLocal:
Код: Выделить весь код
ActiveWorkbook.Names.Add Name:="MyName", RefersTo:="=Лист1!$B$5"
хотя, в общем случае, ссылки вида R1C1 использовать гораздо практичнее.
Цитата Хоф:
я хочу уйти от refersToR1C1 и задавать этот диапазон в виде:
ActiveWorkbook.Names.Add Name:="буйвол_Дортмунд", RefersTo.. := _
"=Лист1!cells(row,column).select
или
ActiveWorkbook.Names.Add Name:=perenennaya, RefersTo := _
"=Лист1!range("A" & "peremennaya2")
где peremennaya принимает значения имени будующей именованной области
а peremennaya2 - номер строки будущей именованной области. »
Например:
Код: Выделить весь код
strNameName = "MyName"
ActiveWorkbook.Names.Add Name:= strNameName, RefersTo:="=" & ActiveSheet.Name & "!" & ActiveCell.Address()
читать дальше »
Цитата:
Код: Выделить весь код
    ' Пример беру специально - БРЕДОВЫЙ, мне важен сам сиснтаксис "механизма именования"
    
    Sheets(1).Select
    novdiap = InputBox("Введите новую единицу техники, для проведения мер противоугона")
    ' вводимое имя - трактор Петровича
    
    ' так не работает - пишет ошибка 1004 - данное имя недопустимо.
    Range("A31").Select
    t = ActiveCell.Row
    ActiveWorkbook.Names.Add Name:="novdiap", RefersTo:=ActiveCell(t, 1).Select '-не работает
    ActiveWorkbook.Names.Add Name:=novdiap, RefersTo:=ActiveCell(t, 1).Select ' - не работает
Во-первых, «Name:="novdiap"» создаст Имя с именем «novdiap», а это явно не то, чего Вы хотели. Во-вторых, не работает, потому что Вы пытаетесь присвоить параметру «RefersTo», который ожидает увидеть строку со ссылкой, непонятно что — ибо метод «Select» объекта «Range» (свойство «ActiveCell» возвращает объект «Range»; умолчальный метод «Item», применённый к последнему, также возвращает объект «Range») ничего не возвращает.

Здесь Вы вроде как исправили во-первых, однако имя не должно содержать как минимум пробелов, потому попытка использовать переменную «novdiap» со значением «трактор Петровича» приведёт к закономерной ошибке исполнения.
Я так понимаю, Вы пока ещё просто путаетесь в объектной модели Excel.
Это сообщение посчитали полезным следующие участники:

Отправлено: 03:15, 02-10-2012 | #7


Аватара для Хоф

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


Сообщения: 105
Благодарности: 10

Профиль | Отправить PM | Цитировать


Цитата:
Я так понимаю, Вы пока ещё просто путаетесь в объектной модели Excel.
Я не освоил объектную модель. Пока все на примитивном уровне. Все упирается в нормальное изложение возможностей языка VBA по русски, с показом на примерах. В разделе "помощь" по VBA - всё по английски. До всего приходится доходить "методом тыка". книжки по VBA конечно помогают, но не во всех случаях.

из вашего ответа я так понял что имя диапазона заданного через переменную novdiap должно быть "сплошным" - без пробелов. а в остальном все в "зеленом коде" - верно.

а в первом вашем примере я так понял задается строковая переменная "MyName" и далее, в задании имени диапазона - координаты ссылки на положение этой ячейки (с именем строковой переменной) -
состоят из иобъдинения "=" с именем листа (наверное текущего) и координат строки, где стоит эта ячейка.
Что обозначает участок "=" в RefersTo:= ?

-------
коллекционирую выдвижные столики..... для кофе.


Последний раз редактировалось Хоф, 02-10-2012 в 13:26. Причина: уточнение


Отправлено: 13:05, 02-10-2012 | #8


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Хоф:
а в остальном все в "зеленом коде" - верно. »
Отнюдь. К нему в полной мере применимо:
Цитата Iska:
Во-вторых, не работает, потому что Вы пытаетесь присвоить параметру «RefersTo», который ожидает увидеть строку со ссылкой, непонятно что — ибо метод «Select» объекта «Range» (свойство «ActiveCell» возвращает объект «Range»; умолчальный метод «Item», применённый к последнему, также возвращает объект «Range») ничего не возвращает. »
Я же написал, что в коде, выделенном зелёным, решена только одна проблема — с именованием Name.

Цитата Хоф:
и далее, в задании имени диапазона - координаты ссылки на положение этой ячейки (с именем строковой переменной) - состоят из иобъдинения "=" с именем листа (наверное текущего) и координат строки, где стоит эта ячейка.
»
Да. Только не «координат строки», а адреса текущей ячейки. Конечно, там может быть адрес не только одной ячейки, но и диапазона.

Цитата Хоф:
Что обозначает участок "=" в RefersTo:= ? »
Часть формируемого адреса, например:
Код: Выделить весь код
"=Лист1!$B4$"
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:47, 02-10-2012 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBA - создание именованного диапазона

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
D-sub вне диапазона Keltaron Непонятные проблемы с Железом 15 12-01-2013 17:53
CMD/BAT - [решено] Создание текстового файла с последовательными числами указанного диапазона 91892823 Скриптовые языки администрирования Windows 2 03-08-2012 06:43
LibreOffice Calc связь диапазона ячеек run Хочу все знать 1 18-03-2012 14:13
Route/Bridge - Проброс ДИАПАЗОНА портов AxeL_FoX Сетевые технологии 1 22-12-2010 13:00
[решено] вне диапазона alex_cent Непонятные проблемы с Железом 3 05-03-2009 14:56




 
Переход