Страницы: 1
RSS
При сохранении отдельных листов книги имя книги брать из текста ячейки
 
Коллеги, я нашла здесь полезный макрос, совсем немного изменила под себя
Код
Sub SplitSheets2()
    Dim s As Worksheet
    Dim wb as Workbook
    Set wb = ActiveWorkbook
    For Each s In wb.Worksheets                 'проходим во всем листам активной книги
     s.Copy                         'сохраняем лист как новый файл
     ActiveWorkbook.SaveAs wb.Path & "\"  & s.Range("A22") & ".xls"  'сохраняем файл
    Next
End Sub

но что нужно сделать, чтобы при сохранении названием  листов было не просто значение ячейки А22, а например
Код
=ЛЕВСИМВ(A22;НАЙТИ(" ";A22)-1)
, или другая формула шла в название

Спасибо.
 
Оформляйте код в сообщении с помощью кнопки <...>
Код
sName =  s.Range("A22").Value
sName = Left$(sName, InStr(sName," ") - 1)
' или
sName = Split(s.Range("A22").Value," ") (0)

Для "или другая формула" будет другое решение.
 
финально код выглядит так? если, да, то выдает ошибку
Код
Sub SplitSheets2()
    Dim s As Worksheet
    Dim wb As Workbook
    Set wb = ActiveWorkbook
    For Each s In wb.Worksheets                 'проходим во всем листам активной книги
     s.Copy                         'сохраняем лист как новый файл
     ActiveWorkbook.SaveAs wb.Path & "\" & sName = Split(s.Range("C2").Value, " ")(0) & ".xlsx"  'сохраняем файл
    Next
End Sub
 
Изменено: starter - 09.04.2020 00:29:32
 
sName - это переменная, в которую записывается нужный фрагмент текста из ячейки. При сохранении книги нужно указывать эту переменную или, если без нее, то только полученный фрагмент
 
спасибо за попытку помочь.
попыталась разобраться, что вы имели в виду. Под переменной  я поняла, что это название листа,  но видно это не так.
Буду использовать пока готовый макрос Николая, внеся изменения в сами листы.  
 
starter, доброй ночи, попробуйте Вашу формулу вставить в ячейку В22, а в коде макроса А22 поменяйте на В22
 
Настя_Nastya,cпасибо за предложение. писала выше, что да, придется сделать так. Меньшее из зол.  Но хотелось мне избежать лишних шагов.
 
Цитата
starter написал: ...что вы имели в виду.
Код
Sub SplitSheets2()
    Dim wb As Workbook: Set wb = ActiveWorkbook
    Dim s As Worksheet
    Dim sName As String
    
    Application.ScreenUpdating = False
    
    For Each s In wb.Worksheets
        s.Copy
        sName = Split(s.Range("C2").Value, " ")(0)
        ActiveWorkbook.SaveAs wb.Path & "\" & sName & ".xlsx"
        ActiveWorkbook.Close
    Next s
    
    Set wb = Nothing
    Application.ScreenUpdating = True
End Sub

Без проверки (существует ли в папке книга с таким именем)
Страницы: 1
Наверх