簡體   English   中英

工作簿上的代碼_打開會影響工作表上圖像的初始視圖

[英]Code on Workbook_Open effecting initial view of images on worksheets

對於打開工作簿時的許多Worksheet.EnableCalculation我已經將Worksheet.EnableCalculation屬性設置為手動。 在此過程中,我還更改了每張紙上2種形狀的大小(將一張圖像放大一幅,然后縮小一幅)。 這些形狀還具有分配給它們的宏。 為了增加混亂,打開工作簿時可以用一張紙,而其余的則不能。 可以的工作表並不總是相同的工作表,我無法弄清當時的工作表與其他工作表有何不同。 它不是在保存時處於活動狀態。

這很好用,但是在打開工作簿時查看圖紙時,這些形狀以及圖紙上的所有其他形狀(也用作宏按鈕)似乎在圖紙上已移動位置(上下)。 但是,僅通過放大/縮小按鈕即可將其重新顯示在正確的位置。

我在Workbook_Open事件中添加了用於設置縮放Workbook_Open代碼,以設置縮放Workbook_Open ,但這並不能阻止此異常的出現。 將縮放比例放入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

好的,不能完全解決問題,但是有解決方法可以隱藏問題。

我在代碼中添加了第二個縮放。

似乎在執行縮放編碼時,它僅影響尚未設置在縮放值上的圖紙,這就是為什么在屏幕看起來確定的情況下,隨機打開哪些圖紙的原因。 兩次更改時,實際上會導致所有“更改”,從而解決了屏幕更新故障。

它現在可以使用,但是請欣賞它只是一個創可貼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM