2016-10-10 15 views
0

Я пытаюсь пропустить файлы в папке, скопировать данные неизвестного размера из каждого файла и вставить их друг под друга в новую книгу. Кажется, я не могу заставить буфер обмена правильно вставлять, поскольку он всегда дает мне ошибку времени выполнения 9, Subscript выходит за пределы диапазона.Вставка буфера обмена в новую книгу VBA Macro

Sub LoopThroughFiles() 
    Dim StrFile As String 
    StrFile = Dir("filepath") 

    Dim wb As Excel.Workbook 
    Dim itemized As Excel.Workbook 
    Dim dump As Excel.Workbook 

    Do While Len(StrFile) > 0 
     MsgBox StrFile 
     Set dump = Workbooks.Open("dump.xlsx") 
     Set wb = Workbooks.Open("StrFile") 
     Set wb = ActiveWorkbook 

     Worksheets("DATA2").Visible = True 
     Worksheets("DATA2").Activate 
     Application.Goto Reference:="R1C1:R98C1" 
     Selection.EntireRow.Delete 
     Range("A1").Select 
     ActiveCell.CurrentRegion.Select 
     Selection.Copy 

     Application.Wait DateAdd("s", 1, Now()) 

     Set dump = ActiveWorkbook 
     ActiveWorkbook.Worksheets("Sheet1").Range("A1").Activate 
     ActiveCell.SendKeys ("^v") 
     StrFile = Dir 
    Loop 
End Sub 

ответ

1

Я вижу несколько вещей, которые потенциально могут возникнуть.

1) при открытии книги для «StrFile» вы имеете его в кавычки:

Set wb = Workbooks.Open("StrFile") 

Это означает, что вы в буквальном смысле ищет книгу под названием «StrFile.» Если вы удалите кавычки, вместо этого будет интерполировать содержимое переменной, которая, я считаю, вам нужна.

2) Неясно, какой документ вы хотите скопировать и вставить с и до. Ваше описание кажется достаточно ясным, но в вашем коде есть путаница. Вы ссылаетесь на «активные» объекты - лучше, я думаю, явно вызывать, какой объект вы хотите скопировать и вставить с и на.

Другими словами, заменить вызовы, когда вы назначаете ActiveWorkbook, и просто использовать книгу вместо

3) Строго говоря, это не неправильно сделать выбор/копировать/вставить, но вы можете пропустить шаг, сделав копию/вставку напрямую. Более того, вы можете избежать использования буфера обмена путем копирования одного диапазона на другой

4) Вы не просили, но, возможно, закрыть книгу, когда вы сделали с ним

Без внушения # 3, Вот как это может выглядеть:

Sub LoopThroughFiles() 
    Dim StrFile As String 
    StrFile = Dir("filepath") 

    Dim wb, itemized, dump As Excel.Workbook 
    Dim ws As Worksheet 

    Do While Len(StrFile) > 0 
     'MsgBox StrFile 
     Set dump = Workbooks.Open("dump.xlsx") 
     Set wb = Workbooks.Open(StrFile) 

     wb.Worksheets("DATA2").Activate ' specify which workbook directly 
     Application.Goto Reference:="R1C1:R98C1" 

     Selection.EntireRow.Delete 

     wb.Range("A1").Copy ' specify which wb to copy FROM 

     Application.Wait DateAdd("s", 1, Now()) 

     ' specify which workbook to copy TO 
     dump.Worksheets("Sheet1").Range("A1").PasteSpecial xlPasteValuesAndNumberFormats 

     wb.Close 

     StrFile = Dir 
    Loop 
End Sub 

с предложением № 3 вы можете устранить копировать/вставить что-то вроде этого:

dump.Worksheets("Sheet1").Range("A1").Value2 = wb.Range("A1").Value2 

Это может быть большой помощью, если другие аппликации ons пытаются использовать буфер обмена.

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