Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

VBA в Excel

127 views
Skip to first unread message

Shpux

unread,
Aug 15, 2007, 8:08:02 PM8/15/07
to
1. Возможно ли написать функцию, которая будет определять номер ячейки ("А1"
или "R1C1") в которой находится, без указания ссылки на саму себя.

2. В таблице Excel для того чтобы получить значение ячейки из другой книги
нужно в ячейку вставить ссылку типа "='путь к файлу[Имя файла]Лист'!Ячейка".
Если известны все эти данные - как получить значение этой ячейки используя
функцию VBA, есть ли что-нибудь типа:

function Переменная() as double
Переменная = Workbook("АдресФайла").Worksheet("ИмяЛиста").Range("A1").Value
end function

Заранее спасибо

KL

unread,
Aug 15, 2007, 10:23:01 PM8/15/07
to
Привет Shpux,

> 1. Возможно ли написать функцию, которая будет определять номер ячейки
> ("А1"
> или "R1C1") в которой находится, без указания ссылки на саму себя.

Не вижу большого смысла в задаче (или в ее постановке), но...

=АДРЕС(СТРОКА();СТОЛБЕЦ())
=ЯЧЕЙКА("address";ДВССЫЛ("RC";0))

> 2. В таблице Excel для того чтобы получить значение ячейки из другой книги
> нужно в ячейку вставить ссылку типа "='путь к файлу[Имя
> файла]Лист'!Ячейка".
> Если известны все эти данные - как получить значение этой ячейки используя
> функцию VBA, есть ли что-нибудь типа:
>
> function Переменная() as double
> Переменная =
> Workbook("АдресФайла").Worksheet("ИмяЛиста").Range("A1").Value
> end function

Единственный известный способ (без открытия файла):
http://www.j-walk.com/ss/excel/tips/tip82.htm
но он не действует из формулы в ячейке.

Можно конечно попытаться использовать ADO, но это будет неприлично медленно:
http://www.sql.ru/forum/actualthread.aspx?bid=46&tid=443671&hl=ado

Вообще, эта тема довольно подробно освещена здесь: http://tinyurl.com/3avzae

--
KL
[MVP - Microsoft Excel]
RU: http://www.mvps.ru/Program/Default.aspx
ES: http://mvp.support.microsoft.com/?LN=es-es
EN: http://mvp.support.microsoft.com/?LN=en-us
Profile: http://mvp.support.microsoft.com/profile/Kirill

KL

unread,
Aug 16, 2007, 10:07:30 PM8/16/07
to
"Shpux" <Sh...@discussions.microsoft.com> wrote in message
news:F6909786-22F4-4D45...@microsoft.com...
> По поводу 1-ой задачи.
> Мне не нужно отображать адрес ячейки в самой ячейке.
> Мне нужно внутри функции определять в какую ячейку эта функция вставлена и
> далее действовать в соответствии с этой информацией.
> Не знаю понятно-ли я объяснил.
> Грубо говоря:
> если функция вставлена в ячейку "А1" то результат функции = 2
> иначе результат = 0. (реальную задачу сложно (долго) формулировать)

Нет, объяснил непонятно. Не вижу связи между "А1" и 2 :-(
Если тебе нужно знать в коде функции, откуда она вызвана, то используй
Application.Caller
Например, если функция вызывается из ячейки, то:

Public Function MyTest()
Dim rng As Range
Set rng = Application.Caller
MyTest = rng.Address(, , , True)
MsgBox rng.Address(, , , True)
End Function

KL

unread,
Aug 16, 2007, 11:15:06 PM8/16/07
to
"Shpux" <Sh...@discussions.microsoft.com> wrote in message
news:D97A81DF-85A8-4138...@microsoft.com...
> По поводу 2-ой задачи
>
> sub Пример1()
> MsgBox GetValue("D:\", "Книга1.xls", "Лист1", "A1") //
> ExecuteExcel4Macro(arg)
> end sub
> всё работает, но
>
> public function Пример2() as variant // либо любой другой тип
> Пример2 = GetValue("D:\", "Книга1.xls", "Лист1", "A1")
> end function
>
> выдает #знач.
> А мне нужно именно получить значение внутри функции для его дальнейшей
> обработки.
> Вообще-то подобные задачи (подобные той, которая поставлена передо мной)
> обычно решаются и изначально строятся на базах данных, но я поставлен в
> жесткие рамки Excel.

См. мой первый ответ. Public Function Пример2() работает, но только из-под
VBA. В Excel нет родного способа получать значения из закрытой книги с пом.
формулы в ячейке, кроме прямого ввода ссылки.

0 new messages