Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как автоматизировать сохранение в Excel? / 11 сообщений из 11, страница 1 из 1
15.06.2006, 15:24:32
    #33793264
Jetus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как автоматизировать сохранение в Excel?


Привет всем!

Есть такая проблема: у меня на работе стоит офис 2003 и когда я в Экселе открываю файлы более старших версий, то при закрытии Эсксель спрашивает: мол, пересохранить ли вам этот файл в более новом формате?

Когда за день открываешь таких файлов штук 100, то задалбывает жутко.
Как избавится от этой фигни?


______________________________
Never Surrender - Nothing Impossible!
...
Рейтинг: 0 / 0
15.06.2006, 16:05:25
    #33793436
Ashton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как автоматизировать сохранение в Excel?
Jetusкогда я в Экселе открываю файлы более старших версий?
Наверно ты имел ввиду младших версий.

Попробуй сделать кнопку на панели со следующим макросом или попробуй повесить на событие BeforeClose.

Код: plaintext
ActiveWorkbook.Close SaveChanges:=False 
...
Рейтинг: 0 / 0
15.06.2006, 17:54:58
    #33793876
Jetus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как автоматизировать сохранение в Excel?
AshtonНаверно ты имел ввиду младших версий.
Да, именно. Я хотел сказать - более старых версий.

AshtonПопробуй сделать кнопку на панели со следующим макросом или попробуй повесить на событие BeforeClose.
Код: plaintext
ActiveWorkbook.Close SaveChanges:=False 

А какой в этом смысл? То же самое - каждый раз на кнопку давить!
...
Рейтинг: 0 / 0
16.06.2006, 09:49:17
    #33794613
Ashton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как автоматизировать сохранение в Excel?
Если не хочешь давить на кнопку, попробуй следующий вариант.

Сделай модуль класса (EventClassModule) в личной книге макросов Personal.xls.

Код: plaintext
1.
2.
3.
4.
5.
Public WithEvents app As Excel.Application

Private Sub App_WorkbookBeforeClose(ByVal Wb As Workbook, _
  Cancel As Boolean)
    Wb.Close SaveChanges:=False
End Sub

Создай стандартный модуль, все там же.

Код: plaintext
1.
2.
3.
4.
Dim a As New EventClassModule

Public Sub Auto_Open()
    Set a.app = Application
End Sub
...
Рейтинг: 0 / 0
16.06.2006, 13:28:58
    #33795520
хорошо
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как автоматизировать сохранение в Excel?
решение изящное, но пользователь должен знать, что все файлы теперь будут закрываться без сохранения
...
Рейтинг: 0 / 0
19.06.2006, 10:27:35
    #33798846
Jetus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как автоматизировать сохранение в Excel?
хорошорешение изящное, но пользователь должен знать, что все файлы теперь будут закрываться без сохранения
Всё верно. Сначала надо определить, делались ли в файле изменения, и только если не делались, то поступать так, как пишет Ashton.

Посему вопрос: как определить, делались ли в книге изменения?
...
Рейтинг: 0 / 0
19.06.2006, 14:36:41
    #33799875
Ashton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как автоматизировать сохранение в Excel?
Попробуй следующий вариант.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
Public WithEvents app As Excel.Application
Private col As New Collection

Private Sub app_WorkbookBeforeClose(ByVal Wb As Workbook, _
  Cancel As Boolean)
    Dim intI As Integer
    Dim strWbName As String
    Dim fChanged As Boolean
    
    On Error Resume Next
    
    strWbName = Wb.Name
    
    For intI =  1  To col.Count
        If col.Item(intI) = strWbName Then
            MsgBox "Данные изменены."
            fChanged = True
            Exit For
        End If
    Next intI
    
    If Not fChanged Then
        Wb.Close SaveChanges:=False
    End If
    
    col.Remove strWbName
End Sub

Private Sub app_SheetChange(ByVal Sh As Object, _
  ByVal Source As Range)
    On Error Resume Next
    
    col.Add Sh.Parent.Name, Sh.Parent.Name
End Sub
...
Рейтинг: 0 / 0
19.06.2006, 16:22:26
    #33800322
Jetus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как автоматизировать сохранение в Excel?

2 Ashton: thanks! Помогло! =)


______________________________
Never Surrender - Nothing Impossible!
...
Рейтинг: 0 / 0
19.06.2006, 17:30:06
    #33800680
Jetus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как автоматизировать сохранение в Excel?

Гм... почему-то ексель вылетает иногда из-за этого макроса.
Вот, подумал малость и сделал вот так:

Код: plaintext
1.
2.
Private Sub app_WorkbookOpen(ByVal Wb As Workbook)  
    If UCase(Wb.Name) <> "PERSONAL.XLS" Then Wb.Save
End Sub

Так намного проще, хоть и чуть дольше файлы открываются =)


______________________________
Never Surrender - Nothing Impossible!
...
Рейтинг: 0 / 0
20.06.2006, 10:11:19
    #33801682
Ashton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как автоматизировать сохранение в Excel?
Я у себя пробовал (Excel 2003 SP2), работало стабильно, не слетало. А ты я смотрю решил сразу же сохранять при открытии, тоже вариант.
...
Рейтинг: 0 / 0
24.06.2006, 12:20:17
    #33812856
Jetus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как автоматизировать сохранение в Excel?

Немного усовершенствовал свой макрос:
Код: plaintext
1.
2.
3.
Private Sub app_WorkbookOpen(ByVal Wb As Workbook)
    On Error Resume Next
    If Not Wb.Saved Then Wb.Save
End Sub

Теперь сохранения будут происходить только для тех файлов, которые сохранены в старых версиях Excel, а не для всех подряд.



______________________________
Never Surrender - Nothing Impossible!
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как автоматизировать сохранение в Excel? / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]