|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
06.05.2013, 03:57 | #1 |
Пользователь
Регистрация: 09.08.2009
Сообщений: 33
|
Как поправить код?
Доброго времени суток уважаемые! Необходима ваша помощь. Имеется код сохранения листа Excel в отдельную книгу и в определённую директорию. Вопрос: как поправить код, что-бы сохранялись значения вместо формул (ну и соответственно форматирование)
Вот собственно код, нашел и немного переделал, а дальше не могу понять как сохранить только значения. Спасибо! К сожалению файл выложить не могу ввиду конфиденциальности информации. Sub СохранитьЛистВФайл() On Error Resume Next ' путь к папке, в которую по-умолчанию будет предложено сохранить файл Folder$ = "C:\Documents and Settings\user\Рабочий стол\Сводки\Архив\Доклад": MkDir Folder$ ChDrive Left(Folder$, 1): ChDir Folder$ ' выбираем стартовую папку ' формируем имя файла из текста ячеек Filename = [a1] & ".xlsx" ' копируем активный лист (при этом создаётся новая книга) Err.Clear: Sheets("доклад").Copy: DoEvents If Err Then Exit Sub ' произошла какая-то ошибка при попытке копирования листа ' убеждаемся, что активной книгой является копия листа If ActiveWorkbook.Worksheets.Count = 1 And ActiveWorkbook.Path = "" Then ' сохраняем файл под заданным именем в формате XLSX (xlOpenXMLWorkbook - Excel 2007) ActiveWorkbook.SaveAs Filename, xlOpenXMLWorkbook ' закрываем сохранённый файл ActiveWorkbook.Close False End If 'скрываем лист после сохранения в архиве Sheets("доклад").Select ActiveWindow.SelectedSheets.Visible = False End Sub По возможности сохранить лист без макросов и кнопки (имеется на листе оригинала) Последний раз редактировалось elf80; 06.05.2013 в 04:12. |
06.05.2013, 06:38 | #2 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
Перед тем, как сохранять созданную книгу, выполните
Код:
Чем шире угол зрения, тем он тупее.
|
06.05.2013, 07:04 | #3 |
Пользователь
Регистрация: 09.08.2009
Сообщений: 33
|
Спасибо SAS888, я правильно вставил код? Если да - то у меня в оригинале формулы меняются на значения, а в сохранённом листе формулы остаются. Что не так? Сам не разберусь, VBA только изучаю.
Sub СохранитьЛистВФайл() On Error Resume Next ' путь к папке, в которую по-умолчанию будет предложено сохранить файл Folder$ = "C:\Documents and Settings\user\Рабочий стол\Сводки\Архив\Доклад": MkDir Folder$ ChDrive Left(Folder$, 1): ChDir Folder$ ' выбираем стартовую папку ' формируем имя файла из текста ячеек Filename = [a1] & ".xlsx" ' копируем активный лист (при этом создаётся новая книга) Err.Clear: Sheets("доклад").Copy: DoEvents If Err Then Exit Sub ' произошла какая-то ошибка при попытке копирования листа ' убеждаемся, что активной книгой является копия листа If ActiveWorkbook.Worksheets.Count = 1 And ActiveWorkbook.Path = "" Then Dim x, y As Shape ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value For Each y In ActiveSheet.Shapes: y.Delete: Next On Error Resume Next For Each x In ActiveWorkbook.VBProject.VBComponen ts Select Case x.Type Case 1 To 3: x.Collection.Remove x Case 100: x.CodeModule.DeleteLines 1, x.CodeModule.CountOfLines End Select Next ' сохраняем файл под заданным именем в формате XLSX (xlOpenXMLWorkbook - Excel 2007) ActiveWorkbook.SaveAs Filename, xlOpenXMLWorkbook ' закрываем сохранённый файл ActiveWorkbook.Close False End If 'скрываем лист после сохранения в архиве Sheets("доклад").Select ActiveWindow.SelectedSheets.Visible = False End Sub |
06.05.2013, 07:49 | #4 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
Попробуйте так:
Код:
Чем шире угол зрения, тем он тупее.
|
06.05.2013, 08:14 | #5 |
Форумчанин
Регистрация: 24.12.2012
Сообщений: 776
|
On Error Resume Next нужно всегда сопровождать On Error GoTo 0. Ведь пропустить ошибку нужно в каком-то месте кода, а не во всём коде.
|
06.05.2013, 08:30 | #6 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
Совершенно верно. Я не знаю, зачем он здесь вообще нужен. Возможно, что это какой-то фрагмент кода автора темы, а игнорирование ошибки осталось от полного кода...
Чем шире угол зрения, тем он тупее.
|
06.05.2013, 08:34 | #7 |
Пользователь
Регистрация: 09.08.2009
Сообщений: 33
|
SAS888 к сожалению проблема осталась, т.е. в оригинале формулы удаляются, а в копии сохраняются и пропал запрос на перезапись файла копии листа при наличии такого же в папке. Файл не могу выложить для всеобщего обозрения, информация конфиденциальная.
|
06.05.2013, 08:57 | #8 |
Пользователь
Регистрация: 09.08.2009
Сообщений: 33
|
Вот часть файла, думаю будет понятно
|
06.05.2013, 09:02 | #9 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
1. Запрос на перезапись я специально убрал. Если же Вам это надо, то удалите из кода
Код:
Если это так, то Вам должна помочь задержка выполнения последующего кода. Для этого, вместо DoEvents вставьте строку: Код:
3. Можно, конечно, прикрепить не оригинальный файл, а подобный. Но, боюсь, что ели причина в вышеупомянутой проблеме, то "легкий" файл не даст истинной картины...
Чем шире угол зрения, тем он тупее.
|
06.05.2013, 09:05 | #10 |
Пользователь
Регистрация: 09.08.2009
Сообщений: 33
|
Сейчас попробую. В файле, что я выложил получается та же самая история, т.е. в оригинале формулы затираются значениями
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как поправить код? | Sanek_81 | Microsoft Office Word | 2 | 10.02.2011 17:19 |
Нужно поправить код | SenFeron | Помощь студентам | 2 | 04.01.2011 19:54 |
поправить код! | Cruelbob | Общие вопросы C/C++ | 6 | 12.05.2010 23:33 |
Нужно поправить код | kimoncar | PHP | 0 | 13.04.2010 12:52 |
Поправить Код... | Lucchese | Общие вопросы C/C++ | 1 | 25.01.2010 20:00 |