PDA

Показать полную графическую версию : создание именованного диапазона


Хоф
27-09-2012, 13:20
Здраствуйте всем.
Мне нужно создать именованный диапазон с привязкой на конкретную ячейку (на листе в эксель)
если делать это через Вставка - имя - присвоить то в коде даётся выражение 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......

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

Iska
27-09-2012, 16:01
Выложите образец документа и укажите куда и что присваивать.

Хоф
27-09-2012, 17:10
Выкладываю пример.

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

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

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

Хоф
28-09-2012, 11:54
Я готов уточнить условия задачи :yes:

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

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

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

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

или

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

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

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

Хоф
01-10-2012, 14:01
Прикрепляю файл как Вы просили.

Iska
02-10-2012, 03:15
Мне нужно создать именованный диапазон с привязкой на конкретную ячейку (на листе в эксель)
если делать это через Вставка - имя - присвоить то в коде даётся выражение activeworkbook.names.add name ...... referstoR1C1 = R100C5
а мне нужно чтобы вместо ссылки вида R1C1 было в виде (А100:Е5) или cells(100,5). »
Вы можете использовать RefersTo (http://msdn.microsoft.com/en-us/library/office/aa176160(v=office.11).aspx)/RefersToLocal (http://msdn.microsoft.com/en-us/library/office/aa176161(v=office.11).aspx):
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.

Хоф
02-10-2012, 13:05
Я так понимаю, Вы пока ещё просто путаетесь в объектной модели Excel.

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

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

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

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

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

Что обозначает участок "=" в RefersTo:= ? »
Часть формируемого адреса, например:
"=Лист1!$B4$"




© OSzone.net 2001-2012