2015-02-11 2 views
-2

Я работаю над автоматизацией книги в Excel, и у меня возникает несколько проблем с кодом VBA. Я бы вставлял его здесь, но я прошел через так много итераций, это довольно непригодно.Excel VBA - вытащить данные из внешних книг и вставить в следующую пустую строку на нескольких вкладках

Цель состоит в том, чтобы активная книга «захватывала» данные из нескольких книг, содержащих необработанные данные, когда она открыта, и помещала скопированные данные в несколько вкладок, которые можно использовать для заполнения различных диаграмм на вкладке панели инструментов , Каждая рабочая книга, содержащая необработанные данные, должна войти в отдельную вкладку в активной книге. Разбитый на шаги, я имею в виду, мне нужен ниже процесс происходит:

  • Открыть Активные книги
  • Открыть скрытые вкладки «Лист1»
  • Открыть исходные данные книга 1 (например, C: \ Raw data.xls)
  • копирования данных из указанного места (например, [Raw data.xls] Лист1 $ A $ 3: $ AE $ 64) в необработанной книге данных 1
  • Вставить скопированные данные в активную книгу, в конкретный лист, в первый пустой строка (например [Active Book.xls] Sheet1! первая пустая строка)
  • Скрыть вкладку «Лист1» в активной книге
  • Закрыть Необработанные данные книги 1
  • процесс Repeat с использованием исходных данных книги 2 и sheet2 Активного книги
  • процесс Repeat с использованием сырой книги данных 3 и Лист3 Активного книги
  • только после данных заполняется в закладках назначения (Лист1, Лист2, Лист3 в активной книге), может взаимодействовать пользователь (нажмите на ячейки, вкладки изменения и т.д.) с книгой

Я знаю, что это просто - Я расстраиваюсь, поскольку я новичок и синтаксис (и множественные варианты синтаксиса) действительно бросает меня за цикл. Любая помощь будет принята с благодарностью. Спасибо заранее!!

ответ

3

Куда вы застреваете? Кратко:

Открыть Активный Книга

Если его активным, он уже открыт? Ссылка с объектом «» ThisWorkbook

Открыть скрытую вкладку «Лист1»

Вам не нужно, чтобы отобразить листы «VBA» их ... Если вы собираетесь создавать новые листы для каждого файла данных я рекомендую создать новый с помощью:

Set wsDestination = thisworkbook.sheets.add 
wsDestination.visible = xlSheetHidden ' Might as well hide it now 

Если вы желаете, чтобы соответствовать конкретным файлам исходных данных с конкретными рабочими листами, может использовать «выбрать»

Открытая книга данных 1 (например, C: \ Raw data.xls)

Set wbSource = Application.Workbooks.Open("c:\Raw Data.xls") 
Set wsSource = wbSource.sheets(1) 

'If need Select (see above): 
Select case wbSource.name 
    Case "Raw Data A.xls" ' If line above changes to .Open(Workbooks[i]) or something 
     set wsDestination = sheet1 
    Case "Raw Data B.xls" 
     set wsDestination = sheet2 
    '... 
End Select 

Копирование данных из указанного места (например,[Raw Data.xls] Sheet1! $ A $ 3: $ AE $ 64) в исходной книге данных 1 Вставьте скопированные данные в Активную книгу на конкретный рабочий лист в первую пустую строку (например, [Active Book.xls] Sheet1! первая пустая строка)

intBlankRow = Application.WorksheetFunction.Counta(wsDestination.columns(1)) + 1 ' Note this only works if there are no blanks in column 1 otherwise you'll need another method: there are some good tricks if you google "find last cell vba" 
wsSource.cells.copy wsDestination.cells(intBlankRow,1) ' No need to copy and paste in seperate lines: you can just pass destination to the copy function 

Скрыть вкладку 'Лист1' в активной книге

Вам не нужно

Закрыть необработанные данные книги 1

wbSource.close

процесс повторного использования сырых данных книги 2 и sheet2 Активного книги Repeat процесса с использованием сырой книги данных 3 и Лист3 Активного книги только после данных заполняется в закладках назначения (Лист1, Лист2, Лист3 в Активная Book), может взаимодействовать пользователь (нажмите на ячейки, изменение вкладок и т.д.) с книгой

Оберните все это в большой цикл ... Если вы хотите сделать это легко, создайте массив с именами вашей книги и пройдите через него. В противном случае вы можете указать пользователю FileDialogue, чтобы они могли выбирать книги, которые они хотят импортировать ... это зависит от того, что я говорил выше: хотите ли вы каждый раз создавать новые рабочие листы или импортировать определенные исходные данные в конкретные листы. .

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