Новости:

Новая редакция правил форума: 2.4. Если вопрос или ответ содержится во вложенном файле, все-равно кратко описывайте в сообщении вопрос или суть решения. Это необходимо, чтобы тему можно было найти через поиск.

Главное меню

Чуть-чуть доработать макрос

Автор alexexcel, 14.11.2013, 19:27

« назад - далее »

alexexcel

Помогите, пожалуйста! У меня есть такой макрос, который переносит все листы в выбранных (и при этом неоткрытых) экселевских файлах в один экселевский файл (из которого и запускается этот макрос). Как сделать, чтобы переносились не все листы, а только те, которые имеют название "3.8"?

Sub CombineWorkbooks()
    Dim FilesToOpen
    Dim x As Integer

    On Error GoTo ErrHandler
    Application.ScreenUpdating = False

    FilesToOpen = Application.GetOpenFilename _
      (FileFilter:="Microsoft Excel Files (*.xls), *.xls", _
      MultiSelect:=True, Title:="Files to Merge")

    If TypeName(FilesToOpen) = "Boolean" Then
        MsgBox "No Files were selected"
        GoTo ExitHandler
    End If

    x = 1
    While x <= UBound(FilesToOpen)
        Workbooks.Open Filename:=FilesToOpen(x)
        Sheets().Move After:=ThisWorkbook.Sheets _
          (ThisWorkbook.Sheets.Count)
        x = x + 1
    Wend

ExitHandler:
    Application.ScreenUpdating = True
    Exit Sub

ErrHandler:
    MsgBox Err.Description
    Resume ExitHandler
End Sub

kuklp

    While x <= UBound(FilesToOpen)
        Workbooks.Open Filename:=FilesToOpen(x)
        Sheets("3.8").Move After:=ThisWorkbook.Sheets _
          (ThisWorkbook.Sheets.Count)
        x = x + 1
    Wend
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

alexexcel

Спасибо! У меня была такая мысль, но я был уверен, что настолько просто не бывает.

alexexcel

Если можно, еще вопрос по этому же поводу. Sheets("3.8") выбирает листы с названием 3.8. А почему выдает ошибку Sheets("3.8*") ? Моя цель - чтобы выбирались листы, названия которых начинаются на "3.8"
Вроде бы звездочка используется в ВБ именно для этих целей?

Poltava

Вы используете * не в том контексте. В данном случае вы обращаетесь к конкретному листу по его ИМЕНИ имя листа не может содержать *. Работайте с именем листа. к примеру так перебирая эту конструкцию в цикле.
if left(Sheets(i).name,3)="3.8" then ...
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.

alexexcel

Спасибо, это смог сделать. Теперь осталась последняя вещь - чтобы файл, который открылся и из которого был выбран лист, закрылся бы, прежде чем макрос перейдет к открытию следующего файла. Перебрал кучу вариантов, самым логичным из которых был
Workbooks.Close Filename:=FilesToOpen(x)
но не получается.

kuklp

alexexcel, вообще-то в своих темах принято отписываться. И не только тогда, когда Вам еще что-нибудь понадобилось.
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

alexexcel

Прошу прощения, но я сообщил, что у меня получилось. Как только получилось, так сразу и сообщил (и сразу возникла следующая проблема, о которой и написал). Согласен, получилось у меня не очень быстро, но я удивлен, что вообще получилось.
"Спасибо" в отдельном сообщении я не говорю, чтобы не засорять форум (это часто не приветствуется).

kuklp

ОФФТОП
Ну-ка, пожалуйста, приведите ссылку хоть на один форум, где слово "Спасибо" не приветствуется. Я буду всем последующим поколениям форумчан давать ее 8)
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

alexexcel

Ну что ж, разве что ради следующих поколений :) Пришлось напрячь память и вспомнить по крайней мере один уважаемый форум:

http://4pda.ru/forum/index.php?s=41c42ed9a3b8aabfc838988bc3cab748&act=boardrules

пункт 5.1