2017-02-21 25 views
0

Итак, я пытаюсь закончить макрос, который выбирает все листы с похожими именами и перемещает их до определенного листа в книге. Пользователь может добавить столько страниц с этими именами, чтобы я не мог просто использовать функцию массива для их перемещения. Это то, что я до сих пор:Переместить страницы с похожим именем в книге

Sub Copier() 

Application.DisplayAlerts = False 
Application.ScreenUpdating = False 


Dim x As Integer 
x = InputBox("Enter Number of Additional Features") 
For numtimes = 1 To x 
ActiveWorkbook.Sheets(Array("Data Collection", "Findings", "Visual Findings")).Copy _ 
Before:=ActiveWorkbook.Sheets("Final Results") 
    'Allows user to create as many pages as necessary 

Dim ws As Worksheet, flg As Boolean 
For Each ws In Worksheets 
    If (ws.Name) Like "*Data Collection*" Then 
     ws.Select Not flg 
     flg = True 
End If 
Next 
'Selects all sheets for "Data Collection" 
'Now I need to move all of those selected before a certain sheet at the 
    beginning of the workbook 
'I cant seperate the copy functions because some formulas from data collection have to carry 
over to the other copied sheets 

'Sheet2.Activate 
Application.DisplayAlerts = True 
Application.ScreenUpdating = True 
End Sub 
+2

Как вы определяете «Подобное название»? «Выводы» аналогичны «Визуальным выводам»? Возможно, было бы лучше заявить, что вы хотите получить определенную страницу («Итоговые результаты»?) * После * всех других листов? – BruceWayne

+0

Страницы сбора данных, созданные пользователем, должны приближаться к началу отчета. Существуют и другие страницы до и после созданных страниц, не связанных с этим. Я пытаюсь направить все страницы сбора данных до начала, чтобы мои пользователи могли заполнить их, не пропуская весь отчет. –

ответ

0

Вы можете использовать:

Dim sheetNames As String 
Dim ws As Worksheet, flg As Boolean 
For Each ws In Worksheets 
    If ws.Name Like "*Data Collection*" Then sheetNames = sheetNames & "|" 
Next 

If sheetNames <>"" Then ActiveWorkbook.Sheets(Split(Left(sheetNames, Len(sheetNames) - 1),"|").Move Before:=ActiveWorkbook.Sheets("Final Results") 
+0

я понял это происходит в другом направлении: –

+0

Dim numtimes As Integer Dim х As Integer Dim у As String х = InputBox ("Введите количество дополнительных функций") Для numtimes = 1 Для х ActiveWorkbook.Sheets (Array («Сбор данных», «ILI vs NDE», «Screen Shot»)). Копировать _ До: = ActiveWorkbook.Sheets («MPI») Если numtimes> 1 Then y = "Сбор данных (" & numtimes & ")" Другое: y = "Сбор данных" Конец Если Рабочие листы («Сбор данных (« & num + + 1 & »)» Перемещение _ После: = Рабочие листы (y) –