Workbook_Open上的代码影响工作表上图像的初始视图

我已经将Worksheet.EnableCalculation属性设置为手动打开工作簿的张数。 在这个过程中,我也改变了这两张纸上的两个形状的大小(使一个图像大一个小)。 这些形状也有macros分配给他们。 要添加更多的混淆,一张纸可以罚款打开工作簿,其余的没有。 可以的表格并不总是相同的表格,我不能确定这些表格与其他表格的区别。 这并不是说它在保存时是活跃的。

这可以正常工作,但是在打开工作簿时查看表单时,这些形状以及表单上的所有其他形状(也用作macrosbutton)似乎在表单上移动了位置(向上和向左)。 但是,只要放大/缩小button,就会回到正确的位置。

我已经添加了代码来在Workbook_Open事件期间设置缩放,以设置缩放,但不会阻止此exception出现。 将缩放放入Workbook_SheetActivate也不会影响问题

它对工作簿没有任何明显的影响,而且一旦将缩放手动应用于每个受影响的工作表,就不会出现问题,但打开时看起来不太好。

 Private Sub Workbook_Open() ' ***** STOPS automatic formular updating ' x - Defined Cell Names Lock_LABEL ' x - Image Lock_ON Lock_OFF Application.ScreenUpdating = False ' do not see screen updating Sheets("5_Angebot").Select ' Turn automatic forular updating OFF ActiveSheet.EnableCalculation = False ' Make ON lock Small ActiveSheet.Shapes.Range(Array("Lock_ONN")).Select ' x Selection.ShapeRange.Height = 28.3464566929 ' Make OFF lock Big ActiveSheet.Shapes.Range(Array("Lock_OFF")).Select ' x Selection.ShapeRange.Height = 46.7716535433 ' Label Range("ANLock_LABEL").Select ' x ActiveCell.FormulaR1C1 = "Auto Update is OFF" Selection.HorizontalAlignment = xlLeft With ActiveCell.Characters(Start:=15, Length:=4).Font .FontStyle = "Fett" .Size = 10 .Color = -16776961 End With Range("B1").Select Sheets("5_Auftragsb").Select ' Turn automatic forular updating OFF ActiveSheet.EnableCalculation = False ' Make ON lock Small ActiveSheet.Shapes.Range(Array("Lock_ONN")).Select ' x Selection.ShapeRange.Height = 28.3464566929 ' Make OFF lock Big ActiveSheet.Shapes.Range(Array("Lock_OFF")).Select ' x Selection.ShapeRange.Height = 46.7716535433 ' Label Range("AULock_LABEL").Select ' x ActiveCell.FormulaR1C1 = "Auto Update is OFF" Selection.HorizontalAlignment = xlLeft With ActiveCell.Characters(Start:=15, Length:=4).Font .FontStyle = "Fett" .Size = 10 .Color = -16776961 End With Range("B1").Select Sheets("5_Abschluss").Select ' Turn automatic forular updating OFF ActiveSheet.EnableCalculation = False ' Make ON lock Small ActiveSheet.Shapes.Range(Array("Lock_ONN")).Select ' x Selection.ShapeRange.Height = 28.3464566929 ' Make OFF lock Big ActiveSheet.Shapes.Range(Array("Lock_OFF")).Select ' x Selection.ShapeRange.Height = 46.7716535433 ' Label Range("ABLock_LABEL").Select ' x ActiveCell.FormulaR1C1 = "Auto Update is OFF" Selection.HorizontalAlignment = xlLeft With ActiveCell.Characters(Start:=15, Length:=4).Font .FontStyle = "Fett" .Size = 10 .Color = -16776961 End With Range("B1").Select Sheets("7_FAX_KWagen").Select ' Turn automatic forular updating OFF ActiveSheet.EnableCalculation = False ' Make ON lock Small ActiveSheet.Shapes.Range(Array("Lock_ONN")).Select ' x Selection.ShapeRange.Height = 28.3464566929 ' Make OFF lock Big ActiveSheet.Shapes.Range(Array("Lock_OFF")).Select ' x Selection.ShapeRange.Height = 46.7716535433 ' Label Range("KWLock_LABEL").Select ' x ActiveCell.FormulaR1C1 = "Auto Update is OFF" Selection.HorizontalAlignment = xlLeft With ActiveCell.Characters(Start:=15, Length:=4).Font .FontStyle = "Fett" .Size = 10 .Color = -16776961 End With Range("B1").Select ' Turn automatic forular updating OFF ActiveSheet.EnableCalculation = False Range("B1").Select MsgBox " Hallo " & vbNewLine & vbNewLine & _ " Automatic updating is currently" & vbNewLine & _ " turned off" ' Set Zoom on all sheets Dim ws As Worksheet For Each ws In Worksheets ws.Select ActiveWindow.Zoom = 120 Next ws Sheets("3_Data Form").Select Application.ScreenUpdating = True ' see screen updating End Sub 

我没有解决任何问题,只是提供了一个更简洁的代码版本。

 Private Sub Workbook_Open() ' ***** STOPS automatic formular updating ' x - Defined Cell Names Lock_LABEL ' x - Image Lock_ON Lock_OFF Dim ShName(3, 1) As String ShName(0, 0) = "5_Angebot" ShName(0, 1) = "ANLock_LABEL" ShName(1, 0) = "5_Auftragsb" ShName(1, 1) = "AULock_LABEL" ShName(2, 0) = "5_Abschluss" ShName(2, 1) = "ABLock_LABEL" ShName(3, 0) = "7_FAX_KWagen" ShName(3, 1) = "KWLock_LABEL" Dim ws As Worksheet Application.ScreenUpdating = False ' do not see screen updating For Each ws In ActiveWorkbook.Worksheets ws.Select ActiveWindow.Zoom = 120 ' your zoom, seems unnecessary '.Range("B2").Select ' this one really isn't necessary Cells(ActiveWindow.SplitRow + 1, ActiveWindow.SplitColumn + 1).Select ' fancy way instead of B2, selects cell after frozen panels, still unnecessary Next For i = 0 To UBound(ShName(, 0)) ' not sure about this UBound, it should be the fancy way of 3 Set ws = Sheets(ShName(i, 0)) With ws .EnableCalculation = False ' Turn automatic forular updating OFF .Shapes.Range(Array("Lock_ONN")).ShapeRange.Height = 28.3464566929 ' Make ON lock Small .Shapes.Range(Array("Lock_OFF")).ShapeRange.Height = 46.7716535433 ' Make OFF lock Big With .Range(ShName(i, 1)) ' Label ' I'm not sure about this one, should work anyway; the dot might not be necessary .FormulaR1C1 = "Auto Update is OFF" .HorizontalAlignment = xlLeft With .Characters(Start:=15, Length:=4).Font .FontStyle = "Fett" .Size = 10 .Color = -16776961 End With End With End With Next i MsgBox " Hallo " & vbNewLine & vbNewLine & _ " Automatic updating is currently" & vbNewLine & _ " turned off" Sheets("3_Data Form").Select Application.ScreenUpdating = True ' see screen updating End Sub 

好的,没有完全解决这个问题,但已经有解决方法来隐藏问题。

我在代码中添加了第二个缩放。

这看起来像是在操作缩放编码时,它只影响尚未设置在缩放值上的图纸,这就是为什么随机显示哪张图片正在打开,屏幕显示正常。 当两次更改它有效地导致他们都被“改变”,从而解决屏幕更新故障。

它现在可以工作,但明白这只是一个绷带。