Файл с поддержкой макросов перестает работать и дает сбой при выполнении любого действия - PullRequest
0 голосов
/ 13 марта 2019

Так что это странно для меня, но у меня есть файл Excel 2016 с поддержкой макросов.Единственный макрос в файле - это событие BeforeSave, которое хранится в ThisWorkbook.После использования пустого файла один или два раза, он достигает точки, где открытие файла и выполнение каких-либо действий, например нажатие File или Developer или ввод данных, приводит к тому, что Excel перестает работать и закрывается.

Ниже приведено событие BeforeSave, которое является единственным макросом в этом файле (в ThisWorkbook нет модулей или пользовательских форм, больше ничего).

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

Application.EnableEvents = False
Cancel = True

ThisWorkbook.Sheets("Pending").Columns(9).NumberFormat = "@"
ActiveWorkbook.Save

Application.EnableEvents = True

End Sub

Это базовое событие макроса будет работать отличнона несколько раз.Затем, после того, как некоторые данные в файле, при следующем его открытии возникнет проблема.Это единственный файл Excel, в котором произошел этот сбой. Я все еще могу открыть исходный файл резервной копии с помощью этого макроса, в котором еще нет данных, и все будет в порядке.

Я попытался открыть файл вБезопасный режим, и я установил все последние обновления Microsoft Office.

Кто-нибудь еще сталкивался с такой проблемой?Это как-то связано с макросом событий BeforeSave?

ОБНОВЛЕНИЕ: Я изменил ActiveWorkbook на ThisWorkbook.Кроме того, я перешел от редактирования всего столбца к поиску последней использованной строки и форматированию этого диапазона, исключая строку заголовка.

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

Application.EnableEvents = False
Cancel = True

Dim Lastrow As Integer
Lastrow = ThisWorkbook.Sheets("Pending").Cells(Rows.Count, 9).End(xlUp).Row

ThisWorkbook.Sheets("Pending").Range("I2:I" & Lastrow).NumberFormat = "@"
ThisWorkbook.Save

Application.EnableEvents = True

End Sub

Спасибо.

1 Ответ

0 голосов
/ 20 марта 2019

Как прокомментировал Zack & GWD в комментариях, я обновил VBA, добавив в строку заголовка все ссылки и установив для всех ссылок значение ThisWorkbook вместо включения ActiveWorkbook. Пока что ошибка не возникла снова. Если это произойдет в будущем, я опубликую новый вопрос, если не смогу решить проблему.

Вот обновленный код для справки:

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

Application.EnableEvents = False
Cancel = True

Dim Lastrow As Integer
Lastrow = ThisWorkbook.Sheets("Pending").Cells(Rows.Count, 9).End(xlUp).Row

ThisWorkbook.Sheets("Pending").Range("I2:I" & Lastrow).NumberFormat = "@"
ThisWorkbook.Save

Application.EnableEvents = True

End Sub
...