Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.01.2014, 23:40   #1
Pasha_Z
Пользователь
 
Регистрация: 01.01.2014
Сообщений: 71
По умолчанию заполнение даних из закрытого файла

Подскажите как перенести значения (данные) с ячеек E8:X60 закрытого файла под именем ДАТА_01, который находится тот же папку что и открытый файл ДАТА_00 в ячейки E8:X60.
Pasha_Z вне форума Ответить с цитированием
Старый 28.01.2014, 00:12   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

открыть, скопировать и закрыть.

если сделать все быстро - может ни кто и не заметит.

можно запросом, если там обычная таблица с шапкой и строками данных.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 28.01.2014, 00:18   #3
Pasha_Z
Пользователь
 
Регистрация: 01.01.2014
Сообщений: 71
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
можно запросом, если там обычная таблица с шапкой и строками данных.
Там таблицы одинаковые.
желательно не открывать файл.
просто переносится фактически от разных файлов на разные листы открытого файла.
Pasha_Z вне форума Ответить с цитированием
Старый 28.01.2014, 00:33   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

а Вы полагаете запрос может взять данные из файла не открывая его?
запросу тоже надо получить доступ к данным.
нет доступа - нет данных.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 28.01.2014, 00:44   #5
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Тем более что нужно перенести. А это подразумевает изменение исходного файла.
Или не нужно переносить?
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 28.01.2014, 03:24   #6
alex77755
Форумчанин
 
Аватар для alex77755
 
Регистрация: 14.02.2009
Сообщений: 753
По умолчанию

Где-то попадался примерчик:
Цитата:
В VBA не существует метода получения значения из закрытого файла рабочей
книги. Однако вы можете воспользоваться возможностью управления ссылками на
файлы, которая предоставляется в Excel. В настоящем разделе описана функция VBA
(GetValue, показанная ниже), которая получает значение из закрытой книги.
Эта задача выполняется в результате вызова макроса XLM.
Код 1

Код:
Private Function GetValue(path, file, sheet, ref)
Dim arg As String
If Right(path, 1) <> "\" Then path = path & "\"
If Dir(path & file) = "" Then
GetValue = "Файл не найден"
Exit Function
End If
arg = "'" & path & "[" & file & "]" & sheet & "'!" & _
Range(ref).Range("A1").Address(, , xlR1C1)
GetValue = ExecuteExcel4Macro(arg)
End Function
Функция GetValue имеет четыре аргумента:
¦ path – путь к закрытому файлу (например, "d:\files");
¦ file – название рабочей книги (например, "budget.xls");
¦ sheet – название рабочего листа (например, "Лист1");
¦ ref – ссылка на ячейку (например, "C4").
Следующая процедура демонстрирует, как используется функция GetValue.
В этой процедуре отображается значение ячейки А1 листа Лист1 файла 99Budget.xls
(папка XLFiles\Budget на диске c:.
Код 1
Код:
Sub TestGetValue()
p = "c:\XLFiles\Budget"
f = "99Budget.xls"
s = "Лист1"
a = "A1"
MsgBox GetValue(p, f, s, a)
End Sub
Ниже приведен еще один пример. Эта процедура считывает 1200 значений
(100 строк и 12 столбцов) из закрытого файла и помещает эти значения на активный
рабочий лист.
Код 1

Код:
Sub TestGetValue2()
p = "c:\XLFiles\Budget"
f = "99Budget.xls"
s = "Sheet1"
Application.ScreenUpdating = False
For r = 1 To 100
For c = 1 To 12
a = Cells(r, c).Address
Cells(r, c) = GetValue(p, f, s, a)
Next c
Next r
Application.ScreenUpdating = True
End Sub
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru
alex77755 вне форума Ответить с цитированием
Старый 28.01.2014, 04:00   #7
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Что тут скаазть...

прочитать данные из файла не открывая файл - это мастерство!!!

полагаю следующим этапом будет написание макроса, с помощью которого можно выпить пиво из бутылки не открывая ее.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 28.01.2014, 06:11   #8
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Ага. Наивные... Предлагаю желающим "не открывая", тренировать силу мысли. Так быстрей получится.
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 28.01.2014, 07:04   #9
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

И, все-таки: то, что файл-источник так, или иначе все равно открывается, при любом способе получения данных - это очевидно. Но, если открывать "тяжелый" файл, содержащий большое количество листов, формул, ссылок, объектов, форматов и т.п. методом Open, то это будет долго. В таком случае, действительно, лучше либо воспользоваться, как предлагает alex77755 и Дж. Уокенбах макросом XLM (пример из поста №6), либо вставить ссылки в ячейки, получить по ним значения и удалить ссылки, оставив значения. Например, так:
Код:
Sub qq()
    Application.ScreenUpdating = False
    With Range("E8:X60")
        .Formula = "='" & ThisWorkbook.Path & "\[ДАТА_01.xls]Лист1'!" & .Address
        .Value = .Value
    End With
End Sub
Необходимо отметить, что в том и другом случае, кроме пути, имени файла и диапазона ячеек, так же требуется заранее знать имя листа из файла-источника.
А если открывать, копировать и закрывать, то лучше так:
Код:
Sub qq()
    Dim f As String: Application.ScreenUpdating = False
    f = ThisWorkbook.Path & "\" & "ДАТА_01.xls"
    [E8:X60].Value = GetObject(f).Worksheets("Лист1").[E8:X60].Value
    GetObject(f).Close False
End Sub
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 28.01.2014 в 08:53.
SAS888 вне форума Ответить с цитированием
Старый 28.01.2014, 09:24   #10
Pasha_Z
Пользователь
 
Регистрация: 01.01.2014
Сообщений: 71
По умолчанию

Спасибо всем за интересные ответы.
буду определяться с вариантами решения своей задачи.
Pasha_Z вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Файли.Зчитиваний даних с файла (Ошибка) Роман5день55 Помощь студентам 4 28.10.2013 14:14
Чтение даних с файла xml amator_roma Visual C++ 11 06.06.2011 14:39
копирование изображений из закрытого файла в активный лист Jargunkin Microsoft Office Excel 1 01.03.2011 00:00
Экспорт данных из закрытого файла КаМММ Microsoft Office Excel 6 06.10.2008 07:47
Ссылка на ячейку закрытого файла tat-besidovska Microsoft Office Excel 1 18.01.2008 11:38