Страницы: 1
RSS
перетащить данные из другого файла
 
Коллеги, доброго дня!
Подскажите тупенькому почему выдает ошибку?
Там все просто из файла СЮДА хочу подтянуть данные из файла ОТСЮДА,
проблемка что файл отсюда может находиться где угодно и называться как угодно, но именно такого формата.
Вроде все работало, когда макрос был сохранен в личных макросах, а когда перенесся в ЭтуКнигу, перестал, гаденыш((

Укажите новичку на ошибку, буду благодарен))
 
Попробуйте код из  модуля книги переместить в стандартный модуль (его нужно создать).
Мне этого достаточно - заработало. Из модуля книги тоже не работало - я давно знаю что это место ненадёжное...
Изменено: Hugo - 25.03.2015 17:15:18
 
Спасибо, Хьюго, я не силен в этом, но если я буду открывать этот файл с другого компа макрос перетащится?)
 
на мой взгляд, оперировать активностью окон, как-то ненадежно...
лучше как-нибудь так:
Код
Sub Сформировать_ПС()
    Dim WbTo As Workbook
    Dim WbFrom As Workbook

    Dim fName As String
    
    Application.Calculation = xlManual
    Set WbTo = ActiveWorkbook

    With Application.FileDialog(msoFileDialogFilePicker)
        .Title = Cells(4, 7)
        .InitialFileName = "C:\"
        .Filters.Add "Книга Excel", "*.xls;*.xlsx;*.xlsm", 1: .AllowMultiSelect = False
        If .Show = False Then Exit Sub: If .SelectedItems.Count = 0 Then Exit Sub
        fName = Trim(.SelectedItems.Item(1))
    End With
 
    Set WbFrom = Workbooks.Open(fName)
    WbFrom.Sheets(1).Range("G10:H11").Copy Destination:=WbTo.Sheets(1).Range("H10")
    WbFrom.Sheets(1).Range("H25:H27").Copy Destination:=WbTo.Sheets(1).Range("I25")
  
    Application.ScreenUpdating = True
    Application.Calculation = xlAutomatic

End Sub
 
webley, спасибо, я вообще ноль в вба, так что пытаюсь разобраться, а в строчках
WbFrom.Sheets(1).Range("G10:H11";).Copy Destination:=WbTo.Sheets(1).Range("H10";)    
WbFrom.Sheets(1).Range("H25:H27";).Copy Destination:=WbTo.Sheets(1).Range("I25";)


Sheets(1) означает что это первый по счету лист? У меня много листов и я не знаю с какого листа будут запускать макрос.
То есть мне надо чтобы тянулось на тот лист, с которого запускается макрос, соответственно может можно чтото поменять чтобы это было так?
 
Да, Sheets(1) это первый лист
Чтобы использовать активный лист, можно например, сделать так:
Код
    'вставить в начале макроса
    Dim Sh As Worksheet
    Set Sh = ActiveSheet
    '...........
    WbFrom.Sheets(1).Range("G10:H11").Copy Destination:=Sh.Range("H10")
 
Так же можно копировать не с первого листа книги Откуда, а с какого-нибудь конкретного. Например так:
Код
WbFrom.Sheets("Имя листа").Range("G10:H11").Copy Destination:=Sh.Range("H10")
 
Сам код конечно нужно править, я об этом вообще ничего не говорил. Но чтоб заработало то, что есть - нужно его перенести в стандартный модуль, ну и перепривязать кнопку.
 
Всем спасиьбо за помощь!) Сообщение можно закрыть
Страницы: 1
Наверх