Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Ссылка на ячейку в другой книге, формулой
 
Добрый день.
В книге FD00148.xlsx на листе Report есть нужная мне ячейка L29. Я хочу вручную проложить путь к этому файлу и получить из него значение в ячейке L29, чтобы при перемещении на другой комп ссылка на устарела.
Путь к файлу через PLEX я нашел, а вот как сослаться на конкретную ячейку на конкретном листе, имея в формате текста путь к файлу, я не знаю. Помогите.
Хочу найти что-то наподобие такого:
=ПОЛУЧИТЬЗНАЧЕНИЕ('C:\Documents and Settings\counter-fil\Рабочий стол\Desktop\Мои документы\Анализ проектов\FD\2Q 2012\[FD00148.xlsx]Report'!$L$29),
т.е. склеиваешь полностью ссылку на ячейку и получаешь значение этой ячейки в заданной книге.

ПС. Сори админы, примера приложить не могу, всё в тексте.
Изменено: Вася Вася - 30 Мар 2016 02:54:59
 
А открыть в одном процессе обе книги, гляцнуть "=", перейти в другую и выбрать нужное - не пробовали?..
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
наверное, поможет это:
Как получить данные из закрытой книги?
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
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
 
а у вас всего одна такая ячейка со ссылкой?
а то каждый раз открывать/закрывать файл при запуске функции - как-то не айс.
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Не, у меня будет много на листе.
 
Ладно, всем спасибо, вопрос решен.
Я думал проще будет.
 
такая функция:
Код
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")
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist, понятно.
кстати, процедуру Get_Value_From_Close_Book_Excel4Macro() в виде функции тоже "перепилить" не удалось :(
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Спасибо.
Завтра попробую.
 
The_Prist, Эх, ошибку выдает.
 
Цитата
End F unction
Здесь пробел убрали? (форум подглючивает)
Правильно надо (End Function)
Спасибо
 
и квадратик перед Value - тоже :)
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Убрал конечно.
Ошибку функция выдает после того, как вводишь её =Get_Value... в ячейку и жмешь Enter. Функция берет нужное значение из закрытой книги, но потом Excel виснет.
 
Эх, а у меня не выдает....книга-то где находится? Параметры какие в функцию передаете? Что еще на листе есть?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist, сори, сил нет чтобы оттестировать ещё раз. На пустой книге попробовал - работает. После НГ уже займусь.
Большое спасибо.
 
Цитата
The_Prist написал:
   If IsArray(vData) Then        Get_Value_From_Close_Book = vData    Else        Get_Value_From_Close_Book = vData    End If
может ошибка возникает из-за того, что и Then и Else выполняют одно и тоже?
 
Не думаю, что Вася Вася столько времени ждёт ответ - с 30 декабря 2012 года ))  
Страницы: 1
Читают тему (гостей: 1)