Я использую файл с поддержкой макросов (двоичный лист), который имеет много модулей/форм, и иногда, когда что-то идет не так с моим ноутбуком, и Excel внезапно отключается, мои файлы автосохранения не работают.
Я получаю эту ошибку в каждом автосохраненном файле:
Ошибка выполнения '9'
Индекс вне диапазона
Моя частота автосохранения составляет 5 минут, чтобы сохранить мою спину, но, что интересно, это не работает для этого файла.
Я даже не могу понять, где ошибка, потому что в этом автосохраненном файле открывается только белая пустая страница. (Вот почему другие вопросы об ошибке времени выполнения 9 на SO не были ответом на мой вопрос) Что может быть причиной и каково возможное решение?
ОБНОВЛЕНИЕ: события Workbook_Open, которые у меня есть в этой книге
Private Sub Workbook_Open()
Application.ScreenUpdating = False
ActiveWindow.Visible = False
SplashUserForm.Show
Windows(ThisWorkbook.Name).Visible = True
Application.ScreenUpdating = True
With Sheet5
.Unprotect Password:=""
.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
False, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
AllowFormattingRows:=True, AllowInsertingColumns:=True, AllowInsertingRows _
:=True, AllowInsertingHyperlinks:=True, AllowDeletingColumns:=True, _
AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, _
AllowUsingPivotTables:=True, UserInterfaceOnly:=True
.EnableOutlining = True
End With
With Sheet16
.Unprotect Password:=""
.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
False, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
AllowFormattingRows:=True, AllowInsertingColumns:=True, AllowInsertingRows _
:=True, AllowInsertingHyperlinks:=True, AllowDeletingColumns:=True, _
AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, _
AllowUsingPivotTables:=True, UserInterfaceOnly:=True
.EnableOutlining = True
End With
End Sub
А вот что у моего SplashUserForm:
Private Sub UserForm_Activate()
Application.Wait (Now + TimeValue("00:00:01"))
SplashUserForm.Label1.Caption = "Loading Data..."
SplashUserForm.Repaint
Application.Wait (Now + TimeValue("00:00:01"))
SplashUserForm.Label1.Caption = "Creating Forms..."
SplashUserForm.Repaint
Application.Wait (Now + TimeValue("00:00:01"))
SplashUserForm.Label1.Caption = "Opening..."
SplashUserForm.Repaint
Application.Wait (Now + TimeValue("00:00:01"))
Unload SplashUserForm
End Sub
Private Sub UserForm_Initialize()
HideTitleBar Me
With Me
.StartUpPosition = 0
.Left = Application.Left + (0.5 * Application.Width) - (0.5 * .Width)
.Top = Application.Top + (0.5 * Application.Height) - (0.5 * .Height)
End With
End Sub
Option Explicit
Option Private Module
Public Const GWL_STYLE = -16
Public Const WS_CAPTION = &HC00000
Public Declare Function GetWindowLong _
Lib "user32" Alias "GetWindowLongA" ( _
ByVal hWnd As Long, _
ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong _
Lib "user32" Alias "SetWindowLongA" ( _
ByVal hWnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Public Declare Function DrawMenuBar _
Lib "user32" ( _
ByVal hWnd As Long) As Long
Public Declare Function FindWindowA _
Lib "user32" (ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Sub HideTitleBar(frm As Object)
Dim lngWindow As Long
Dim lFrmHdl As Long
lFrmHdl = FindWindowA(vbNullString, frm.Caption)
lngWindow = GetWindowLong(lFrmHdl, GWL_STYLE)
lngWindow = lngWindow And (Not WS_CAPTION)
Call SetWindowLong(lFrmHdl, GWL_STYLE, lngWindow)
Call DrawMenuBar(lFrmHdl)
End Sub
Workbook_Open
, отредактируйте вопрос и вставьте в него код из этих событий, чтобы мы могли увидеть, может ли что-то быть причиной индекса ошибка. (Возможно, что-то пытается получить доступ до полного завершения загрузки - я слышал, что это часто проблема с Workbook_Open, и открытие из автоматически восстановленной версии может замедлять работу и усугублять проблему.) - person YowE3K   schedule 03.03.2017FindWindowA(vbNullString, frm.Caption)
не сможет найти окно, пока оно не будет создано. - person YowE3K   schedule 03.03.2017Windows(ThisWorkbook.Name).Visible = True
я не знаю, как это стало False, но, когда я пытаюсь открыть файл автовосстановления, я понимаю, что файл открывается нормально, моя форма открывается нормально, но когда форма исчезает , вылазит ошибка. Причина в том, что Excel почему-то не может превратитьWindows(ThisWorkbook.Name).Visible
в True. Что вы думаете? - person Mertinc   schedule 02.05.2017(ThisWorkbook.Name).Visible = True
, обратитесь к новой ссылке [stackoverflow.com/questions/43732367/ - person Mertinc   schedule 02.05.2017Windows(ThisWorkbook.Name).Visible
не установлен вFalse
вашим операторомActiveWindow.Visible = False
? (Еще раз подчеркну, что я не эксперт в таких вопросах, поэтому легко могу ошибаться.) - person YowE3K   schedule 02.05.2017