#excel #vba #save
#excel #vba #Сохранить
Вопрос:
Моя цель — сохранить и переименовать файл, созданный из .xltm—excel-template, пока этот (временный) файл открыт с помощью VBA и не был сохранен ранее.
Рабочий процесс выглядит следующим образом:
- Пользователь нажимает на файл .xltm Excel-Template в папке, открывая новую «копию» этого шаблона excel (но не самого шаблона xltm excel)
- Затем пользователь нажимает макрокнопку, чтобы импортировать некоторые данные в листы этого файла (например, из Access)
- Этот файл следует сохранить и, возможно, переименовать на основе данных, содержащихся в листе.
Эта ситуация отличается от следующих ситуаций:
- Копирование и переименование простого файла 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. Это материал для другого вопроса. Используйте это, добавьте дополнительную информацию и добавьте код, и все. Вы можете опубликовать ссылку на него в комментариях, чтобы сообщить мне, чтобы я посмотрел, если хотите. Однако всегда лучше иметь несколько мнений (решений). Важной частью является то, что вы должны поместить код в рабочую книгу (возможно, шаблон), содержащую кнопку.