Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Названия файлов с добавлением суфиксов v.1, v.2, v.3.... - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Названия файлов с добавлением суфиксов v.1, v.2, v.3....
timo64uk Дата: Пятница, 11.10.2024, 04:13 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 121
Репутация: 1 ±
Замечаний: 0% ±

Office16
Добрый день!
[vba]
Код
Sheets(Array("НужныйЛист", "НужныйЛистТоже")).Copy
ActiveWorkbook.SaveAs [C11], FileFormat:=51
[/vba]
В активной книге беру 2 листа (НужныйЛист и НужныйЛистТоже).
Присваиваю этим не сохраненным, но уже открытым листам название новой книги из ячейки "C11" (исходный файл не трогаю, т.к. имена не мешают одновременному открытию.
Однако, при повторном проигрывании макроса возникает ошибка во второй строчке кода, т.к. файл с таким названием уже открыт.
Хочу избежать этой ошибки путем добавления к каждому последующему названию файла "v.1", "v.2",.. чтобы защититься от человеческого фактора.
Нашел подходящий код, но он сложен для меня и через встроенные Private Sub.
Можно ли как-то решить данную задачу внутри одного тела кода?
Типа проверка на открытые книги с таким названием, если нет открытых с таким именем, то сохраняем из ячейки C11, если есть открытые, то C11 & "v.1", если и с таким именем файл открыт, то "v.2".
Думаю пользователю хватит трех открытий.
К сообщению приложен файл: 8587.xlsx (9.9 Kb)
 
Ответить
СообщениеДобрый день!
[vba]
Код
Sheets(Array("НужныйЛист", "НужныйЛистТоже")).Copy
ActiveWorkbook.SaveAs [C11], FileFormat:=51
[/vba]
В активной книге беру 2 листа (НужныйЛист и НужныйЛистТоже).
Присваиваю этим не сохраненным, но уже открытым листам название новой книги из ячейки "C11" (исходный файл не трогаю, т.к. имена не мешают одновременному открытию.
Однако, при повторном проигрывании макроса возникает ошибка во второй строчке кода, т.к. файл с таким названием уже открыт.
Хочу избежать этой ошибки путем добавления к каждому последующему названию файла "v.1", "v.2",.. чтобы защититься от человеческого фактора.
Нашел подходящий код, но он сложен для меня и через встроенные Private Sub.
Можно ли как-то решить данную задачу внутри одного тела кода?
Типа проверка на открытые книги с таким названием, если нет открытых с таким именем, то сохраняем из ячейки C11, если есть открытые, то C11 & "v.1", если и с таким именем файл открыт, то "v.2".
Думаю пользователю хватит трех открытий.

Автор - timo64uk
Дата добавления - 11.10.2024 в 04:13
MikeVol Дата: Пятница, 11.10.2024, 08:26 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 378
Репутация: 81 ±
Замечаний: 0% ±

MSO LTSC 2021 EN
при повторном проигрывании макроса
А где этот макрос?


Ученик.
Одесса - Украина
 
Ответить
Сообщение
при повторном проигрывании макроса
А где этот макрос?

Автор - MikeVol
Дата добавления - 11.10.2024 в 08:26
timo64uk Дата: Пятница, 11.10.2024, 08:46 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 121
Репутация: 1 ±
Замечаний: 0% ±

Office16
макрос

В файле прикрепил макрос.
Название листа в новом файле звучит как "Название новой Книги (состоящей из НужныйЛист и НужныйЛистТоже) в этой ячейке"
При запуске второй раз макроса высккакивает ошибка, т.к. такое название уже имеет открытый файл.
К сообщению приложен файл: 8587.xlsm (14.5 Kb)
 
Ответить
Сообщение
макрос

В файле прикрепил макрос.
Название листа в новом файле звучит как "Название новой Книги (состоящей из НужныйЛист и НужныйЛистТоже) в этой ячейке"
При запуске второй раз макроса высккакивает ошибка, т.к. такое название уже имеет открытый файл.

Автор - timo64uk
Дата добавления - 11.10.2024 в 08:46
_Boroda_ Дата: Пятница, 11.10.2024, 09:33 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 16734
Репутация: 6534 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
если есть открытые, то C11 & "v.1", если и с таким именем файл открыт, то "v.2".
А если не открыт, но существует в закрытом виде? Спросит про перезапись.
Может, при каждом сохранении просто этим же макросом добавлять к тексту в ячейке С11 номер версии? К сожалению, файл с макросом скачать и посмотреть не могу, на работе запрет стоит, поэтому только общие слова


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
если есть открытые, то C11 & "v.1", если и с таким именем файл открыт, то "v.2".
А если не открыт, но существует в закрытом виде? Спросит про перезапись.
Может, при каждом сохранении просто этим же макросом добавлять к тексту в ячейке С11 номер версии? К сожалению, файл с макросом скачать и посмотреть не могу, на работе запрет стоит, поэтому только общие слова

Автор - _Boroda_
Дата добавления - 11.10.2024 в 09:33
timo64uk Дата: Пятница, 11.10.2024, 10:12 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 121
Репутация: 1 ±
Замечаний: 0% ±

Office16
посмотреть

там простой код из первого сообщения:
[vba]
Код
Sheets(Array("НужныйЛист", "НужныйЛистТоже")).Copy
ActiveWorkbook.SaveAs [C11], FileFormat:=51
[/vba]
Ячейка из текста, это готовый отчет и не хотелось бы его править.
 
Ответить
Сообщение
посмотреть

там простой код из первого сообщения:
[vba]
Код
Sheets(Array("НужныйЛист", "НужныйЛистТоже")).Copy
ActiveWorkbook.SaveAs [C11], FileFormat:=51
[/vba]
Ячейка из текста, это готовый отчет и не хотелось бы его править.

Автор - timo64uk
Дата добавления - 11.10.2024 в 10:12
_Boroda_ Дата: Пятница, 11.10.2024, 10:19 | Сообщение № 6
Группа: Админы
Ранг: Местный житель
Сообщений: 16734
Репутация: 6534 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Да не проблема, в отдельной пустой ячейке (например, в С12) белым текстом по белому фону пишите версию. Без буквы, просто цифра, к которой потом удобно будет прибавлять по единичке
[vba]
Код
ActiveWorkbook.SaveAs range("c11") & "_v." & range("c12"), FileFormat:=51
[/vba]
Кстати, при закрытии файла (или при открытии) ячейку с12 обнулять можно


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеДа не проблема, в отдельной пустой ячейке (например, в С12) белым текстом по белому фону пишите версию. Без буквы, просто цифра, к которой потом удобно будет прибавлять по единичке
[vba]
Код
ActiveWorkbook.SaveAs range("c11") & "_v." & range("c12"), FileFormat:=51
[/vba]
Кстати, при закрытии файла (или при открытии) ячейку с12 обнулять можно

Автор - _Boroda_
Дата добавления - 11.10.2024 в 10:19
MikeVol Дата: Пятница, 11.10.2024, 10:25 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 378
Репутация: 81 ±
Замечаний: 0% ±

MSO LTSC 2021 EN
timo64uk, Ну если файлы открыты будут то можно вот этот код использовать: [vba]
Код
Option Explicit

Sub Макрос2()
    Dim SuffixVersion As Long

    Dim filePath    As String
    filePath = ThisWorkbook.Worksheets("НужныйЛист").Range("C11").Value

    Dim maxVersions As Long
    maxVersions = 3

    Dim newFileName As String
    newFileName = filePath & " v.1.xlsx"

    While IsWorkbookOpen(newFileName) And SuffixVersion < maxVersions
        SuffixVersion = SuffixVersion + 1
        newFileName = filePath & " v." & SuffixVersion & ".xlsx"
    Wend

    If SuffixVersion = maxVersions And IsWorkbookOpen(newFileName) Then
        MsgBox "Достигнуто максимальное число версий. Файл не был сохранен.", vbExclamation
        Exit Sub
    End If

    Sheets(Array("НужныйЛист", "НужныйЛистТоже")).Copy
    ActiveWorkbook.SaveAs newFileName, FileFormat:=51
End Sub

Function IsWorkbookOpen(wbName As String) As Boolean
    On Error Resume Next
    IsWorkbookOpen = Not (Workbooks(wbName) Is Nothing)
    On Error GoTo 0
End Function
[/vba] В противном случае необходимо будет сделать ещё дополнительную проверку что
если не открыт, но существует


Ученик.
Одесса - Украина
 
Ответить
Сообщениеtimo64uk, Ну если файлы открыты будут то можно вот этот код использовать: [vba]
Код
Option Explicit

Sub Макрос2()
    Dim SuffixVersion As Long

    Dim filePath    As String
    filePath = ThisWorkbook.Worksheets("НужныйЛист").Range("C11").Value

    Dim maxVersions As Long
    maxVersions = 3

    Dim newFileName As String
    newFileName = filePath & " v.1.xlsx"

    While IsWorkbookOpen(newFileName) And SuffixVersion < maxVersions
        SuffixVersion = SuffixVersion + 1
        newFileName = filePath & " v." & SuffixVersion & ".xlsx"
    Wend

    If SuffixVersion = maxVersions And IsWorkbookOpen(newFileName) Then
        MsgBox "Достигнуто максимальное число версий. Файл не был сохранен.", vbExclamation
        Exit Sub
    End If

    Sheets(Array("НужныйЛист", "НужныйЛистТоже")).Copy
    ActiveWorkbook.SaveAs newFileName, FileFormat:=51
End Sub

Function IsWorkbookOpen(wbName As String) As Boolean
    On Error Resume Next
    IsWorkbookOpen = Not (Workbooks(wbName) Is Nothing)
    On Error GoTo 0
End Function
[/vba] В противном случае необходимо будет сделать ещё дополнительную проверку что
если не открыт, но существует

Автор - MikeVol
Дата добавления - 11.10.2024 в 10:25
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!