Мой вопрос следующий: Я дал книгу нескольким людям. У них есть эта книга в папке по своему выбору. Имя рабочей книги одинаково для всех людей, но расположение папок меняется. Предположим, что общим именем файла является MyData-1.xls. Теперь я обновил книгу и хочу отдать ее этим людям. Однако, когда они получат новый (назовем его MyData-2.xls), я хочу, чтобы определенные части данных были извлечены из их файла (MyData-1) и автоматически помещены в новый, предоставленный (MyData-2). Столбцы и ячейки, которые нужно скопировать/импортировать, идентичны для обеих книг. Предположим, что я хочу импортировать данные ячейки (только значения) из MyData-1.xls, Sheet 1, ячейки B8-C25 ... в ... то же место в книге MyData-2.xls. Как я могу указать в коде (возможно, привязанный к кнопке импорта данных с макроопределением теперь), что я хочу, чтобы эти данные были внесены в эту новую книгу. Я попробовал это в своем собственном месте, открыв две книги и используя программу copy/paste-special со ссылками. Он работает очень хорошо, но, похоже, создает жесткую связь между двумя физическими книгами. Я изменил название исходной книги и все еще работал. Это заставляет меня поверить, что между буксирной машиной существует «жесткая связь», и это не позволит мне предоставить книгу (MyData-2.xls) другим и найти ее исходную книгу.Обновление целевой рабочей книги - извлечение данных из исходной книги
ответ
Чтобы пояснить мое понимание, каждый пользователь имеет электронную таблицу MyData-1.xls, но с различными местоположениями. Вы хотите отправить каждому человеку новую таблицу MyData-2, которая будет автоматически извлекать данные из диапазона B8: C25 в MyData-1.xls?
Существуют различные варианты выполнения этого и ниже, я предоставил один из способов сделать это. Короче говоря, пользователь откроет MyData-2, нажмите кнопку, и код будет искать MyData-1 в своей директории, открыть книгу, захватить данные, вставить ее в MyData-2 и закрыть MyData-1.
Sub UpdateWorkbook()
'Identify workbook you would like to pull data from (same for all users)
Dim TargetWorkbook As String
TargetWorkbook = "MyData-1"
'Get the full path of that workbook by searching in a specified directory
Dim TargetPathName As String
TargetPathName = GetFilePath(TargetWorkbook)
'Retrieve data in range B8:C25, copy and paste, then close workbook
Dim TargetRng As Range
Application.ScreenUpdating = False
Workbooks.Open Filename:=TargetPathName
Set TargetRng = Sheets("Sheet1").Range("B8:C25")
TargetRng.Copy Destination:=ThisWorkbook.Worksheets(1).Range("B8:C25")
ActiveWorkbook.Close
Application.ScreenUpdating = True
End Sub
Function GetFilePath(TargetWkbook As String) As String
Dim FullFilePath As String
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.EnableEvents = False
On Error Resume Next
With Application.FileSearch
.NewSearch
.LookIn = "C:\"
.FileType = msoFileTypeExcelWorkbooks
.SearchSubFolders = True
.Filename = TargetWkbook
If .Execute > 0 Then
FullFilePath = .FoundFiles(1)
End If
End With
GetFilePath = FullFilePath
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.EnableEvents = True
End Function
В качестве объяснения:
- В подразделах сначала необходимо указать название книги MyData-1
- Функции GetFilePath будет получить полное имя пути workbbok , Обратите внимание, что я установил его для просмотра на диске «C: \», и вы можете исправить это.
- Как только у нас есть полный путь к файлу, мы можем легко открыть книгу и скопировать требуемый диапазон.
Обратите внимание, что экран выключен, чтобы создать иллюзию, что книга не была открыта при копировании данных. Кроме того, я добавил кнопку на листе MyData-2 для запуска кода, то есть пользователь открывает книгу, нажимает кнопку, и данные импортируются.
И, наконец, этот код может быть значительно увеличен, и вы можете его настроить. Например, проверка ошибок, если файл не найден, поиск в нескольких каталогах (например, C: \, D:) ...
Надеется, что это поможет вам начать работу на правильном пути
Вы должны использовать копировать/вставлять специальные только для значений:
Private Sub ImportData_Click()
On Error GoTo OpenTheSheet
Workbooks("MyData-1.xls").Activate
GoTo SheetOpen
OpenTheSheet:
Workbooks.Open "MyData-1.xls"
Workbooks("MyData-1.xls").Activate
SheetOpen:
On Error GoTo 0
Workbooks("MyData-1.xls").Worksheets("sheetwhatever").firstRange.Copy
Workbooks("MyData-2.xls").Worksheets("anothersheet").yourRange.PasteSpecial(xlPasteValues)
End Sub
Это может быть очищенными немного, но это всегда неаккуратно сделать файл вещи в VBA, я бы, вероятно, поставить открытие кода в функции. Убедитесь, что они поместили новый файл в тот же каталог, что и старый файл.
ТНХ для ответа: Тем не менее я не cnocerned с оклейкой особой вещью. Я обеспокоен тем, что их книги, которые не были частью моего теста (и мои теперь связанные книги), не будут работать. Если бы я передал им свою целевую книгу, найдет ли она свою рабочую книгу MyData-1 и высушит данные из нее в тот, который я пришлю им? – Allan
Я смущен тем, почему вы их связываете, это, кажется, проблема. Я бы подумал, что вы дадите им MyData-2.xls, и они нажмут на него кнопку и будут рисовать значения, указанные в их старом MyData-1.xls. Зачем вам нужна ссылка? –
Я отредактировал свой ответ, чтобы показать основы, дайте мне знать, если вам нужно что-то другое. –
- 1. Обновление рабочей книги Excel
- 2. Экспорт данных в CSV-файл и извлечение имени файла из исходной рабочей книги
- 3. Импорт данных из другой открытой рабочей книги
- 4. VBA - Извлечение данных из закрытой книги Excel
- 5. Извлечение значений из книги по критериям
- 6. Активация рабочей книги
- 7. Отключение соединений рабочей книги
- 8. Неисправность рабочей книги Excel
- 9. Excel VBA или функция извлечения имени и данных рабочей книги из рабочей книги
- 10. VBScript Поиск книги Excel для ценности из другой рабочей книги
- 11. Автоматическое обновление данных в других листах Excel рабочей книги
- 12. Обновление данных в листах Другие Excel рабочей книги
- 13. Имя рабочей книги как переменная
- 14. Отключить подключения рабочей книги Excel
- 15. Диапазон копирования из другой рабочей книги
- 16. VBA - Загрузка основной книги с использованием другой рабочей книги
- 17. Сохраните исходное состояние рабочей книги
- 18. Передача объекта рабочей книги переменной
- 19. Видимый метод для рабочей книги
- 20. C++ Excel экономия рабочей книги
- 21. Как использовать объект рабочей книги
- 22. VBA - Ошибка макрокоманды рабочей книги
- 23. VBA: Эффективный Vlookup из другой рабочей книги
- 24. Запуск макроса из другой рабочей книги
- 25. Вызывать Excel UDF из рабочей книги Macro
- 26. Загрузить все фильтры из таблицы рабочей книги
- 27. Заполнять правильные заголовки из закрытой рабочей книги
- 28. Возвращаемый объект рабочей книги из функции
- 29. Поле подключения рабочей книги Excel «Последнее обновление» всегда пусто
- 30. Ошибка 438 при копировании данных из закрытой рабочей книги
Остаток, Большое спасибо за вашу помощь. Я попробую тоже попробовать в выходные. Скоро опубликует и сообщит, как я пошел. Помощь, которую я получил на этом посту, невероятна. Спасибо всем за ваше время и усилия. – Allan
Чтобы прояснить мое понимание, каждый пользователь имеет электронную таблицу под названием MyData-1.xls, но с различными местоположениями. Вы хотите отправить каждому человеку новую таблицу MyData-2, которая будет автоматически извлекать данные из диапазона B8: C25 в MyData-1.xls? .... (((Да, это правильно.))) ... спасибо – Allan
@Allan - Дайте ему вихрь и дайте мне знать, как это работает для вас. Рад помочь. –