2016-08-30 13 views
1

фонаIterate Through Workbook; Копирование и вставка данные в новую книгу

Я получаю кучу книг Excel (санкционированные расходы) от различных подразделений ДЕЛОВЫХ по всему миру. Моя цель - создать макрос, который открывает каждую рабочую книгу БИЗНЕСА, копировать данные о расходах и вставлять его в основной файл для удобства сравнения.

ПРОЦЕСС

  1. Создать закладку для каждой бизнес-единицы в TARGET_WORKBOOK (это делается за пределами макро)

  2. Для каждой вкладки в TARGET_WORKBOOK, есть некоторые мета-данные который помогает макросу при навигации по правильному пути к файлу BUSINESS UNIT (SOURCE_WORKBOOK)

  3. Открыть правильно SOURCE_WORKBOOK и перейдите к «Auth Expense данных запись» Вкладка внутри Копирование данных SOURCE_WORKBOOK
  4. от SOURCE_WORKBOOK до TARGET_WORKBOOK, ясно буфер обмена кэш, близкий SOURCE_BOOK
  5. ВЫПУСКА - Переход к следующей вкладке в SOUCE_WORKBOOK и повторите Шаг 1

КОД

Sub AllUnits() 

Dim Current As Worksheet 

'For every worksheet in workbook, call AuthExpense function 
For Each Current In ThisWorkbook.Worksheets 
Call AuthExpense(Current) 
Next Current 

End Sub 


Sub AuthExpense(Current As Worksheet) 

Dim Target_Workbook As Workbook 
Dim Source_Workbook As Workbook 
Dim Source_Path As String 


'Configure macro for business-specific unit 
BusinessUnit = ActiveSheet.Name 
BusinessName = ActiveSheet.Cells(2, 2) 

'Declare Target & Source workbooks w/ relative paths 
Set Target_Workbook = ThisWorkbook 
Source_Path = ThisWorkbook.Path & "\Business Unit Monthly Reporting Template_" & BusinessName & ".xlsx" 
Set Source_Workbook = Workbooks.Open(Source_Path) 

'Copy Source Workbook to Target Workbook 
Source_Workbook.Sheets("Auth Expense Data Entry").Range("A1:H150").Copy 

'Paste Special Source data to Target workbook 
Target_Workbook.Sheets(BusinessUnit).Range("A5").PasteSpecial Paste:=xlPasteValues 

'Clear clipboard cache and close 
Application.CutCopyMode = False 
Source_Workbook.Close (False) 


End Sub 

ПРИМЕЧАНИЕ

  • Я могу успешно открыть, копировать, вставить, очистить кэш буфера обмена, и закройте книгу бизнес-единицы.

ВОПРОСЫ

  1. Мои вопросы происходит в функции перекручивание/итерации ("AllUnits()"). Когда макрос запускается, файл Master Excel копирует/вставляет те же данные бизнес-единицы 10 раз (на том же рабочем листе, переписывая себя). Я считаю, что моя проблема возникает, когда я пытаюсь перейти к следующей вкладке в главном файле. Какие-либо предложения?
+1

В вашем подпункте AuthExpense измените все ссылки на 'ActiveSheet' на' Current', и он должен работать. – Kyle

+0

Когда я меняю «Активный» на «Текущий», макрос только проходит через одну итерацию. Почему это происходит? – jonplaca

ответ

1

Ваш AllUnits() не имеет проблем. Он должен просто прокручивать листы в рабочей книге, в которой он находится. Вы должны изменить ваш подканал AuthExpense, чтобы не ссылаться на ActiveSheet. Вы никогда не активируете лист в своем AllUnits(), поэтому следующий лист не является активным. Используйте ниже.

Sub AllUnits() 

Dim Current As Worksheet 

'For every worksheet in workbook, call AuthExpense function 
For Each Current In ThisWorkbook.Worksheets 
Call AuthExpense(Current) 
Next Current 

End Sub 


Sub AuthExpense(Current As Worksheet) 

Dim Target_Workbook As Workbook 
Dim Source_Workbook As Workbook 
Dim Source_Path As String 


'Configure macro for business-specific unit 
BusinessUnit = Current.Name 
BusinessName = Current.Cells(2, 2) 

'Declare Target & Source workbooks w/ relative paths 
Set Target_Workbook = ThisWorkbook 
Source_Path = ThisWorkbook.Path & "\Business Unit Monthly Reporting Template_" & BusinessName & ".xlsx" 
Set Source_Workbook = Workbooks.Open(Source_Path) 

'Copy Source Workbook to Target Workbook 
Source_Workbook.Sheets("Auth Expense Data Entry").Range("A1:H150").Copy 

'Paste Special Source data to Target workbook 
Target_Workbook.Sheets(BusinessUnit).Range("A5").PasteSpecial Paste:=xlPasteValues 

'Clear clipboard cache and close 
Application.CutCopyMode = False 
Source_Workbook.Close (False) 


End Sub 
+1

FWIW - 'Target_Workbook.Sheets (BusinessUnit)' может быть заменен на 'Current' (потому что' BusinessUnit' был установлен как имя текущего листа в ThisWorkbook, а 'Target_Workbook' был установлен в' ThisWorkbook'). – YowE3K

+0

Когда я меняю «Активный» на «Текущий», макрос только циклически проходит через одну итерацию. Furethermore, похоже, что теперь он добавляет мой Windows USERNAME в путь к файлу. Почему это происходит? – jonplaca

+0

Сколько листов находится в рабочей книге, в которой находится этот код? Получаете ли вы какие-либо ошибки? – Kyle

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