Импортировать первый лист из папки, кроме одного именованного файла Импортировать второй лист - PullRequest
0 голосов
/ 10 июня 2019

Я хочу импортировать первый лист всех файлов в выбранной папке и переименовать в исходное имя файла, кроме одного.Если в этих файлах есть файл Forecast Report, я хочу скопировать второй лист.

Я пробовал код, который импортирует все листы из всех файлов, но это излишне, потому что я должен затем войти и удалить много дополнительных листов.Приведенный ниже код отлично подходит для импорта моих файлов.Я ищу способ добавить к этому «если существует прогнозный отчет, скопируйте 2-й лист».

Sub My Data()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False


Dim s As String

Application.ScreenUpdating = 0
With Application.FileDialog(msoFileDialogOpen)
    .Title = "Select all reports:"
    .Filters.Clear
    .Filters.Add "All Excel Files", "*.xl*"
    .AllowMultiSelect = True
    .Show
    If .SelectedItems.Count > 0 Then
        For i = 1 To .SelectedItems.Count
        Workbooks.Open.SelectedItems (i)

            Workbooks.Open .SelectedItems(i)

            With ActiveWorkbook
                s = .Name
                .Sheets(1).Copy     After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
                ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Name = Split(s, ".")(0)
                .Close 0
            End With
        Next


    End If
End With


Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub

1 Ответ

0 голосов
/ 10 июня 2019

Используйте оператор IF, чтобы проверить, является ли ActiveWorkbook.name "Forecast Report.xlsx" (при необходимости измените расширение). Если найдена копия .Sheets(2) и т. Д. Если не найдена, скопируйте .Sheets(1)

With ActiveWorkbook
    s = .Name

    If s = "Forecast Report.xlsx" Then
        .Sheets(2).Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
        ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Name = Split(s, ".")(0)

    Else
        .Sheets(1).Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
        ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Name = Split(s, ".")(0)

    End If

End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...