Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.06.2009, 14:58   #1
segail
Форумчанин
 
Регистрация: 13.06.2009
Сообщений: 691
По умолчанию Cохранение файла

Excel 2007 VBA

Помогите создать код сохранения.

Необходимо при клике по кнопке, которая находится на форме, происходило сохранение документа с совместимостью Excel 97-2003 без поддержки макросов.

1. При сохранение в папке Мои документы должна создаться папка с именем Док в которую должен сохраняется файл (и в дальнейшем будут сохраняться файлы) с именем значений ячейки A9
2. Желательно чтобы окна сообщений не выходили на экран. Такие как (предупреждение о изменение формата файла…..) и (файл с таким именем существует…..)
3. Необходимо чтобы данный код работал и на другом компьютере, так что путь создание папки и сохранение файла "C:\Documents and Settings\Пользователь\Мои документы\Док" не подойдет, так как предугадать пользователя не возможно. Необходим наверное какой то код?

P.S Книгу так и не скачал, страница не открывается
segail вне форума Ответить с цитированием
Старый 21.06.2009, 16:00   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Код:
Sub test()
    'Environ(28) = "USERPROFILE=C:\Documents and Settings\Игорь"
    путь = Replace(Environ(28), "USERPROFILE=", "") & "\Мои документы\"
    If Dir(путь, vbDirectory) = "" Then MkDir путь
    путь = путь & "Док\": If Dir(путь, vbDirectory) = "" Then MkDir путь
    ПолныйПутьКФайлу = путь & [a9]:    Debug.Print ПолныйПутьКФайлу
    Application.DisplayAlerts = False ' выключаем вывод предупреждений
    ThisWorkbook.SaveAs ПолныйПутьКФайлу, xlWorkbookNormal ' сохраняем файл
    Application.DisplayAlerts = True ' включаем обратно
End Sub
В данном коде не учитывается тот факт, что папка Мои документы может быть переименована и перемещена.

Ещё вариант:
Код:
Sub test2()
    ' так мы всегда корректно определим путь к папке с документами
    ' даже если она находится на другом диске и называется иначе
    путь = CreateObject("WScript.Shell").SpecialFolders("MyDocuments")
    
    путь = путь & "\Док\": If Dir(путь, vbDirectory) = "" Then MkDir путь
    ПолныйПутьКФайлу = путь & [a9]: Debug.Print ПолныйПутьКФайлу
    Application.DisplayAlerts = False    ' выключаем вывод предупреждений
    ThisWorkbook.SaveAs ПолныйПутьКФайлу, xlWorkbookNormal    ' сохраняем файл
    Application.DisplayAlerts = True    ' включаем обратно
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 21.06.2009, 16:24   #3
segail
Форумчанин
 
Регистрация: 13.06.2009
Сообщений: 691
По умолчанию

Я тоже это не предусмотрел. А может тогда создать в общих документах ее просто так не удалишь.
segail вне форума Ответить с цитированием
Старый 21.06.2009, 16:27   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
А может тогда создать в общих документах ее просто так не удалишь.
Ещё как удалишь...
К тому же, её точно также можно переместить и переименовать.

Цитата:
Я тоже это не предусмотрел
Зато я предусмотрел.
Читаем внимательно комментарий во втором макросе:
Код:
 ' так мы всегда корректно определим путь к папке с документами
    ' даже если она находится на другом диске и называется иначе
    путь = CreateObject("WScript.Shell").SpecialFolders("MyDocuments")
EducatedFool вне форума Ответить с цитированием
Старый 21.06.2009, 16:31   #5
segail
Форумчанин
 
Регистрация: 13.06.2009
Сообщений: 691
По умолчанию

Буду пробовать. Потм сообщу
segail вне форума Ответить с цитированием
Старый 21.06.2009, 17:25   #6
segail
Форумчанин
 
Регистрация: 13.06.2009
Сообщений: 691
По умолчанию

На листе есть элемент ActiveX и заливка при сохранение в формате 97-2003 выходит сообщение.
Нельзя ли его как то блокировать или согласится с ним в коде при выполнение сохранения.
Изображения
Тип файла: jpg format.JPG (39.4 Кб, 130 просмотров)
segail вне форума Ответить с цитированием
Старый 21.06.2009, 17:28   #7
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

В коде есть строка, отвечающая за блокировку вывода предупреждений:
Application.DisplayAlerts = False ' выключаем вывод предупреждений

Если это сообщение не блокируется (проверить не могу - у меня Excel 2003), то тут ничего не поделать...
Возможно, режим проверки совместимости можно оключить, но как именно - не знаю.

Удали этот свой элемент ActiveX (больше чем уверен, что без него можно обойтись) и неподдерживаемое форматирование, и сообщение не будет выскакивать.
EducatedFool вне форума Ответить с цитированием
Старый 21.06.2009, 17:53   #8
segail
Форумчанин
 
Регистрация: 13.06.2009
Сообщений: 691
По умолчанию

А такой цвет в 97-2003 каой может быть, цифровой и буквенный

ThemeColor = xlThemeColorAccent1 < ---------------- заливка
ThemeColor = 5 < ----------------------------------- границы
Изображения
Тип файла: jpg Color.JPG (1.1 Кб, 128 просмотров)

Последний раз редактировалось segail; 21.06.2009 в 17:59.
segail вне форума Ответить с цитированием
Старый 21.06.2009, 17:59   #9
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию Таблицы цветов Excel 2003

В Excel 2003 ни у одного объекта нет свойства ThemeColor.
Придется переделывать код (а проще удалить эти строки)

Вот таблицы цветов. Выбирай из первой таблицы:




Последний раз редактировалось EducatedFool; 21.06.2009 в 18:01.
EducatedFool вне форума Ответить с цитированием
Старый 21.06.2009, 18:06   #10
segail
Форумчанин
 
Регистрация: 13.06.2009
Сообщений: 691
По умолчанию

Для границ и для заливки, разницы нет?
segail вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Cохранение выбранного элемента ComboBox как название файла kate158 Помощь студентам 5 01.08.2008 12:02
Cохранение и восстановление базы Canadec БД в Delphi 1 23.10.2007 02:34
Два XL файла, данные 1-го файла являются частью другого в формуле 2-го Кот Microsoft Office Excel 2 14.08.2007 16:56