используя копию назначения VBA между книгами - PullRequest
0 голосов
/ 05 марта 2019

Работал над проектом, используя записанные макросы для завершения копирования и вставки между книгами.Записанные макросы работали, НО, когда читают форумы, люди утверждают, что метод копирования / вставки требует больше времени для запуска макроса и очень неэффективен.Поэтому я пытаюсь озвучить строку vba назначения копирования, которая будет копировать несколько столбцов, начиная с диапазона (A2: G2000), а затем вставлять в область диапазона, начиная с (B6: H2000).Я не очень хорош в этом и пытаюсь учиться более эффективно.Здесь на ум приходят две вещи.Простой метод копирования и вставки, который у меня работает.НО будет использовать прямой источник = пункт назначения.Можно ли это сделать?После прочтения этого вы можете увидеть другую проблему.Почему до строки 2000 выбрано и скопировано / вставлено?Вы правы в своем мышлении.Некоторые отчеты (текстовые файлы) имеют 100 строк, около 300, но не более 1000, но я перебираю выбор копии, потому что я не уверен в будущих текстовых файлах.Я думал, если бы вы могли просто выбрать столбец, чтобы последний использовавшийся ряд был крутым.Это далеко за мной.Я был бы счастлив, просто новый способ эффективного копирования / вставки.
Буду признателен за любую помощь, которую может предложить любой.дайте мне знать, что вы думаете.Спасибо Бумер

enter code here
   Sub import_data()
   '
   '
    'import_data
    '
    Application.ScreenUpdating = False
    '
   'Opens the txt file in excel - text delimited and leaves file open until 
   we close at bottom of code. There is no        'name for this workbook.

    Workbooks.OpenText (Module33.FileDir + "\cf_data.txt"), Origin:=437, _
    StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
    ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False _
    , Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), 
      _
     Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1)), 
   TrailingMinusNumbers:=True


  'The line below is where I'm selecting data from the current opened 
  workbook and copying to another workbook

   ActiveWindow.Sheet1.Range("A2:G2000").Copy 
    Destination:=Workbooks("Auto_Data.xlsm").Sheet2.Range       ("B6:H2000")



   'This info below is a (recorded marco).  All works if I rem out the above 
    line and open up all the below lines

    '    Range("A2:G2000").Select
    '    Selection.Copy
    '    Windows("Auto_Data.xlsm").Activate
    '    Sheet2.Select
   '    Range("B6:H6").Select
    '    ActiveSheet.Paste
    '    Selection.AutoFilter
    '    Application.CutCopyMode = False
    '    ActiveWindow.ActivateNext
    '    ActiveWindow.Close
    '    Range("B4").Select
    Application.ScreenUpdating = True

   End Sub

1 Ответ

0 голосов
/ 05 марта 2019

Прямая передача значений, как правило, быстрее копирования и использует меньше памяти, поскольку не требует буфера обмена.

Sub import_data()

    dim lr as long, arr as variant
    dim wb1 as workbook

    set wb1 = Workbooks.OpenText(filename:=Module33.FileDir & "\cf_data.txt"), Origin:=437, _
                                 StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
                                 ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False, _
                                 Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), _
                                 Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1)), 
                                 TrailingMinusNumbers:=True)

    with wb1.sheets(1)

        lr = .range("A:G").Find(what:="*", after:=.range("A1"), searchorder:=xlbyrows, _
                                searchdirection:=xlprevious).row
        .range(.cells(2, "A"), .cells(lr, "G")).value

    end with

    wb1.close

    Workbooks("Auto_Data.xlsm").Sheet2.Range("B6").resize(ubound(arr, 1), ubound(arr, 2)) = arr

end sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...