PATRI0T Пользователь Сообщений: 5 |
#1 05.10.2017 11:28:30 Добрый день. Что делаю:
Этой процедурой удаляю макросы (пытаюсь)
В результате Вопрос. Прикрепленные файлы
|
||||
_Igor_61 Пользователь Сообщений: 3007 |
Можно. Побаловался макрорекордером и у меня получилось |
PATRI0T Пользователь Сообщений: 5 |
#3 06.10.2017 08:17:17 Спасибо за ответ А зачем это?
|
||
Александр П. Пользователь Сообщений: 1147 |
#4 06.10.2017 08:53:07 PATRI0T, Код ниже удаляет весь код во всех модулях активной книги.
|
||
_Igor_61 Пользователь Сообщений: 3007 |
#5 06.10.2017 09:07:38
Покажите Ваш файл с кодом, который не работает. Смею предположить, что Вы что-то не так или не туда вставили или что-то не так сделали, а так же невнимательно посмотрели код, иначе не возникло бы вопроса:[QUOTE]PATRI0T написал: А зачем это? Kill Addr & «Файл без макросов 2007.xlsx[/CODE] |
||
_Igor_61 Пользователь Сообщений: 3007 |
Александр, здравствуйте! Но тогда пользователю нужно лезть в параметры, ставить доверенный доступ и перезапускать приложение, что для пользователя, думаю не очень удобно. Поэтому по-моему проще это все сделать просто пересохранением файлов, а потом лишний файл удалить. ИМХО, конечно |
_Igor_61, ну так, наше дело предложить вариант . Изменено: Александр П. — 06.10.2017 10:19:58 |
|
sokol92 Пользователь Сообщений: 4445 |
Уважаемый PATRI0T, в приложенном к сообщению файле макросов нет, зато есть два «битых» имени книги. Удалите их через «Диспетчер имен» и проблема с открытием должна уйти. |
_Igor_61 Пользователь Сообщений: 3007 |
#9 07.10.2017 00:34:38
Да, если это так, то не удивительно, что у него мой макрос не работает, если он его в xls помещает. Но почему-то он про этот момент молчит. А я решил, что у него изначальный файл в xlsm, глядя на картинку |
||
LAD Пользователь Сообщений: 22 |
Вы копируете лист со всеми потрохами. Копируйте только то, что Вам нужно. Сделайте новый лист и на него скопируйте диапазон ячеек. Изменено: LAD — 07.10.2017 04:58:21 |
RAN Пользователь Сообщений: 7091 |
#11 07.10.2017 09:48:49
_Igor_61, Вставьте это в модуль копируемого листа, и вау съедят мыши.
Изменено: RAN — 07.10.2017 10:51:58 |
||||
_Igor_61 Пользователь Сообщений: 3007 |
RAN, не, не съедят, еще больше «ВАУ»! |
Юрий М Модератор Сообщений: 60575 Контакты см. в профиле |
$ в имени переменной — это тип (аналог as String). Вот табличка соответствий: // xlCSVWindows = 23; // основные константы 2007 // 57 = PDF |
_Igor_61 Пользователь Сообщений: 3007 |
Блин, как же я люблю этот форум! Каждый раз какое-то «ВАУ» для себя нахожу! Юрий М, спасибо большое! Сохранил Ваши пояснения, они очень пригодятся в дальнейшем. Не знал, что части кода можно цифрами задавать (хотя, нет, пример уже знаю — в MsgBox 64, 32, 48), это, видимо, что-то подобное, если правильно понимаю. Т.е. вместо «xlOpenXMLWorkbook (without macro’s in 2007-2010, xlsx) » пишем «51» и выполняется это действие, так? И я так понимаю, что RAN своим кодом вносит изменения в XML? Дальше — вообще не понимаю — ведь если открыть файл через WinRAR, там же куча папок и файлов XML, т.е. в данном случае через «51» производятся манипуляции с конкретным XML файлом, «51» его находит и выполняет свою задачу? |
Юрий М Модератор Сообщений: 60575 Контакты см. в профиле |
XML тут нет ) Просто заменяем длинную строку числом ) |
_Igor_61 Пользователь Сообщений: 3007 |
xlOpenXMLWorkbook — тогда это просто указание на книгу xlsx 2007-2010, этим кодом ее открываем? |
Юрий М Модератор Сообщений: 60575 Контакты см. в профиле |
Нет, открываем по имени, а это указание ТИПА файла — книга без макросов. |
_Igor_61 Пользователь Сообщений: 3007 |
А, кажется понял: ActiveWorkbook.SaveAs sfName1, 51 — сохраняем активную книгу с заданным именем (sfName1) в xlsx (xlOpenXMLWorkbook (without macro’s in 2007-2010, xlsx) . И равнозначно — можно записать текстом «xlOpenXMLWorkbook (without macro’s in 2007-2010, xlsx», а можно «51». Я правильно понимаю? |
Николай Пользователь Сообщений: 229 |
RAN, ваш макрос в личную книгу макросов. Что нужно изменить что бы макрос заработал из личной книги макросов. Из листа текущей книги отрабатывает корректно. Изменено: Николай — 07.10.2017 19:42:37 |
Юрий М Модератор Сообщений: 60575 Контакты см. в профиле |
|
_Igor_61 Пользователь Сообщений: 3007 |
|
RAN Пользователь Сообщений: 7091 |
sfName1 =
ActiveWorkbook.FullName Изменено: RAN — 07.10.2017 20:30:39 |
RAN Пользователь Сообщений: 7091 |
_Igor_61, |
Николай Пользователь Сообщений: 229 |
Кнопка цитирования не для ответа [МОДЕРАТОР] sfName1 = ActiveWorkbook.FullName |
Николай Пользователь Сообщений: 229 |
#25 07.10.2017 21:46:53 На тестовой книге.
И скрин ошибки. Прикрепленные файлы
|
||
Николай Пользователь Сообщений: 229 |
#26 07.10.2017 21:49:24 Опа.
Решило проблему. |
||
Николай Пользователь Сообщений: 229 |
#27 08.10.2017 09:51:08 Вот как стал выглядеть код в итоге.
Огромная благодарность RAN, за его код сохранения файлов. Изменено: Николай — 08.10.2017 12:38:36 |
||
LAD Пользователь Сообщений: 22 |
#28 08.10.2017 14:57:17 Не думал, что можно так сильно извратить. |
Сохранить файл без макросов |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
I have created an Excel-Document with macros that my customer should fill out save pressing a button.
Under the button is just this macro:
Sub filesave()
Dim bFileSaveAs As Boolean
bFileSaveAs = Application.Dialogs(xlDialogSaveAs).Show
End Sub
The problem is that as default option you get to save the document as macro enabled excel workbook.
How can do show as default non macro enabled excel format or not show the posibility to save the document as macro enabled document in oder to make sure that the macros will not be saved in the filled out copy of the document?
Some ideas about how the code should look like?
Pᴇʜ
56k9 gold badges49 silver badges73 bronze badges
asked Aug 13, 2018 at 12:19
1
You can use GetSaveAsFilename
to let the user choose a location and filename and then save with Workbook.SaveAs Method by choosing a file format from XlFileFormat Enumeration.
Public Sub SaveFileAs()
Dim FileToSave As Variant
FileToSave = Application.GetSaveAsFilename(fileFilter:="xlsx Files (*.xlsx), *.xlsx")
If FileToSave <> False Then
ActiveWorkbook.SaveAs Filename:=FileToSave, FileFormat:=xlOpenXMLWorkbook
Else
'user chose cancel
End If
End Sub
answered Aug 13, 2018 at 12:28
PᴇʜPᴇʜ
56k9 gold badges49 silver badges73 bronze badges
2
Сохранение файла рабочей книги Excel, существующего или нового, с помощью кода VBA. Методы Save и SaveAs объекта Workbook, параметр SaveChanges метода Close.
Сохранение существующего файла
Сохранить существующий открытый файл рабочей книги Excel из кода VBA можно несколькими способами. В примерах используется выражение ActiveWorkbook, которое может быть заменено на ThisWorkbook, Workbooks(«ИмяКниги.xlsx»), Workbooks(myFile.Name), где myFile — объектная переменная с присвоенной ссылкой на рабочую книгу Excel.
Простое сохранение файла после внесенных кодом VBA Excel изменений:
Сохранение файла под другим именем (исходная рабочая книга будет автоматически закрыта без сохранения внесенных изменений):
ActiveWorkbook.SaveAs Filename:=«C:ТестоваяНоваяКнига.xlsx» |
Сохранить файл рабочей книги можно перед закрытием, используя параметр SaveChanges метода Close со значением True:
ActiveWorkbook.Close SaveChanges:=True |
Чтобы закрыть файл без сохранения, используйте параметр SaveChanges метода Close со значением False:
ActiveWorkbook.Close SaveChanges:=False |
Сохранение файла под другим именем при закрытии рабочей книги:
ActiveWorkbook.Close SaveChanges:=True, Filename:=«C:ТестоваяНоваяКнига.xlsx» |
Если в примерах с методом Close параметр SaveChanges пропустить, будет открыто диалоговое окно с запросом о сохранении файла.
Новая книга сохраняется с указанием полного имени:
Workbooks.Add ActiveWorkbook.SaveAs Filename:=«C:ТестоваяНоваяКнига.xlsx» |
После этого к новой книге можно обращаться по имени: Workbooks ("НоваяКнига.xlsx")
.
Если не указать полное имя для сохраняемого файла:
Workbooks.Add ActiveWorkbook.Save |
тогда новая книга будет сохранена с именем и в папке по умолчанию, например: Книга1.xlsx, Книга2.xlsx, Книга3.xlsx и т.д. в папке «Документы».
Сообщение от Апострофф
Неудачное представление имени (если файлов достаточно много, то сортировка в проводнике по именам приводит к такой каше, что в глазах рябит)
Гораздо практичнее ~ такое
Спасибо, но такая форма не годится — файлов уже столько, что лучше их раскидывать по папкам.
101 Спасибо. работает но немного не так + один вопрос — Можно ли создавать в основной папке новые папки, примерно как в коде внизу.
Visual Basic | ||
|
Нужно для того, чтобы каждый месяц создавалась новая папка в которую скопируются новые файлы.
Второе — вообще все макросы кочуют в скопированный файл. Хотелось бы чтобы при открытии он не делал копию копии в той же папке просто, поэтому идеально вообще без макросов копировался.
Третье — сейчас появляются сообщения что папка существует. Можно их убрать? Если существует, то ничего, если не существует то создать.
Весь код на данный момент.
Visual Basic | ||
|