Удалите листы и избегайте Excel, прося пользователя подтвердить, используя вместо этого пользовательские сообщения - PullRequest
39 голосов
/ 19 января 2012

У меня есть кнопка, которая запускает цепочку событий. Одним из этих событий является удаление листа . Перед тем как пользователь что-то удалит, я выскакиваю свое собственное сообщение ДА / НЕТ с просьбой подтвердить весь процесс.

Затем следует дополнительное событие удаления листа, и Excel открывает свое собственное окно для подтверждения удаления листа. Проблема в том, что если пользователь говорит «нет» в этот момент, это приводит мое приложение в несогласованное состояние.

Как мне обойти Excel с просьбой подтвердить удаление листа?

Ответы [ 3 ]

61 голосов
/ 19 января 2012

Вы можете изменить параметр оповещения по умолчанию в Excel, используя:

Application.DisplayAlerts = False

Не забудьте восстановить стандартное поведение в конце вашего процесса:

Application.DisplayAlerts = True
1 голос
/ 07 февраля 2018

Я столкнулся с этой проблемой, используя Excel 2016, и на удивление DisplayAlerts оказался бесполезнымНе уверен, что кто-то еще испытал это.Я до сих пор не знаю, почему, но, читая этот поток , в соответствии с замечаниями метода Worksheet.Delete ( здесь ):

Когдапри удалении рабочего листа этот метод отображает диалоговое окно, в котором пользователю предлагается подтвердить удаление Это диалоговое окно отображается по умолчанию .При вызове объекта «Рабочий лист» метод Delete возвращает логическое значение, равное False, если пользователь нажал кнопку «Отмена» в диалоговом окне, или значение «Истина», если пользователь нажал кнопку «Удалить».

В Excel 2016, хотя приложениеDisplayAlerts был установлен в False, он продолжал показывать предупреждение после (или, скорее, до) удаления.

Я еще не нашел подходящее решение, поэтому я просто делаю листы, которые хочу удалить, "исчезают""с использованием цикла for each:

Sht.UsedRange.clear For each shp in sht.Shapes shp.Delete Next For each nm in sht.Parent.Names if nm.RefersToRange.Parent is sht then nm.Delete Next sht.visible = xlSheetVeryHidden

(код - это непроверенный черновик; возможные ошибки могут быть обработаны в основном on error resume next)

Это далекоот идеала, но он делает то, что мне нужно сделать (за счет большего объема памяти, конечно).Может быть, я должен превратить этот ответ в вопрос и посмотреть, есть ли у кого-нибудь лучшая идея для Excel 2016.

1 голос
/ 21 ноября 2013

УДАЛЕНИЕ ВСЕХ ЛИСТОВ С ЛИСТОМ «ОТЧЕТ» **

Dim NM As String
Dim CTS As Integer
Dim CNT2 As Integer
Dim CNT3 As Integer
CNT3 = 1
CNT2 = 1
CTS = Sheets.Count
Do Until CNT2 = CTS + 1
NM = Sheets(CNT3).Name
If Name = "Report" Then
Range("A1").Select
CNT3 = CNT3 + 1
Else
Sheets(NM).Select
Application.DisplayAlerts = False
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True
End If
CNT2 = CNT2 + 1
Loop
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...