Как переопределить сообщение «потеря функциональности» при сохранении электронной таблицы Excel? - PullRequest
1 голос
/ 26 августа 2011

У меня есть некоторый код VBA, который сохраняет электронную таблицу под заданным именем файла. Всякий раз, когда я сохраняю его, я получаю предупреждение о «значительной потере функциональности», потому что на листе есть проверка данных (хотя проверка все еще работает после того, как я сохранил лист).

Я хочу подавить это предупреждение, но не думаю, что мне следует использовать

Application.DisplayAlerts=false
mySheet.saveAs myFilename
Application.DisplayAlerts=true

потому что я не хочу отменять предупреждение, сообщающее пользователю, что файл с таким именем уже существует, так как я хочу защитить пользователей от случайного сохранения поверх файлов). Как я могу указать, что я просто хочу переопределить предупреждение «потеря функциональности»?

РЕДАКТИРОВАТЬ: я видел ответ на аналогичный вопрос, который рекомендовал сохранить книгу в другом формате. Это не сработает, потому что я разрабатываю в Excel 2007, но пытаюсь учесть пользователей, у которых есть Excel 2003.

1 Ответ

2 голосов
/ 26 августа 2011

Вы можете перехватить событие сохранения и затем запросить у пользователя информацию. Вот быстрый, непроверенный пример, который я собрал для вас:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

    Dim iAnswer As Integer
    Dim wkb As Workbook
    Dim oSaveAs As FileDialog

    Set wkb = ActiveWorkbook
    Application.DisplayAlerts = False
    If gbUserGenerated Then
        iAnswer = MsgBox("Would you like to save over previous workbook?" _
                         , vbYesNo, "Workbook Already Exists")
        If iAnswer = 6 Then
            wkb.Save
        Else
            Set oSaveAs = Application.FileDialog(msoFileDialogSaveAs)
            oSaveAs.Show
        End If
    Else
        Set oSaveAs = Application.FileDialog(msoFileDialogSaveAs)
        oSaveAs.Show
    End If
    Application.DisplayAlerts = true


End Sub

gbUserGenerated будет просто глобальной переменной (логическим значением), которая сообщает вам, создали ли вы рабочую книгу или она была пользователем (если пользователь всегда создает рабочую книгу, тогда она вам на самом деле не нужна).

Поместите код в папку объектов Microsoft Excel в VBE, поместите его в модуль «Эта книга».

Чтобы узнать больше о событиях, зайдите здесь : http://www.cpearson.com/excel/Events.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...