Страницы: 1
RSS
Сохранение копии книги (xlsx), Книгу .xlsm копировать как .xlsx (без поддержки макросов)
 
Здравствуйте. Проблема такая. Есть книга .xlsm. В ней есть код VBA. Нужно сделать копию этой книги, но уже без поддержки макросов, то есть, имя_копии.xlsx
Делаю так:
Код
ActiveWorkbook.SaveCopyAs DirForRegFE & "\" & WbName1 & "_FE.xlsx"
Копия с расширением .xlsx создаётся, но при попытке открыть выскакивает сообщение: "Не удаётся открыть файл "имя файла", так как формат или расширение этого файла являются недопустимыми. Убедитесь, что файл не повреждён и расширение его имени соответствует его формату."
 
Смена расширения ничего не даст: Вы же делаете КОПИЮ.
 
Код
ActiveWorkbook.SaveAs Filename:=DirForRegFE & "\" & WbName1 & "_FE.xlsx", FileFormat:=xlOpenXMLWorkbook
Изменено: xsilversx - 25.04.2016 08:54:34
 
Решила написать в эту тему так как мой вопрос может отчасти служить ответом на предыдущий.
Пытаюсь устроить сохранение файла во вложенную (100% пустую) папку 1, n берется из ячейки корректно, формат ставлю xlsx при FileFormat:=51, чтобы избавиться от макросов.
Поясните, пожалуйста, новичку, почему вот так НЕ сохраняется файл, падает ошибка метода SaveAs:

Код
NewPath = ActiveWorkbook.Path & "\1\" & n & "" & ".xlsx"
ActiveWorkbook.SaveAs Filename:=NewPath, FileFormat:=5
1
А вот так сохраняется без проблем:
Код
NewPath = ActiveWorkbook.Path & "\1\" & n & "_1" & ".xlsx"
ActiveWorkbook.SaveAs Filename:=NewPath, FileFormat:=51 

Почему для SaveAs принципиально называется файл Маша.xlsx или Маша_1.xlsx?
 
А вот это зачем? NewPath = ActiveWorkbook.Path & "\1\" & n & "" & ".xlsx"
(выделено красным)
 
Выделенное красным может быть убрано, на ошибку это не влияет, добавила просто чтобы подчеркнуть, что все различие между двумя примерами заключается в _1
 
опытным путем пришла к выводу, что ошибка возникает из-за совпадения названия файла-источника данных и результата работы макроса (название в обоих случаях взято из одной ячейки), хотя они сохраняются в разные директории. Кто знает, как скопировать код, чтобы комментарии кириллицей не коверкались - прошу поделиться.
Код
Sub Test()
    Dim FilesToOpen1
    Dim FilesToOpen2
    Dim x As Integer
    Dim NewPath As String
    Dim NewFolder As String
 
    Application.ScreenUpdating = False  
     
    'импорт файлов
    FilesToOpen1 = Application.GetOpenFilename _
      (FileFilter:="All files (*.*), *.*", _
      MultiSelect:=False, Title:="Выберите шаблон")
    
    FilesToOpen2 = Application.GetOpenFilename _
      (FileFilter:="All files (*.*), *.*", _
      MultiSelect:=True, Title:="Выберите файлы с данными")
 
    If TypeName(FilesToOpen) = "Boolean" Then
        MsgBox "Не выбрано ни одного файла!"
        Exit Sub
    End If
     
     'Открываем шаблон куда будем вставлять данные
        Set importWB1 = Workbooks.Open(Filename:=FilesToOpen1)
        'Открываем по очереди файлы с данными
    
    Dim awb
    Set awb = ActiveWorkbook
    'Проходим по всем выбранным файлам
    x = 1
    While x <= UBound(FilesToOpen2)
        
        Set importWB2 = Workbooks.Open(Filename:=FilesToOpen2(x))
        
        'копируем содержимое листа с данными и вставляем в шаблон
        importWB2.Sheets(1).Range("A1:CV759").Copy importWB1.Sheets("OJ").Cells(1)
        
        'название файла берем из ячейки
        awb.Sheets("OJ").Activate
        Range("B3").Select
        n = ActiveCell.Value
        
        'будущее название полученного файла NewPath
        NewPath = importWB1.Path & "\1\" & n & ".xlsx"
        'ñсоздаем вложенную папку 1
        NewFolder = importWB1.Path & "\1\"
        If Len(Dir(NewFolder)) = 0 Then 'если такой папки нет, то создаем ее
        MkDir NewFolder
        End If
        
        'пытаемся сохранить шаблон и тут падает ошибка
        importWB1.SaveAs NewPath, FileFormat:=51
        importWB2.Close savechanges:=False
        x = x + 1
    Wend
  
    Application.ScreenUpdating = True
End Sub
 
Конечно, можно поизвращаться с названиями, чтобы не совпадали, сейчас все так и сделано. Но хочется от этого уйти и сохранение одноименного результата во вложенную папку - по-моему, вполне себе вариант. Отчего не получается - разъясните, пожалуйста, для меня загадка.
 
Ответ оказался прост - получается, что в Экселе открыто два одноименных файла, а он этого очень не любит. Чтобы ситуации такой избежать, достаточно поменять местами строки 53 и 54, то есть сначала закрыть файл-источник, а потом уже сохранять под тем же именем результат.
 
Цитата
alfiya_solo написал:
Кто знает, как скопировать код, чтобы комментарии кириллицей не коверкались - прошу поделиться.
У Вас сейчас нормально кириллица отображается. Копируйте при русской раскладке клавиатуры.
Страницы: 1
Наверх