Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 17.10.2014
Сообщений: 10
1

Автонумерация вновь созданных книг

17.10.2014, 09:59. Показов 1178. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите как реализовать: есть файл-шаблон, при выполнении макроса на котором, сохраняется копия книги с именем из ячейки A1. В имени есть порядковый номер в формате "0000". Этот номер вводится руками исходя из последнего номера файла в папке. Как сделать так, чтобы в файл-шаблоне сохранялся последний введенный порядковый номер и при повторном открытии к нему прибавлялся 1 ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.10.2014, 09:59
Ответы с готовыми решениями:

Автоматическое переименование вновь созданных файлов
Ребята, существует ли прога которая могла бы в автоматическом режиме переименовывать вновь...

Вновь потоки и вновь я не знаю что делать
Привет! Есть 10 потоков, каждый из которых должен отправлять запрос Вот, как отправляю сам...

Касперский вновь и вновь находит вирус
Здравствуйте! Установлен Kaspersky Internet Security 2016. Находит вирус...

Почему в виртуальных приводах созданных в ultraiso не отображаются значки созданных приводов
Скажите, пожалуйста, почему в виртуальных приводах созданных в ultraiso не отображаются значки...

16
2785 / 717 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
17.10.2014, 10:15 2
Уточните, пожалуйста, следующие моменты:
- В какой папке сохраняются копии?
- Макрос находится в самом файле-шаблоне?
- Какое расширение у файлов?
- Какая версия Excel используется?
0
0 / 0 / 0
Регистрация: 17.10.2014
Сообщений: 10
17.10.2014, 10:23  [ТС] 3
- В какой папке сохраняются копии?
в папке, в которой находится файл-шаблон
- Макрос находится в самом файле-шаблоне?
да
- Какое расширение у файлов?
xls
- Какая версия Excel используется?
2003 офис
0
Заблокирован
17.10.2014, 10:34 4
Цитата Сообщение от cfhdf Посмотреть сообщение
сохраняется копия книги
1. Копия самого шаблона?
2. Сам макрос тоже должен быть в копии?
3. Сколько листов в оригинале и все ли надо копировать?
0
0 / 0 / 0
Регистрация: 17.10.2014
Сообщений: 10
17.10.2014, 10:46  [ТС] 5
1. Копия самого шаблона?
Оригинальная книга и есть файл-шаблон
2. Сам макрос тоже должен быть в копии?
Макрос автонумерации в копии быть не должен
3. Сколько листов в оригинале и все ли надо копировать?
Листов 6 штук, копировать нужно все
0
2785 / 717 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
17.10.2014, 11:14 6
Попробуйте этот код:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Sub SaveCopy()
    Dim pathname$, filename$, prefix$, number&, counter&
    
    pathname = ThisWorkbook.path
    If Len(pathname) > 3 Then pathname = pathname & "\"
    filename = Dir(pathname & "*.xls", vbNormal)
    counter = 0
    With CreateObject("VBScript.RegExp")
        .IgnoreCase = True
        prefix = ThisWorkbook.Worksheets(1).[A1]
        .Pattern = "^" & prefix & "\d{4}.xls$"
        Do While filename <> ""
            If (GetAttr(pathname & filename) And vbNormal) = vbNormal Then
                If .Test(filename) Then
                    number = CLng(Mid$(filename, Len(prefix) + 1, 4))
                    If number > counter Then counter = number
                End If
            End If
            filename = Dir
        Loop
        counter = counter + 1
        filename = prefix & Format(counter, "0000") & ".xls"
    End With
    ThisWorkbook.SaveCopyAs pathname & filename
End Sub
Не до конца уверен, есть ли метод .SaveCopyAs в Office 2003
1
Заблокирован
17.10.2014, 11:15 7
Visual Basic
1
2
3
4
5
6
7
8
Sub макрос_в_шаблоне()
ThisWorkbook.Worksheets.Copy
With ThisWorkbook.Worksheets("Лист1") 'предполагается, что в Лист1 хранится имя новой книги в формате Имя####
  ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & .Cells(1) & ".xls"
  ActiveWorkbook.Close
  .Cells(1) = Left$(.Cells(1), Len(.Cells(1)) - 4) & Format$(Right$(.Cells(1), 4) + 1, "0000")
End With
End Sub
1
2785 / 717 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
17.10.2014, 11:41 8
То же самое, с подробными комментариями:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Sub SaveCopy()
    Dim pathname$, filename$, prefix$, number&, counter&
    
    ' Путь к папке с текущей книгой использовать для сохранения копий
    pathname = ThisWorkbook.path
    ' Добавить '\' к пути, если файл не в корневом каталоге
    If Len(pathname) > 3 Then pathname = pathname & "\"
    ' Получить префикс названия файлов из A1 на первом листе
    prefix = ThisWorkbook.Worksheets(1).[A1]
    ' Занулить счетчик нумерации копий
    counter = 0
    ' Использовать неименованный объект RegExp
    With CreateObject("VBScript.RegExp")
        ' Сравнение игнорирует регистр букв
        .IgnoreCase = True
        ' Шаблон проверки - регулярное выражение
        .Pattern = "^" & prefix & "\d{4}.xls$"
        ' Начать просмотр папки по шаблону *.xls
        filename = Dir(pathname & "*.xls", vbNormal)
        Do While filename <> ""
            ' Удостовериться, что у нас не папка, подходящая под шаблон
            If (GetAttr(pathname & filename) And vbNormal) = vbNormal Then
                ' Проверить файл на соответствие шаблону
                If .Test(filename) Then
                    ' Получить номер копии файла
                    number = CLng(Mid$(filename, Len(prefix) + 1, 4))
                    ' Сохранить максимальный номер копии
                    If number > counter Then counter = number
                End If
            End If
            ' К следующему файлу
            filename = Dir
        Loop
        ' Перевести счетчик на следующий номер
        counter = counter + 1
        ' сформировать новое имя файла
        filename = prefix & Format(counter, "0000") & ".xls"
    End With
    ' Сохранить копию файла с увеличенным на единицу счетчиком
    ThisWorkbook.SaveCopyAs pathname & filename
End Sub
Добавлено через 13 минут
Чтобы копии не содержали этот макрос, переделал концовку по принципу примера от Апострофф:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Sub SaveCopy()
    Dim pathname$, filename$, prefix$, number&, counter&
    
    ' Путь к папке с текущей книгой использовать для сохранения копий
    pathname = ThisWorkbook.path
    ' Добавить '\' к пути, если файл не в корневом каталоге
    If Len(pathname) > 3 Then pathname = pathname & "\"
    ' Получить префикс названия файлов из A1 на первом листе
    prefix = ThisWorkbook.Worksheets(1).[A1]
    ' Занулить счетчик нумерации копий
    counter = 0
    ' Использовать неименованный объект RegExp
    With CreateObject("VBScript.RegExp")
        ' Сравнение игнорирует регистр букв
        .IgnoreCase = True
        ' Шаблон проверки - регулярное выражение
        .Pattern = "^" & prefix & "\d{4}.xls$"
        ' Начать просмотр папки по шаблону *.xls
        filename = Dir(pathname & "*.xls", vbNormal)
        Do While filename <> ""
            ' Удостовериться, что у нас не папка, подходящая под шаблон
            If (GetAttr(pathname & filename) And vbNormal) = vbNormal Then
                ' Проверить файл на соответствие шаблону
                If .Test(filename) Then
                    ' Получить номер копии файла
                    number = CLng(Mid$(filename, Len(prefix) + 1, 4))
                    ' Сохранить максимальный номер копии
                    If number > counter Then counter = number
                End If
            End If
            ' К следующему файлу
            filename = Dir
        Loop
        ' Перевести счетчик на следующий номер
        counter = counter + 1
        ' сформировать новое имя файла
        filename = prefix & Format(counter, "0000") & ".xls"
    End With
    ' Сохранить копию файла без макроса:
    ThisWorkbook.Worksheets.Copy ' Копировать
    ActiveWorkbook.SaveAs pathname & filename ' Сохранить
    ActiveWorkbook.Close ' Закрыть
End Sub
0
0 / 0 / 0
Регистрация: 17.10.2014
Сообщений: 10
17.10.2014, 12:32  [ТС] 9
Апострофф,
Visual Basic
1
2
3
4
5
6
7
8
Sub макрос_в_шаблоне()
ThisWorkbook.Worksheets.Copy
With ThisWorkbook.Worksheets("Лист1") 'предполагается, что в Лист1 хранится имя новой книги в формате Имя####
  ActiveWorkbook.SaveAs [B]Filename:=[/B] ThisWorkbook.Path & "\" & .Cells(1) & ".xls"
  ActiveWorkbook.Close
  .Cells(1) = Left$(.Cells(1), Len(.Cells(1)) - 4) & Format$(Right$(.Cells(1), 4) + 1, "0000")
End With
End Sub
В методе SaveAs добавил Filename:=, но выдает выдает ошибку на следующей строке. см приложение

mc-black,
Чуть позже разберусь... много кода
Вложения
Тип файла: xls Лист Microsoft Excel.xls (24.0 Кб, 6 просмотров)
0
Заблокирован
17.10.2014, 13:16 10
cfhdf,
Цитата Сообщение от Апострофф Посмотреть сообщение
'предполагается, что в Лист1 хранится имя новой книги в формате Имя####
У вас же на лист3 и совсем не
Цитата Сообщение от cfhdf Посмотреть сообщение
В имени есть порядковый номер в формате "0000"
Я пробовал начальное значение Лист1![A1]="Имя0000" и все получалось.

Добавлено через 4 минуты
Да и макрос вы исказили, будьте внимательнее.
0
0 / 0 / 0
Регистрация: 17.10.2014
Сообщений: 10
17.10.2014, 14:12  [ТС] 11
Апострофф,
Извиняюсь, пробовал на своём рабочем файле - не получилось, скопировал в новый и забыл за Лист1
В моём случае имя файла состоит из: [0000] + каждый раз уникальное имя. К моему сожалению ваш пример не много не подходит для этих целей
0
Заблокирован
17.10.2014, 14:24 12
Цитата Сообщение от cfhdf Посмотреть сообщение
+ каждый раз уникальное имя
Откуда, если не секрет, оно берется?
0
2785 / 717 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
17.10.2014, 14:25 13
Приведите примеры названий файлов и примеры значений в [A1] им соответствующие.

Цитата Сообщение от cfhdf Посмотреть сообщение
Чуть позже разберусь... много кода
Возможно мой код подходит. Как насчет проверить это, не зря же я вам это написал?
0
0 / 0 / 0
Регистрация: 17.10.2014
Сообщений: 10
17.10.2014, 15:20  [ТС] 14
mc-black, Апострофф,
Извините за долгий ответ, прилаживаю свой реальный пример
Вложения
Тип файла: xls Лист Microsoft Excel (2).xls (20.5 Кб, 7 просмотров)
0
0 / 0 / 0
Регистрация: 17.10.2014
Сообщений: 10
18.10.2014, 13:05  [ТС] 15
mc-black,
Ваш код для моей задачи не подходит, я правильно понимаю? Фиксированная длина имени не подходит в моей случае?
0
Заблокирован
20.10.2014, 07:11 16
Serj
Цитата Сообщение от cfhdf Посмотреть сообщение
В имени есть порядковый номер в формате "0000"
Цитата Сообщение от Лист Microsoft Excel (2)
1 Люда
Где я вижу формат "0000"?
Какого Васю, Петю, Люду вставлять в имя? Если Вы сами не знаете, что хотите, как об этом узнают пытающиеся Вам помочь?
0
0 / 0 / 0
Регистрация: 17.10.2014
Сообщений: 10
20.10.2014, 15:18  [ТС] 17
Апострофф,
Неправильно сформулировал: имел ввиду, что максимальный порядковый номер может быть 9999.
Имя берется из ячеек В2(как порядковый номер, увеличивающийся на 1 при выполнении сохранения) и C2(как значение из диапазона E2:E100)
0
20.10.2014, 15:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.10.2014, 15:18
Помогаю со студенческими работами здесь

Покупка книг в оригинале - правда ли, что нет книг по программированию в твердой обложке?
Вопрос к тем, кто часто покупает книги на английском. Решил купить книгу на англ. что бы asp.net...

Можно ли обеспечить взаимодействие программно созданных объектов и объектов, созданных мастером
Здравствуйте. Изучаю C# и ADO.NET и столкнулся с одной серьезной проблемой, которая мешает...

Сколькими способами можно расставить 12 книг на 3 полках, если на одной полке вмещается 6 книг?
Сколькими способами можно расставить 12 книг на 3 полках, если на одной полке вмещается 6 книг?

Создайте файл каталог книг. Найдите специальность, по которой имеется наибольшее число книг
Файл « Каталог книг » ( Создайте этот файл ). Структура записи: - Автор (40 знаков); -...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru