Добрый день. В книге FD00148.xlsx на листе Report есть нужная мне ячейка L29. Я хочу вручную проложить путь к этому файлу и получить из него значение в ячейке L29, чтобы при перемещении на другой комп ссылка на устарела. Путь к файлу через PLEX я нашел, а вот как сослаться на конкретную ячейку на конкретном листе, имея в формате текста путь к файлу, я не знаю. Помогите. Хочу найти что-то наподобие такого: =ПОЛУЧИТЬЗНАЧЕНИЕ('C:\Documents and Settings\counter-fil\Рабочий стол\Desktop\Мои документы\Анализ проектов\FD\2Q 2012\[FD00148.xlsx]Report'!$L$29), т.е. склеиваешь полностью ссылку на ячейку и получаешь значение этой ячейки в заданной книге.
ПС. Сори админы, примера приложить не могу, всё в тексте.
ikki, то что нужно. А можно ли это сделать как функцию (чтобы в ячейку можно было поставить =МояФункция(....)? В ней я нашел три аргумента - Путь к файлу, лист, ячейка (выделены красным)? Я не программист, вот в чем дело.
Код
Sub Get_Value_From_Close_Book()
Dim sShName As String, sAddress As String, vData
'Отключаем обновление экрана
Application.ScreenUpdating = False
Workbooks.Open [COLOR=#FF0000]"C:\Documents and Settings\Книга1.xls"[/COLOR]
sAddress = [COLOR=#FF0000]"A1:C100"[/COLOR] 'или одна ячейка - "A1"
'получаем значение
vData = Sheets([COLOR=#FF0000]"Лист1"[/COLOR]).Range(sAddress).Value
ActiveWorkbook.Close False
'Записываем данные на активный лист книги,
'с которой запустили макрос
If IsArray(vData) Then
[A1].Resize(UBound(vData, 1), UBound(vData, 2)).Value = vData
Else
[A1] = vData
End If
'Включаем обновление экрана
Application.ScreenUpdating = True
Function Get_Value_From_Close_Book(wbName$, sheetName$, strAddress$)
Dim sShName As String, sAddress As String, vData
'Отключаем обновление экрана
Application.ScreenUpdating = False
Workbooks.Open wbName
'получаем значение
Get_Value_From_Close_Book = Sheets(sheetName).Range(strAddress).Value
ActiveWorkbook.Close False
Application.ScreenUpdating = True
End F unction
нерабочая. файл не открывает, ошибку не выдает. есть подозрение, что в UDF операция открытия файла не разрешена.
фрилансер Excel, VBA - контакты в профиле "Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
Function Get_Value_From_Close_Book(sWb As String, sShName As String, sAddress As String)
Dim vData, objCloseBook As Object
Set objCloseBook = GetObject(sWb)
'получаем значение
vData = objCloseBook.Sheets(sShName).Range(sAddress).Value
objCloseBook.Close False
'Возвращаем данные в ячейку с функцией
If IsArray(vData) Then
Get_Value_From_Close_Book = vData
Else
Get_Value_From_Close_Book = vData
End If
End F unction
Чтобы получить массив ячеек, необходимо выделить несколько ячеек и ввести в них эту функцию, как формулу массива. Вызов с листа: =Get_Value_From_Close_Book("C:\Книга1.xls";"Лист1";"B1")
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Убрал конечно. Ошибку функция выдает после того, как вводишь её =Get_Value... в ячейку и жмешь Enter. Функция берет нужное значение из закрытой книги, но потом Excel виснет.