Добрый день. Есть две взаимосвязанные задачи.
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
Также не понимаю как закрыть и открыть файл который был создан.
Сам решил, может кому пригодится.
Код добавляет к 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
Еще вариант с 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