Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 05.08.2019
Сообщений: 48
1
Excel

Сохранение текущего листа с сохранением имени листа и присвоением новой книге имени текущего листа

08.09.2019, 13:43. Показов 1625. Ответов 11
Метки нет (Все метки)

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Sub Save_as()
    With Application.FileDialog(msoFileDialogSaveAs)
        .InitialFileName = ThisWorkbook.Path & "\" & "new book name"
        If .Show = 0 Then Exit Sub
        ThisWorkbook.ActiveSheet.Copy
        Application.DisplayAlerts = False
        .Execute
        Application.DisplayAlerts = True
    End With
    ActiveWorkbook.Close False
End Sub
Этот код предлагает сохранить текущий лист Excel как новую книгу в папке XLSTART, можно ли изменить его так, чтобы он
- предлагал сохранить новую книгу в той же папке, где находится активная книга (лист которой сохраняется как новая книга)
- предлагал в качестве имени новой книги имя текущего листа
- имя листа в новой книге осталось таким же, как и имя текущего листа?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.09.2019, 13:43
Ответы с готовыми решениями:

Копировать содержимое листа одной книги, на лист в новую книгу с присвоением ей имени листа из которого копировали
Всем доброго дня! Помогите пожалуйста написать код, сам не могу написать по причине отсутствия...

При создании нового листа произвести проверку на существование вводимого имени листа в текущей книге EXCEL
При создании нового листа, произвести проверку на существование вводимого имени листа в текущей...

Сохранение текущего листа Excel в отдельный файл
Доброго всем времени суток! Помогите справиться с небольшой проблемкой. Есть файл Excel с...

Сохранение листа книги в файле - проблема с защитой листа и привязкой макросов
С толкнулся с такой проблемой при сохранении листа в файле вот код который сохраняет лист в...

11
4116 / 2222 / 939
Регистрация: 01.12.2010
Сообщений: 4,625
08.09.2019, 15:07 2
Без предложений выбора и без проверок

Visual Basic
1
2
3
4
Private Sub Test()
    ThisWorkbook.ActiveSheet.Copy
    ActiveWorkbook.Close True, ThisWorkbook.Path & "\" & ActiveSheet.Name & ".xls"
End Sub
1
0 / 0 / 0
Регистрация: 05.08.2019
Сообщений: 48
08.09.2019, 18:54  [ТС] 3
pashulka,

Да, спасибо, работает, правда, присваивает новой книге имя "Лист1", но для меня были важны также и предложения
0
4116 / 2222 / 939
Регистрация: 01.12.2010
Сообщений: 4,625
08.09.2019, 18:59 4
CFShuhrat, Прочитайте название своей темы, там явно сказано, что имя книги = имя листа. Если же нужен ввод имени, то InputBox, а если выбор папки + имя, то один из вариантов Application.GetSaveAsFilename
1
0 / 0 / 0
Регистрация: 05.08.2019
Сообщений: 48
09.09.2019, 07:17  [ТС] 5
pashulka,

Быть может я был не точен в постановке вопроса, но сейчас я бы просил изменить исходный код

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Sub Save_as()
    With Application.FileDialog(msoFileDialogSaveAs)
        .InitialFileName = ThisWorkbook.Path & "\" & "new book name"
        If .Show = 0 Then Exit Sub
        ThisWorkbook.ActiveSheet.Copy
        Application.DisplayAlerts = False
        .Execute
        Application.DisplayAlerts = True
    End With
    ActiveWorkbook.Close False
End Sub
так, чтобы он предлагал сохранить новую книгу в той же папке, где расположена книга, лист которой копируется. А имя файла можно вписывать вручную.
0
4116 / 2222 / 939
Регистрация: 01.12.2010
Сообщений: 4,625
09.09.2019, 09:22 6
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Private Sub Test2()
    Dim p$, f As Variant
    p = ThisWorkbook.Path & "\"
    ChDrive Left(p, 1): ChDir p
    f = Application.GetSaveAsFilename( _
    ThisWorkbook.ActiveSheet.Name, "Excel Files (*.xls), *.xls")
    If f <> False Then
       ThisWorkbook.ActiveSheet.Copy
       ActiveWorkbook.Close True, f
    End If
End Sub
Visual Basic
1
2
3
4
5
6
7
8
9
Private Sub Test3()
    Dim f As Variant
    f = ThisWorkbook.Path & "\" & ThisWorkbook.ActiveSheet.Name
    f = Application.GetSaveAsFilename(f, "Excel Files (*.xls), *.xls")
    If f <> False Then
       ThisWorkbook.ActiveSheet.Copy
       ActiveWorkbook.Close True, f
    End If
End Sub
1
0 / 0 / 0
Регистрация: 05.08.2019
Сообщений: 48
09.09.2019, 10:06  [ТС] 7
pashulka, Да, спасибо Вам большое, оба кода работают
0
0 / 0 / 0
Регистрация: 05.08.2019
Сообщений: 48
11.09.2019, 06:29  [ТС] 8
pashulka, Оба кода не копируют лист, а создают пустой лист
0
4116 / 2222 / 939
Регистрация: 01.12.2010
Сообщений: 4,625
11.09.2019, 07:34 9
CFShuhrat,
Visual Basic
1
ThisWorkbook.ActiveSheet.Copy
очевидно, что везде копируется активный лист текущей книги, и если он пустой (например, если код находится в личной книге макросов Personal.xls(b)), то и результат будет аналогичен.

P.S. Обратите внимание, на то, что в первом примере также использовался именно этот лист, и изначально притензий к пустоте не было. Также можете посмотреть разницу между ThisWorkbook и ActiveWorkbook, возможно Вам нужна не текущая книга, а активная.
1
0 / 0 / 0
Регистрация: 05.08.2019
Сообщений: 48
11.09.2019, 08:12  [ТС] 10
pashulka,

Вот мой порядок действий:

1. копирую код Test2() с темы
2. создаю модуль в папке Modules в VBAProject (PERSONAL.XLSB) - в новом модуле сверху уже есть строчка Option Explicit - удаляю ее.
3. открыта одна книга, лист не пустой
4. Alt+F8: нет макроса Test2() ни в каких списках
5. удаляю слово Private в коде - макрос появился в списке Personal
6. запускаю макрос - создается новая книга с одним пустым листом
0
4116 / 2222 / 939
Регистрация: 01.12.2010
Сообщений: 4,625
11.09.2019, 09:08 11
CFShuhrat, Ещё раз, посмотрите разницу между thisworkbook и activeworkbook
1
0 / 0 / 0
Регистрация: 05.08.2019
Сообщений: 48
11.09.2019, 10:09  [ТС] 12
pashulka,

Замена ThisWorkbook.ActiveSheet.Copy на ActiveWorkbook.ActiveSheet.Copy в обоих кодах действительно помогла, огромное Вам спасибо!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.09.2019, 10:09

Проверить название текущего листа Excel
Здравствуйте Такая ситуация , как в Exel проверить название листа ? То есть проверить текущий...

Полное закрытие Excel, а не текущего листа
Если я последней строкой макроса делаю ActiveWindow.Close ' или ActiveWorkbook.Closeто остается...

Вставка строк с другого листа, между строками текущего
Есть 2 листа. Нужно скопировать диапазон строк с одного на другой и вставить между определенными...

Подсчёт общего количества листов и номера текущего листа
Я новичок в программировании на VBA поэтому не могу сам справиться с этим таском. Очень надеюсь на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.