Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Сохранение копии книги (xlsx), Книгу .xlsm копировать как .xlsx (без поддержки макросов)
 
Ответ оказался прост - получается, что в Экселе открыто два одноименных файла, а он этого очень не любит. Чтобы ситуации такой избежать, достаточно поменять местами строки 53 и 54, то есть сначала закрыть файл-источник, а потом уже сохранять под тем же именем результат.
Сохранение копии книги (xlsx), Книгу .xlsm копировать как .xlsx (без поддержки макросов)
 
Конечно, можно поизвращаться с названиями, чтобы не совпадали, сейчас все так и сделано. Но хочется от этого уйти и сохранение одноименного результата во вложенную папку - по-моему, вполне себе вариант. Отчего не получается - разъясните, пожалуйста, для меня загадка.
Сохранение копии книги (xlsx), Книгу .xlsm копировать как .xlsx (без поддержки макросов)
 
опытным путем пришла к выводу, что ошибка возникает из-за совпадения названия файла-источника данных и результата работы макроса (название в обоих случаях взято из одной ячейки), хотя они сохраняются в разные директории. Кто знает, как скопировать код, чтобы комментарии кириллицей не коверкались - прошу поделиться.
Код
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
Сохранение копии книги (xlsx), Книгу .xlsm копировать как .xlsx (без поддержки макросов)
 
Выделенное красным может быть убрано, на ошибку это не влияет, добавила просто чтобы подчеркнуть, что все различие между двумя примерами заключается в _1
Сохранение копии книги (xlsx), Книгу .xlsm копировать как .xlsx (без поддержки макросов)
 
Решила написать в эту тему так как мой вопрос может отчасти служить ответом на предыдущий.
Пытаюсь устроить сохранение файла во вложенную (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?
Страницы: 1
Наверх