2010-03-11 4 views
0

Мой вопрос следующий: Я дал книгу нескольким людям. У них есть эта книга в папке по своему выбору. Имя рабочей книги одинаково для всех людей, но расположение папок меняется. Предположим, что общим именем файла является 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) другим и найти ее исходную книгу.Обновление целевой рабочей книги - извлечение данных из исходной книги

ответ

2

Чтобы пояснить мое понимание, каждый пользователь имеет электронную таблицу 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 

В качестве объяснения:

  1. В подразделах сначала необходимо указать название книги MyData-1
  2. Функции GetFilePath будет получить полное имя пути workbbok , Обратите внимание, что я установил его для просмотра на диске «C: \», и ​​вы можете исправить это.
  3. Как только у нас есть полный путь к файлу, мы можем легко открыть книгу и скопировать требуемый диапазон.

Обратите внимание, что экран выключен, чтобы создать иллюзию, что книга не была открыта при копировании данных. Кроме того, я добавил кнопку на листе MyData-2 для запуска кода, то есть пользователь открывает книгу, нажимает кнопку, и данные импортируются.

И, наконец, этот код может быть значительно увеличен, и вы можете его настроить. Например, проверка ошибок, если файл не найден, поиск в нескольких каталогах (например, C: \, D:) ...

Надеется, что это поможет вам начать работу на правильном пути

+0

Остаток, Большое спасибо за вашу помощь. Я попробую тоже попробовать в выходные. Скоро опубликует и сообщит, как я пошел. Помощь, которую я получил на этом посту, невероятна. Спасибо всем за ваше время и усилия. – Allan

+0

Чтобы прояснить мое понимание, каждый пользователь имеет электронную таблицу под названием MyData-1.xls, но с различными местоположениями. Вы хотите отправить каждому человеку новую таблицу MyData-2, которая будет автоматически извлекать данные из диапазона B8: C25 в MyData-1.xls? .... (((Да, это правильно.))) ... спасибо – Allan

+0

@Allan - Дайте ему вихрь и дайте мне знать, как это работает для вас. Рад помочь. –

1

Вы должны использовать копировать/вставлять специальные только для значений:

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, я бы, вероятно, поставить открытие кода в функции. Убедитесь, что они поместили новый файл в тот же каталог, что и старый файл.

+0

ТНХ для ответа: Тем не менее я не cnocerned с оклейкой особой вещью. Я обеспокоен тем, что их книги, которые не были частью моего теста (и мои теперь связанные книги), не будут работать. Если бы я передал им свою целевую книгу, найдет ли она свою рабочую книгу MyData-1 и высушит данные из нее в тот, который я пришлю им? – Allan

+0

Я смущен тем, почему вы их связываете, это, кажется, проблема. Я бы подумал, что вы дадите им MyData-2.xls, и они нажмут на него кнопку и будут рисовать значения, указанные в их старом MyData-1.xls. Зачем вам нужна ссылка? –

+0

Я отредактировал свой ответ, чтобы показать основы, дайте мне знать, если вам нужно что-то другое. –

Смежные вопросы