Форум программистов, компьютерный форум, киберфорум
MS Office Excel
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
1 / 1 / 0
Регистрация: 15.11.2010
Сообщений: 12
1

Получение значения по текстовому имени из закрытого файла

19.09.2013, 09:47. Показов 2086. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброе время суток!
Есть задача: в столбце прописаны имена файлов эл.таблиц (как текст), в соседних столбцах нужно получить значение ячейки A1, А2 и т.д. из соответствующих файлов.
Использовать прямые ссылки на ячейки этих файлов нецелесообразно из-за большого кол-ва вносимых изменений в имена файлов.
Функция ДВССЫЛ() работает только при открытых файлах, а нужно получить значения без их открытия.
Простой пример во вложении.
Что посоветуете?
Вложения
Тип файла: zip Ссылки на таблицы.zip (17.5 Кб, 13 просмотров)
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.09.2013, 09:47
Ответы с готовыми решениями:

Получение значения по имени свойства класса
Доброго времени суток. Мне необходимо реализовать, чтобы можно было получить значение свойства...

Получение значения атрибута класса по его имени
Здравствуйте. Допустим у меня есть объект: Object MyObj; И допустим я точно знаю что...

Получение имени объекта и занос в него значения
Люди может вопрос и дурацкий, но что-то не могу сообразить. Вообщем нужно занести в нужное поле...

Получение имени файла
Подскажите как получить имя файла находящегося скажим в папке My music cредствами C#??

7
98 / 49 / 0
Регистрация: 14.08.2013
Сообщений: 230
Записей в блоге: 4
19.09.2013, 10:19 2
Вариант 1
Visual Basic
1
2
3
4
5
6
7
8
9
10
Public Function GetValueFromClosed(path As String, file As String, sheet As String, ref As String)
Dim arg As String
If Right(path, 1) <> "\" Then path = path & "\"
If Dir(path & file) = "" Then
    GetValueFromClosed = "File Not Found"
    Exit Function
End If
arg = Chr(39) & path & "[" & file & "]" & sheet & Chr(39) & "!" & Range(ref).Range("A1").Address(ReferenceStyle:=xlR1C1)
GetValueFromClosed = Application.ExecuteExcel4Macro(arg)
End Function


Вариант 2
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 Sub GetDataFromClosedBook ()
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
    
    Set cnn = New ADODB.Connection
    Set rst = New ADODB.Recordset
    
    cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
      "Data Source=D:\1\1.xls;" & _
      "Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"""
    
    rst.Open "SELECT * FROM [Лист1$A1:B6]", cnn
    
    Range("A1").CopyFromRecordset rst
    
    rst.Close
    cnn.Close
    
    Set rst = Nothing
    Set cnn = Nothing
end sub


После заточки вариантов "под себя" всё работет, но
Visual Basic
1
[B]xxx[/B].range.copy destination:=[B]yyy[/B]
из открытой книги работает раз в 10 быстрее.

Для второго варианта в reference подключи Microsoft ActiveX DataObjects.
1
1 / 1 / 0
Регистрация: 15.11.2010
Сообщений: 12
19.09.2013, 11:35  [ТС] 3
Работа макроса
Цитата Сообщение от DimN Посмотреть сообщение
Function GetValueFromClosed
понятна.
А как эту функцию использовать в ячейках таблицы?

Добавлено через 54 минуты
Вызов вышеописанной функции GetValueFromClosed() из макроса возвращает правильный результат, а вызов с теми же параметрами из ячейки таблицы выдаёт #ЗНАЧ!.
В чём причина неработоспособности функции, описанной в модуле VBA при использовании её в ячейке?
0
416 / 263 / 83
Регистрация: 27.10.2012
Сообщений: 861
19.09.2013, 12:05 4
Цитата Сообщение от Walter Посмотреть сообщение
из-за большого кол-ва вносимых изменений в имена файлов.
Имена при любом способе нужно как-то получить.
0
1 / 1 / 0
Регистрация: 15.11.2010
Сообщений: 12
19.09.2013, 16:59  [ТС] 5
Проблема не в именах файлов...
DimN написал отличные варианты решения, за что ему спасибо!
Предоставленная функция GetValueFromClosed() хорошо работает в теле макроса.
Вот её вызов из макроса Вывести_Результат():
MsgBox GetValueFromClosed("", "Таблица1.xlsx", "Лист1", "A2")
Но при её использовании в ячейке таблицы с теми же параметрами:
=GetValueFromClosed(""; "Таблица1.xlsx"; "Лист1"; "A2")
получается #ЗНАЧ!.
Пример во вложении.
В чём может быть проблема?
Вложения
Тип файла: zip Ссылки на таблицы.zip (25.1 Кб, 5 просмотров)
0
416 / 263 / 83
Регистрация: 27.10.2012
Сообщений: 861
19.09.2013, 22:53 6
Повесить макрос на какое-нибудь событие на листе и пускай себе работает.
0
98 / 49 / 0
Регистрация: 14.08.2013
Сообщений: 230
Записей в блоге: 4
20.09.2013, 07:02 7
Цитата Сообщение от kalbasiatka Посмотреть сообщение
Повесить макрос на какое-нибудь событие на листе и пускай себе работает.
Согласен, повесь на на кнопку и обзови её "refreж"

или вообще на изменение содержимого листа ваще забавно будет - изменил имя файла - само обновилось, но на листе работать будет ооочень неудобно - привыкать надо будет.
0
John_W
20.09.2013, 16:55 8
Добрый день!
подскажите новичку, в чём может быть проблема? задача - получить данные из заданного файла и вставить их в нужные ячейки. Попробовал написать:

Sub GetValue()
Range("C3").Select
p = "C:\Users\john\Desktop"
f = "20130906.xlsx"
s = "1"
a = "D3"
Cell("C3") = GetValue(p, f, s, a)

End Sub

Выдаёт ошибку : Wrong number of arguments or invalid property assignment

Спасибо заранее за помощь.
20.09.2013, 16:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.09.2013, 16:55
Помогаю со студенческими работами здесь

Получение имени файла
У меня есть код для просмотра изображение при нажатии button, но не могу сделать так чтобы имя...

Получение имени файла у курсора
Кто знает, как по курсору (System::Windows::Forms::Cursor) узнать имя файла?

Получение имени файла из OpenFileDialog
хочу получить имя файла из файлового диалога а мне компилятор выдает: в строке filename =...

Получение имени файла в url
Ситуация такова. Для скачки файла нужно знать его полный урл (&quot;путь к файлу на сайте&quot;/&quot;имя...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru