Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   создание именованного диапазона (http://forum.oszone.net/showthread.php?t=243486)

Хоф 27-09-2012 13:20 1995563

создание именованного диапазона
 
Здраствуйте всем.
Мне нужно создать именованный диапазон с привязкой на конкретную ячейку (на листе в эксель)
если делать это через Вставка - имя - присвоить то в коде даётся выражение 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 1995633

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

Хоф 27-09-2012 17:10 1995672

Вложений: 1
Выкладываю пример.

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

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

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

Хоф 28-09-2012 11:54 1996027

Я готов уточнить условия задачи :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 1996108

Цитата:

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

Цитата:

Цитата Iska
Выложите образец документа »

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

Хоф 01-10-2012 14:01 1997710

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

Iska 02-10-2012 03:15 1998144

Цитата:

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

Хоф 02-10-2012 13:05 1998320

Цитата:

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

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

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

Iska 02-10-2012 13:47 1998342

Цитата:

Цитата Хоф
а в остальном все в "зеленом коде" - верно. »

Отнюдь. К нему в полной мере применимо:
Цитата:

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

Я же написал, что в коде, выделенном зелёным, решена только одна проблема — с именованием Name.

Цитата:

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

Да. Только не «координат строки», а адреса текущей ячейки. Конечно, там может быть адрес не только одной ячейки, но и диапазона.

Цитата:

Цитата Хоф
Что обозначает участок "=" в RefersTo:= ? »

Часть формируемого адреса, например:
Код:

"=Лист1!$B4$"


Время: 20:29.

Время: 20:29.
© OSzone.net 2001-