Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Копирование данных из закрытой книги - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Копирование данных из закрытой книги
Мур Дата: Воскресенье, 26.06.2011, 17:35 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 436
Репутация: 19 ±
Замечаний: 0% ±

Приветствую участников Форума!
Вопрос к макросоведам.
На одном из Excelевских сайтов (Excel - это не сложно) подсмотрел следующий код:
[vba]
Код
Sub Get_Value_From_Close_Book_Formula()
Dim sPath As String, sFile As String, sShName As String
sPath = "C:\Documents and Settings\"
sFile = "Книга1.xls"
sShName = "Лист1"
With Range("A1:A100")
.Formula = "='" & sPath & "[" & sFile & "]" & sShName & "'!" & "A1:A100"
.Value = .Value
End With
End Sub
[/vba]
Копируется диапазон данных из закрытой книги. Путь к закрытому файлу прописан в коде.
Все здорово работает, спасибо авторам.
В то же время мне необходимо немого переделать под себя:
1. Данный вставляются в тоже самое место, где они и располагались в исходном файле, а мне надо, ну предположим, в C2:С101;
2. Мне нужно, чтобы после запуска кода вылетало окошко с запросом, из какого файла вставить данные. Все файлы "исходники" в одной папке, структура данных везде одинакова.
Заранее благодарен.
 
Ответить
СообщениеПриветствую участников Форума!
Вопрос к макросоведам.
На одном из Excelевских сайтов (Excel - это не сложно) подсмотрел следующий код:
[vba]
Код
Sub Get_Value_From_Close_Book_Formula()
Dim sPath As String, sFile As String, sShName As String
sPath = "C:\Documents and Settings\"
sFile = "Книга1.xls"
sShName = "Лист1"
With Range("A1:A100")
.Formula = "='" & sPath & "[" & sFile & "]" & sShName & "'!" & "A1:A100"
.Value = .Value
End With
End Sub
[/vba]
Копируется диапазон данных из закрытой книги. Путь к закрытому файлу прописан в коде.
Все здорово работает, спасибо авторам.
В то же время мне необходимо немого переделать под себя:
1. Данный вставляются в тоже самое место, где они и располагались в исходном файле, а мне надо, ну предположим, в C2:С101;
2. Мне нужно, чтобы после запуска кода вылетало окошко с запросом, из какого файла вставить данные. Все файлы "исходники" в одной папке, структура данных везде одинакова.
Заранее благодарен.

Автор - Мур
Дата добавления - 26.06.2011 в 17:35
nilem Дата: Воскресенье, 26.06.2011, 18:30 | Сообщение № 2
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Вот файлик. Положите его в одну папку с файлами-исходниками.
Жмем кнопку, в списке выбираем нужный файл - Ок (ну, или не Ок).
К сообщению приложен файл: 6260780.zip (22.1 Kb)


Яндекс.Деньги 4100159601573

Сообщение отредактировал nilem - Воскресенье, 26.06.2011, 18:31
 
Ответить
СообщениеВот файлик. Положите его в одну папку с файлами-исходниками.
Жмем кнопку, в списке выбираем нужный файл - Ок (ну, или не Ок).

Автор - nilem
Дата добавления - 26.06.2011 в 18:30
Hugo Дата: Воскресенье, 26.06.2011, 18:32 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
1. With Range("C2:С101")
2. Окошко сделать можно, но тогда ещё нужно окошко с указанием листа, или всегда с первого брать будете?


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
Сообщение1. With Range("C2:С101")
2. Окошко сделать можно, но тогда ещё нужно окошко с указанием листа, или всегда с первого брать будете?

Автор - Hugo
Дата добавления - 26.06.2011 в 18:32
nilem Дата: Воскресенье, 26.06.2011, 18:37 | Сообщение № 4
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Цитата Hugo
With Range("C2:С101")

Игорь, так не получается.

Мур, в модуле формы вот так надо (поторопился):
[vba]
Код
Private Sub CommandButton1_Click()
If f = "" Then MsgBox "Не выбран файл", 64: Exit Sub
Call Module1.GetValue(Fldr, f): Unload Me
End Sub
[/vba]


Яндекс.Деньги 4100159601573
 
Ответить
Сообщение
Цитата Hugo
With Range("C2:С101")

Игорь, так не получается.

Мур, в модуле формы вот так надо (поторопился):
[vba]
Код
Private Sub CommandButton1_Click()
If f = "" Then MsgBox "Не выбран файл", 64: Exit Sub
Call Module1.GetValue(Fldr, f): Unload Me
End Sub
[/vba]

Автор - nilem
Дата добавления - 26.06.2011 в 18:37
Hugo Дата: Воскресенье, 26.06.2011, 18:43 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
Ну да, я не проверил...
Но и ты тоже поторопился и тут - книга ведь закрытая
Нужно тогда так:
 [vba]
Код
   .Formula = "=GetExtData('" & sPath & "[" & sFile & "]Лист1'!A1:A100)"
[/vba]


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеНу да, я не проверил...
Но и ты тоже поторопился и тут - книга ведь закрытая
Нужно тогда так:
 [vba]
Код
   .Formula = "=GetExtData('" & sPath & "[" & sFile & "]Лист1'!A1:A100)"
[/vba]

Автор - Hugo
Дата добавления - 26.06.2011 в 18:43
Мур Дата: Воскресенье, 26.06.2011, 18:47 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 436
Репутация: 19 ±
Замечаний: 0% ±

Hugo,
с [vba]
Код
With Range("C2:С101")
[/vba] понятно, спасибо!
А данные всегда берутся с одного и того же листа.
 
Ответить
СообщениеHugo,
с [vba]
Код
With Range("C2:С101")
[/vba] понятно, спасибо!
А данные всегда берутся с одного и того же листа.

Автор - Мур
Дата добавления - 26.06.2011 в 18:47
Мур Дата: Воскресенье, 26.06.2011, 18:51 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 436
Репутация: 19 ±
Замечаний: 0% ±

Ребята! не знаю, у меня
[vba]
Код
With Range("C2:С101")
[/vba]
работает.
 
Ответить
СообщениеРебята! не знаю, у меня
[vba]
Код
With Range("C2:С101")
[/vba]
работает.

Автор - Мур
Дата добавления - 26.06.2011 в 18:51
Hugo Дата: Воскресенье, 26.06.2011, 19:10 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
[vba]
Код
Sub Get_Value_From_Close_Book_Formula()
Dim sPath As String, sFile As String, sShName As String
sShName = "Лист1"

With Application.FileDialog(msoFileDialogFilePicker)
.Filters.Clear
.Filters.Add "Microsoft Excel files", "*.xls"
.AllowMultiSelect = False
.InitialFileName = ThisWorkbook.Path
If .Show = 0 Then Exit Sub
sep_ = Application.PathSeparator
sFile = Split(.SelectedItems(1), sep_)(UBound(Split(.SelectedItems(1), sep_))) ' "Книга1.xls"
sPath = Replace(.SelectedItems(1), sFile, "") '"C:\Documents and Settings\"
End With

With Range("C2:C101")
.Formula = "='" & sPath & "[" & sFile & "]" & sShName & "'!" & "A1:A100"
.Value = .Value
End With
End Sub
[/vba]

Application.FileDialog(msoFileDialogFilePicker) не работает под 2000 Экселем!

А With Range("C2:C101") в моём примере выше вероятно кириллицей набрано было, поэтому не работало :(((


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
Сообщение[vba]
Код
Sub Get_Value_From_Close_Book_Formula()
Dim sPath As String, sFile As String, sShName As String
sShName = "Лист1"

With Application.FileDialog(msoFileDialogFilePicker)
.Filters.Clear
.Filters.Add "Microsoft Excel files", "*.xls"
.AllowMultiSelect = False
.InitialFileName = ThisWorkbook.Path
If .Show = 0 Then Exit Sub
sep_ = Application.PathSeparator
sFile = Split(.SelectedItems(1), sep_)(UBound(Split(.SelectedItems(1), sep_))) ' "Книга1.xls"
sPath = Replace(.SelectedItems(1), sFile, "") '"C:\Documents and Settings\"
End With

With Range("C2:C101")
.Formula = "='" & sPath & "[" & sFile & "]" & sShName & "'!" & "A1:A100"
.Value = .Value
End With
End Sub
[/vba]

Application.FileDialog(msoFileDialogFilePicker) не работает под 2000 Экселем!

А With Range("C2:C101") в моём примере выше вероятно кириллицей набрано было, поэтому не работало :(((

Автор - Hugo
Дата добавления - 26.06.2011 в 19:10
Мур Дата: Воскресенье, 26.06.2011, 19:24 | Сообщение № 9
Группа: Проверенные
Ранг: Обитатель
Сообщений: 436
Репутация: 19 ±
Замечаний: 0% ±

Hugo!,
Замечательно работает, Огромное спасибо!
Я вооще не понимаю как это работает, просто копирую коды и все.
А результат налицо. Еще раз спасибо.
 
Ответить
СообщениеHugo!,
Замечательно работает, Огромное спасибо!
Я вооще не понимаю как это работает, просто копирую коды и все.
А результат налицо. Еще раз спасибо.

Автор - Мур
Дата добавления - 26.06.2011 в 19:24
Мур Дата: Воскресенье, 26.06.2011, 19:26 | Сообщение № 10
Группа: Проверенные
Ранг: Обитатель
Сообщений: 436
Репутация: 19 ±
Замечаний: 0% ±

nilem!
Ваше творение тоже для меня загадка, большое спасибо!
 
Ответить
Сообщениеnilem!
Ваше творение тоже для меня загадка, большое спасибо!

Автор - Мур
Дата добавления - 26.06.2011 в 19:26
nilem Дата: Воскресенье, 26.06.2011, 19:55 | Сообщение № 11
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
[vba]
Код
With Range("C2:C101")
.Formula = "='" & sPath & "[" & sFile & "]" & sShName & "'!" & "A1:A100"
.Value = .Value
End With
[/vba]
По-моему, все же так не должно правильно работать, когда диапазоны смещены по строкам. Т.е. значения записываются, но в С2, например, попадает значение из А2, а не из А1. Или это только у меня так?

[vba]
Код
.Formula = "=GetExtData('" & sPath & "[" & sFile & "]Лист1'!A1:A100)"
[/vba]
А с этим да, упс. Кстати, посмотрите в атрибутах файла: "авторы John Walkenbach" - так что все вопросы к нему


Яндекс.Деньги 4100159601573

Сообщение отредактировал nilem - Воскресенье, 26.06.2011, 19:56
 
Ответить
Сообщение[vba]
Код
With Range("C2:C101")
.Formula = "='" & sPath & "[" & sFile & "]" & sShName & "'!" & "A1:A100"
.Value = .Value
End With
[/vba]
По-моему, все же так не должно правильно работать, когда диапазоны смещены по строкам. Т.е. значения записываются, но в С2, например, попадает значение из А2, а не из А1. Или это только у меня так?

[vba]
Код
.Formula = "=GetExtData('" & sPath & "[" & sFile & "]Лист1'!A1:A100)"
[/vba]
А с этим да, упс. Кстати, посмотрите в атрибутах файла: "авторы John Walkenbach" - так что все вопросы к нему

Автор - nilem
Дата добавления - 26.06.2011 в 19:55
Hugo Дата: Воскресенье, 26.06.2011, 20:34 | Сообщение № 12
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
Это что, я Уокенбаха правил? smile


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеЭто что, я Уокенбаха правил? smile

Автор - Hugo
Дата добавления - 26.06.2011 в 20:34
Hugo Дата: Воскресенье, 26.06.2011, 21:04 | Сообщение № 13
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
Не, ну это явная ошибка - раз в параметрах есть sPath, то и использоваться он должен!
[vba]
Код
Sub GetValue(sPath As String, sFile As String)
With Cells(2, 3)
      .Formula = "=GetExtData('" & sPath & "[" & sFile & "]Лист1'!A1:A100)"
      .Resize(UBound(arr, 1), UBound(arr, 2)).Value = arr
End With: arr = Empty
End Sub
[/vba]


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеНе, ну это явная ошибка - раз в параметрах есть sPath, то и использоваться он должен!
[vba]
Код
Sub GetValue(sPath As String, sFile As String)
With Cells(2, 3)
      .Formula = "=GetExtData('" & sPath & "[" & sFile & "]Лист1'!A1:A100)"
      .Resize(UBound(arr, 1), UBound(arr, 2)).Value = arr
End With: arr = Empty
End Sub
[/vba]

Автор - Hugo
Дата добавления - 26.06.2011 в 21:04
nilem Дата: Воскресенье, 26.06.2011, 22:27 | Сообщение № 14
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Цитата Hugo
Не, ну это явная ошибка...

Чтобы снять подозрения с Джона... Это давнишний файлик из его примеров. Я там уже сто раз все переписывал, так что от Уокенбаха ничего не осталось Да, sPath пропустил.

Ну а вот это
[vba]
Код
With Range("C2:C101")
.Formula = "='" & sPath & "[" & sFile & "]" & sShName & "'!" & "A1:A100"
.Value = .Value
End With
[/vba]
все-таки не должно правильно работать. Ага?


Яндекс.Деньги 4100159601573
 
Ответить
Сообщение
Цитата Hugo
Не, ну это явная ошибка...

Чтобы снять подозрения с Джона... Это давнишний файлик из его примеров. Я там уже сто раз все переписывал, так что от Уокенбаха ничего не осталось Да, sPath пропустил.

Ну а вот это
[vba]
Код
With Range("C2:C101")
.Formula = "='" & sPath & "[" & sFile & "]" & sShName & "'!" & "A1:A100"
.Value = .Value
End With
[/vba]
все-таки не должно правильно работать. Ага?

Автор - nilem
Дата добавления - 26.06.2011 в 22:27
Hugo Дата: Воскресенье, 26.06.2011, 22:36 | Сообщение № 15
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
Но ведь работает smile
У меня правильно в C2 ставит данные из A1.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеНо ведь работает smile
У меня правильно в C2 ставит данные из A1.

Автор - Hugo
Дата добавления - 26.06.2011 в 22:36
Мур Дата: Среда, 29.06.2011, 11:23 | Сообщение № 16
Группа: Проверенные
Ранг: Обитатель
Сообщений: 436
Репутация: 19 ±
Замечаний: 0% ±

Доброго времени суток.
В продолжении темы...вопрос.
Какие изменения необходимо внести в код в сообщении №8,
чтобы его можно было запускать с другого листа? У меня он работает корректно только, если его запускать
с листа, куда вставляются данные.
И еще вопросик, можно сделать так, что бы при выборе файла можно было заглянуть а архив rar?
Вопрос адресован к автору Hugo, но если кто другой ответит я не обижусь smile .
 
Ответить
СообщениеДоброго времени суток.
В продолжении темы...вопрос.
Какие изменения необходимо внести в код в сообщении №8,
чтобы его можно было запускать с другого листа? У меня он работает корректно только, если его запускать
с листа, куда вставляются данные.
И еще вопросик, можно сделать так, что бы при выборе файла можно было заглянуть а архив rar?
Вопрос адресован к автору Hugo, но если кто другой ответит я не обижусь smile .

Автор - Мур
Дата добавления - 29.06.2011 в 11:23
Hugo Дата: Среда, 29.06.2011, 13:46 | Сообщение № 17
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
Т.е. Вы хотите запускать с любого листа, а вставлять в определённый?
Попробуйте так поменять одну строку (я сейчас проверить сам не могу):
[vba]
Код
With Лист1.Range("C2:C101")
[/vba]   
Будет вставлять на лист с кодовым именем "Лист1".
Можно указать обычное имя листа или индекс:
[vba]
Код
With Sheets("Нужный лист").Range("C2:C101")    
With Sheets(1).Range("C2:C101")  
[/vba] 

Про извлечение в коде из архива ничего не знаю... Вернее что-то видел, но вроде сложно... Думаю, не стоит заморачиваться.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеТ.е. Вы хотите запускать с любого листа, а вставлять в определённый?
Попробуйте так поменять одну строку (я сейчас проверить сам не могу):
[vba]
Код
With Лист1.Range("C2:C101")
[/vba]   
Будет вставлять на лист с кодовым именем "Лист1".
Можно указать обычное имя листа или индекс:
[vba]
Код
With Sheets("Нужный лист").Range("C2:C101")    
With Sheets(1).Range("C2:C101")  
[/vba] 

Про извлечение в коде из архива ничего не знаю... Вернее что-то видел, но вроде сложно... Думаю, не стоит заморачиваться.

Автор - Hugo
Дата добавления - 29.06.2011 в 13:46
Мур Дата: Среда, 29.06.2011, 17:23 | Сообщение № 18
Группа: Проверенные
Ранг: Обитатель
Сообщений: 436
Репутация: 19 ±
Замечаний: 0% ±

Hugo
И опять спасибо!
Подошло
[vba]
Код
With Sheets("Нужный лист").Range("C2:C101")
[/vba]
 
Ответить
СообщениеHugo
И опять спасибо!
Подошло
[vba]
Код
With Sheets("Нужный лист").Range("C2:C101")
[/vba]

Автор - Мур
Дата добавления - 29.06.2011 в 17:23
Ed_Vard Дата: Среда, 21.09.2011, 12:34 | Сообщение № 19
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

Доброго времени суток уважаемые форумчане!
Дабы не создавать новую тему - спрошу сдесь - т.к. вопрос совпадает по содержимому.
Есть книга Пример с таблицей из которой нужно получить данные в диапазоне А1:AL в другую открытую книгу начиная с ячейки Н6 и втавил все скопированне данные. Но файл с данными получаеться с заранее не известным количеством строк - столбцы таблицы остаються неизменными.
Возможно ли как то модифицировать данный макрос для выполнения данной задачи?
Заранее спасибо за ответ!
К сообщению приложен файл: 5265158.xls (66.0 Kb)
 
Ответить
СообщениеДоброго времени суток уважаемые форумчане!
Дабы не создавать новую тему - спрошу сдесь - т.к. вопрос совпадает по содержимому.
Есть книга Пример с таблицей из которой нужно получить данные в диапазоне А1:AL в другую открытую книгу начиная с ячейки Н6 и втавил все скопированне данные. Но файл с данными получаеться с заранее не известным количеством строк - столбцы таблицы остаються неизменными.
Возможно ли как то модифицировать данный макрос для выполнения данной задачи?
Заранее спасибо за ответ!

Автор - Ed_Vard
Дата добавления - 21.09.2011 в 12:34
nilem Дата: Среда, 21.09.2011, 16:45 | Сообщение № 20
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Так что ли:
[vba]
Код
Range("A1").CurrentRegion.Copy Workbooks("Другая_книга.xls").Sheets(1).Range("H6")
[/vba]


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеТак что ли:
[vba]
Код
Range("A1").CurrentRegion.Copy Workbooks("Другая_книга.xls").Sheets(1).Range("H6")
[/vba]

Автор - nilem
Дата добавления - 21.09.2011 в 16:45
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!