Показать полную графическую версию : создание именованного диапазона
Здраствуйте всем.
Мне нужно создать именованный диапазон с привязкой на конкретную ячейку (на листе в эксель)
если делать это через Вставка - имя - присвоить то в коде даётся выражение 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:
Выложите образец документа и укажите куда и что присваивать.
Выкладываю пример.
На рисунке указана ячейка от которой будет строится следующая именованная область, или именованный диапазон при появлении нового персонажа стада.
координаты место положения ячейки относительно предидущего созданного именованного диапазона - всегда одни и теже: в первом столбце, через две строки.
Имя именованного диапазона - задаем через инпутбокс - и далее в переменную
координаты каждой новой ячейки - через activecell.row - и далее в переменную
Вопрос как при создании именованной области (именованного диапазона) увязать имя диапазона выраженное в значении переменной, и координаты ячейка выраженные через переменную значение которой получено через activecell.row
вот так - код работает
ActiveWorkbook.Names.Add Name:="буйвол_Дортмунд", RefersToR1C1:= _
"=Лист1!R31C1"
по другому - пишет ошибка 1004 - недопустимое значение.
Я готов уточнить условия задачи :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 - номер строки будущей именованной области.
Я готов уточнить условия задачи »
Выложите образец документа »
Образец документа — это, в данном случае, файл с расширением «*.xls», упакованный в архив. Необязательно с реальными данными.
Прикрепляю файл как Вы просили.
Мне нужно создать именованный диапазон с привязкой на конкретную ячейку (на листе в эксель)
если делать это через Вставка - имя - присвоить то в коде даётся выражение 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.
Я так понимаю, Вы пока ещё просто путаетесь в объектной модели Excel.
Я не освоил объектную модель. Пока все на примитивном уровне. Все упирается в нормальное изложение возможностей языка VBA по русски, с показом на примерах. В разделе "помощь" по VBA - всё по английски. До всего приходится доходить "методом тыка". книжки по VBA конечно помогают, но не во всех случаях.
из вашего ответа я так понял что имя диапазона заданного через переменную novdiap должно быть "сплошным" - без пробелов. а в остальном все в "зеленом коде" - верно.
а в первом вашем примере я так понял задается строковая переменная "MyName" и далее, в задании имени диапазона - координаты ссылки на положение этой ячейки (с именем строковой переменной) -
состоят из иобъдинения "=" с именем листа (наверное текущего) и координат строки, где стоит эта ячейка.
Что обозначает участок "=" в RefersTo:= ?
а в остальном все в "зеленом коде" - верно. »
Отнюдь. К нему в полной мере применимо:
Во-вторых, не работает, потому что Вы пытаетесь присвоить параметру «RefersTo», который ожидает увидеть строку со ссылкой, непонятно что — ибо метод «Select» объекта «Range» (свойство «ActiveCell» возвращает объект «Range»; умолчальный метод «Item», применённый к последнему, также возвращает объект «Range») ничего не возвращает. »
Я же написал, что в коде, выделенном зелёным, решена только одна проблема — с именованием Name.
и далее, в задании имени диапазона - координаты ссылки на положение этой ячейки (с именем строковой переменной) - состоят из иобъдинения "=" с именем листа (наверное текущего) и координат строки, где стоит эта ячейка.
»
Да. Только не «координат строки», а адреса текущей ячейки. Конечно, там может быть адрес не только одной ячейки, но и диапазона.
Что обозначает участок "=" в RefersTo:= ? »
Часть формируемого адреса, например:
"=Лист1!$B4$"
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.