Сохраните и переименуйте файл, созданный из .xltm-excel-template, пока этот (временный) файл открыт с помощью VBA

#excel #vba #save

#excel #vba #Сохранить

Вопрос:

Моя цель — сохранить и переименовать файл, созданный из .xltmexcel-template, пока этот (временный) файл открыт с помощью VBA и не был сохранен ранее.

Рабочий процесс выглядит следующим образом:

  1. Пользователь нажимает на файл .xltm Excel-Template в папке, открывая новую «копию» этого шаблона excel (но не самого шаблона xltm excel)
  2. Затем пользователь нажимает макрокнопку, чтобы импортировать некоторые данные в листы этого файла (например, из Access)
  3. Этот файл следует сохранить и, возможно, переименовать на основе данных, содержащихся в листе.

Эта ситуация отличается от следующих ситуаций:

  • Копирование и переименование простого файла Excel (.xlsx)
  • Копирование и переименование файла Excel с помощью макросов (.xlsm)
  • Копирование и переименование файла excel, который не открыт (это будет сделано с помощью «Name As»)

Как уже говорилось, моя ситуация такова, что я хотел бы сохранить excel-файл, который был создан как новая копия, когда пользователь нажал на файл .xltm (excel-шаблон с макросами) в папке и выполнил некоторые макросы в этом временном файле.

После открытия новой копии шаблона я запустил следующий подраздел, чтобы сохранить эту новую копию как xlsm.file с именем «Test» в папке downloads, но получил ошибку 1004:

 ActiveWorkbook.SaveAs "C:UsersUSERNAMEDownloadsTest.xlsm"
 

На некоторых форумах утверждается, что «ActiveWorkbook» не может быть использован в этом случае, поскольку фактический файл, в котором выполняется код, хранится как tmp.file в папке Windows Temp. И на данный момент это не рабочая книга, поэтому относительный путь «Активная рабочая книга» не будет работать.

Заранее большое спасибо за вашу помощь!

Комментарии:

1. Код, выполняющий сохранение в книге, должен быть сохранен? Если это так, попробуйте ThisWorkbook вместо ActiveWorkbook

2. Вы пробовали это: ActiveWorkbook. Сохраните «C:UsersUSERNAMEDownloadsTest «, xlOpenXMLWorkbookMacroEnabled?

Ответ №1:

Упражнение по шаблонной рабочей книге

  • Скопируйте код в новую книгу. Измените пути в обеих процедурах, например C:Test . Теперь добавьте две кнопки (или нет) и назначьте им две процедуры. Сохраните файл в любом месте.
  • Теперь запустите createTemplate процедуру, и она сохранит этот файл как шаблон с именем MyTemplate.xltm , закройте его и откройте папку ( in Windows Explorer ), в которой он был сохранен. Теперь в папке дважды щелкните вновь созданный файл, и он откроется как MyTemplate1 (копия шаблона).
  • Теперь запустите testTemplate процедуру, и она запишет текущее время (отметку времени) в ячейку A1 , прежде чем она будет сохранена как TestTemplate.xlsm и закрыта. Снова он переходит к папке Windows Explorer в.
  • Теперь вы можете открыть этот вновь созданный файл, чтобы увидеть ранее записанную временную метку в ячейке A1 .
  • Обратите внимание, что файл шаблона имеет xltm расширение, а последний (результирующий) файл имеет xlsm расширение.

Код

 Option Explicit

Sub createTemplate()
    Const FolderPath As String = "F:Test202065185447"
    With ThisWorkbook
        .SaveAs FolderPath amp; "" amp; "MyTemplate", xlOpenXMLTemplateMacroEnabled
        .FollowHyperlink FolderPath
        .Close
    End With
End Sub

Sub testTemplate()
    Const FolderPath As String = "F:Test202065185447"
    Range("A1") = Now
    Columns("A").AutoFit
    With ThisWorkbook
        .SaveAs FolderPath amp; "" amp; "TestTemplate", xlOpenXMLWorkbookMacroEnabled
        .FollowHyperlink FolderPath
        .Close
    End With
End Sub
 

Комментарии:

1. Спасибо вам! Последующий вопрос: возможно ли, что код запускается, когда пользователь нажимает на файл в проводнике Windows, вместо записи исполняемого кода в новую дополнительную рабочую книгу? Рабочий процесс будет следующим: 1. Пользователь нажимает на xltm.file, содержащий весь код. 2. Откроется копия xltm-файла. 3. Пользователь нажимает на некоторые кнопки в файле, выполняя некоторые подпрограммы, например, импорт данных из Access в лист. 4. Затем пользователь нажимает кнопку на текущем открытом листе, чтобы сохранить текущую открытую книгу как xlsm-файл. Если возможно, файл должен иметь имя, основанное на информации, содержащейся в листе.

2. Это материал для другого вопроса. Используйте это, добавьте дополнительную информацию и добавьте код, и все. Вы можете опубликовать ссылку на него в комментариях, чтобы сообщить мне, чтобы я посмотрел, если хотите. Однако всегда лучше иметь несколько мнений (решений). Важной частью является то, что вы должны поместить код в рабочую книгу (возможно, шаблон), содержащую кнопку.