У меня есть значительное количество предметов, которые требуют разных форм для запроса. Выдержка из таблицы у меня выглядит так:

    1   2   3   4   5   6   7   8   9   10  11  12  13  14
A   -   -   C   -   -   -   -   -   C   -   -   -   -   -
B   -   -   -   -   C   -   C   -   -   -   -   -   -   C

Это означает, что для позиции AI необходимо приложить формы 3 и 9; для пункта B формы 5,7 и 14.

Можно ли создать рабочую книгу с заголовком элемента, который содержит соответствующие формы в виде листов.

(сами формы являются простыми листами Excel, которые можно переименовывать / манипулировать по мере необходимости)

Любая помощь будет принята с благодарностью, так как существуют сотни элементов и десятки форм, и поэтому импорт листов для каждого элемента в свою очередь будет чрезвычайно трудоемким!

Спасибо

2 ответа2

1

Спасибо всем, кто помог, это последний макрос, который я использовал:

Sub One()
'
'Create and open workbooks of title col a & .xls
Dim masterWB As Workbook
Set masterWB = ActiveWorkbook
Dim aName As String

'set last row of items
For item = 2 To 13
    aName = masterWB.Sheets(1).Cells(item, 1).Value
    Workbooks.Add
    ActiveWorkbook.SaveAs fileName:=aName & ".xls"
    Sheets(1).Name = "Comments"

'put forms of title row 1 in workbook of title col a & .xls
    Dim myWB As Workbook
    Set myWB = ActiveWorkbook
    Dim mySheet As String
    Sheets(1).Select
    mySheet = ActiveSheet.Name

Next
masterWB.Sheets(1).Activate

Dim workbookName As String
Dim formName As String
'insert range of forms
For Each onecell In Range("d2:ae13")
    If onecell = "C" Or onecell = "II" Then

        masterWB.Sheets(1).Activate
        workbookName = Cells(onecell.row, 1).Value
        workbookName = workbookName & ".xls"

        formName = Cells(1, onecell.Column).Value
        Sheets(formName).Select
        'MsgBox "WB: " & workbookName & " Form: " & formName & " Current: " & myWB.Name & ":" & mySheet
        ActiveWorkbook.Sheets(formName).Copy After:=Workbooks(workbookName).Sheets(1)



        'reset
        Windows(myWB.Name).Activate
        Sheets(mySheet).Select
        'MsgBox "Form: " & formName & " copied to Workbook " & workbookName
    End If
Next

End Sub
1

Сэм, вот начало того, как решить эту интересную проблему.

Я настроил рабочий лист, похожий на ваш, за исключением того, что я пометил столбцы именами форм и строки новыми именами рабочих листов, как вы можете видеть ниже:

Вы заметите, что таблица с условиями находится на первой вкладке, а формы - на других вкладках. Имена на вкладках в точности соответствуют именам форм в строке 1 таблицы.

Затем я перешел в режим разработчика и создал новый макрос. и ввел код:

Sub Macro1()
'
' Macro1 Macro
' Copy sheets into new workbooks
'
'

Dim myWB As Workbook
Set myWB = ActiveWorkbook
Dim mySheet As String
Sheets(1).Select
mySheet = ActiveSheet.Name

Dim workbookName As String
Dim formName As String
For Each onecell In Range("b2:d3")
    If onecell = "C" Then
        workbookName = Cells(onecell.Row, 1).Value
        formName = Cells(1, onecell.Column).Value
        Sheets(formName).Select
        'MsgBox "WB: " & workbookName & " Form: " & formName & " Current: " & myWB.Name & ":" & mySheet
        ActiveWorkbook.Sheets(formName).Copy After:=Workbooks(workbookName).Sheets(1)
        Windows(myWB.Name).Activate
        Sheets(mySheet).Select
        MsgBox "Form: " & formName & " copied to Workbook " & workbookName
    End If
Next

End Sub

Макрос in-situ выглядит следующим образом:

Этот код не выполняет все проверки, которые могут быть выполнены, и не включает создание новых рабочих книг (вы можете добавить это в свой макрос). Чтобы это работало, вам нужно создать и сохранить пустые рабочие книги с точными именами, указанными в первом столбце таблицы (например, Workbook1.xlsx и Workbook1.xlsx в моем примере). Эти книги должны быть открыты, чтобы код работал.

Наконец нажмите «Выполнить», чтобы выполнить макрос. Вы увидите следующее:

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

Это оно! Я надеюсь, что это поможет, и если вы измените код, чтобы найти лучшее решение, пожалуйста, опубликуйте его, чтобы мы все могли извлечь выгоду.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .