Excel VBA Макросы: Сохранение и открытие книги в XLSX

Автор gtz, 05 февраля 2018, 10:37

gtz

Добрый день. Есть две взаимосвязанные задачи.

1 - необходимо преобразовать файл из .xls в .xlsx

Макрорекодер записывает это как:     
ActiveWorkbook.SaveAs Filename:= "С:\test.xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False

2 - необходимо заново открыть книгу для того чтобы изменения вступили в силу, и excel воспринимал файл как обновленный

Макрорекодер записывает это как:
Workbooks.Open Filename:= "С:\test.xlsx"

По алгоритму, открывается любой xls файл находящийся в любой директории, при выполнении макроса он сохраняется как xlsx, а затем открывается заново.
Проблема в том, что названия файло как и директории могут быть разными. Путь до файла можно заменить на Activebook.path, а вот имя файла без расширения не выделить. Важно преобразовать именно форматы а не просто изменить внешний вид расширения.
FileFormat:=xlOpenXMLWorkbook

Также не понимаю как закрыть и открыть файл который был создан.

gtz

Сам решил, может кому пригодится.

Код добавляет к xls букву "x" и сохраняет в формате XLSX (51 = xlOpenXMLWorkbook (without macro's in 2007-2010, xlsx).

Private Sub CommandButton1_Click()
    Dim oldFName$
    Dim newFName As String
    Dim PathCurrentBook As String
    oldFName = ActiveWorkbook.FullName
    newFName = oldFName & "x"
    PathCurrentBook = ActiveWorkbook.Path
    ActiveWorkbook.SaveAs oldFName & "x", 51
    Kill oldFName
    ActiveWorkbook.Close
    Workbooks.Open Filename:=newFName
End Sub

gtz

Еще вариант с if который проверяет соответствует ли формат файла форматц XLSX.

Private Sub CommandButton1_Click()

Dim sfn As String, sp As String
Dim oldFName$
oldFName = ActiveWorkbook.FullName ' запоминаем имя изначального файла чтобы в конце его прикончить (удалить)
    sp = ActiveWorkbook.Path    'получаем путь к папке активной книги
    If Right(sp, 1) <> Application.PathSeparator Then 'добавляем слеш в конце папки, если его нет
        sp = sp & Application.PathSeparator
    End If
    sfn = ActiveWorkbook.Name    'запоминаем имя активной книги
    If ActiveWorkbook.FileFormat <> 51 Then     'если книга не в формате xlsx тогда преобразуем
        sfn = sfn & "x" ' добавляем "x" к xls чтобы получить xlsx
        ActiveWorkbook.SaveAs sp & sfn, 51 ' сохраняем файл в формате (xlOpenXMLWorkbook 51 Open XML Workbook)
        Application.Workbooks.Open sp & sfn, False
    Kill oldFName ' убить предыдущий файл
        Else: MsgBox "Файл уже преобразован" 'если файл уже в формате Open XML Workbook

  End If

End Sub