2014-10-07 44 views
1

我有一个非常复杂的VBA项目相当大的工作簿。功能区工作簿不断崩溃Excel

工作簿还具有定制色带...

有在Workbook_Open事件相当很多发生得,不保护和再保护(userInterfaceOnly),隐藏和显示各种纸张,存储参考色带等

当宏没有自动启用时,工作簿打开,启用按钮出现,当我点击它时,所有事情都会发生。

问题出现在文件被信任时,并且宏自动运行。在这种情况下,它有一种使应用程序崩溃的倾向。

这就好像是,如果用户需要点击按钮的暂停,它会完成所有的Excel准备工作,显示功能区,然后执行我所有的Workbook_Open工作,但是如果没有启用按钮,Excel会自己启动东西并显示功能区似乎与我的Workbook_Open事件纠缠在一起,导致它崩溃。

这发生在2007年,2010年和2013年在Windows 7 & 8(0.1)

,我怀疑这是值得做的色带,因为有时问题并不完全崩溃,但是相反,工作簿打开,丝带区域只是空白。

FYI在Workbook_Open事件中的代码看起来是这样的:

enter code here 
Private Sub Workbook_Open() 
Dim newHour As Single 
Dim newMinute As Single 
Dim newSecond As Single 
Dim waitTime As Date 

    Application.ScreenUpdating = False 
' To activate the ribbon in v2007 
    Application.SendKeys "%Q{RETURN}" 

    Call ResetTheSheets 

    Splash.Visible = xlSheetVisible 
    Splash.Protect shtHidden.Range("iWord") 
    Call ShowHideSplash 

    ExecSumm.Visible = xlSheetVisible 
    GetStarted.Visible = xlSheetVisible 
' Look at the properties in the Prop sheet to see what should be displayed 
    If Prop.Range("PropHideGetStarted") Then 

On Error Resume Next 
     With ExecSumm 
      .Activate 
      'Range("C4").Select 
      .Unprotect Password:=shtHidden.[iWord] 
      .Visible = xlSheetVisible 
      .Range("A1:A" & .Range("LastRowCol").Row).EntireRow.Hidden = False 
      .Range(.Cells(1, 1), .Cells(1, .Range("LastRowCol").Column)).EntireColumn.Hidden = False 
'   Check to see if the template column has anything in 
      If WorksheetFunction.CountA(.Range("TemplateCol")) = 0 Then .Range("TemplateCol").EntireColumn.Hidden = True 
'   Check to see if the prior year should be hidden 
      If Not Prop.Range("PropBFbalances") Then .Range("ppTitle").EntireColumn.Hidden = True 
      .Activate 
     End With 
    Else 
     GetStarted.Select 
    End If 
    ActiveWindow.ScrollRow = 1 

FormShow: 
Err.Clear 
On Error GoTo FormShow 
    frmSplash.Show msoFalse 

    shtHidden.Range("iBalance") = "TRUE" 
' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
'' Schedule the start to avoid 'startup-crashes' - this didn't work as a way to prevent 
' newHour = Hour(Now()) 
' newMinute = Minute(Now()) 
' newSecond = Second(Now()) + 1 
' waitTime = TimeSerial(newHour, newMinute, newSecond) 
' Application.Wait waitTime 
' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
Err.Clear 
On Error GoTo 0 
    Application.OnTime Now + TimeValue("00:00:01"), "StartUpMacro" 
End Sub 
+0

您是否尝试过将所有开放代码移至StartUpMacro例程? – Rory 2014-10-07 12:05:31

回答

0

你可以试试:

一个。让Excel等待预定时间之前或sendkey东西根据自己的需要后,准备:

Application.Wait(Now + #0:00:05#)  '5 sec for example 

礼貌:link

湾使用msgbox弹出(类似于宏启用按钮)来禁止快速执行其余代码。