2013-08-27 40 views
5

想要使用旋轉按鈕(ActiveX控件)顯示上一張或下一張工作表。點擊按鈕後,事件被成功觸發,所需表單被激活,但它包含原始表單中的一些元素(命令,圖形等),並將其顯示爲附加圖片。通過旋轉按鈕啓動不同的工作表

wrongly loaded sheet initial sheet with Spin buttons (right) 爲向下按鈕事件樣品的編號:

Private Sub SpinButton_JumpToWeek_SpinDown() 

Dim sh_num As String 
Dim tmp_num As Integer 

    Application.ScreenUpdating = False 
    Application.EnableEvents = False 

    SpinButton_JumpToWeek.Value = Range("B27").Value - 1 
    tmp_num = SpinButton_JumpToWeek.Value 

    ' Activate desired KTx sheet 
    sh_num = "KT" & tmp_num 

    Range("F27").Value = "" 'reset to blank 

    Sheets(sh_num).Activate 

    Application.ScreenUpdating = True 
    Application.EnableEvents = True 

End Sub 

要覆蓋此效果我必須手動選擇(激活)的另一片材,然後再次選擇所需的片材。我也嘗試使用宏自動化此解決方法,但不幸的是它不起作用。

有趣的是,如果我在調試模式下執行代碼(使用斷點和逐行逐行),則不會發生此問題。

令人驚訝的是,如果我試圖通過向定義的單元格中寫入值(工作表名稱索引)(即使用Worksheet_Change事件)來顯示上一頁/下一頁,那麼我就沒有這樣的問題。所需的頁面正確顯示。看照片。此evententer圖像的描述在這裏

enter image description here

示例代碼:

Private Sub Worksheet_Change(ByVal Target As Range) 

Dim sh_num As String 

    Application.ScreenUpdating = False 
    Application.EnableEvents = False 

    If Range("F27").Value > 0 Then 
' Activate desired KTx sheet 
    sh_num = "KT" & Range("F27").Value 
    Range("F27").Value = "" 'reset to blank 

    Sheets(sh_num).Activate 
    End If 


    Application.ScreenUpdating = True 
    Application.EnableEvents = True 

End Sub 

我需要使用旋轉按鈕,因爲它是速度更快,讓我跳過一些表(例如,如果這些不有數據)。 32位和64位Excel都會出現此問題。

做某人一個想法爲什麼發生這個問題和解決方法?我是否必須更改Excel中的某些設置或系統屬性?任何幫助將不勝感激。

@mehow 由於大量的單詞,我在此追加我的意見。

  1. 我按照你的建議,並試圖插入主動控制「Microsoft Office電子表格」的UserForm的例子。我發現這對我的情況來說不是一個好的解決方案,因爲當用戶將值插入到單元格中時,此類表單的響應速度相對較慢(即使在像我這樣的快速PC上)。此外,這會使我相當簡單的* .xlsm工作簿複雜化,它有50多張(每週1張,這些表的內容隨後連接到主表),並且完全符合我的基本需求(與當然這個旋鈕除外)。

在我看來,可能有必要操縱某種系統屬性(例如Application.ScreenUpdating技巧),但我沒有足夠的VBA知識來找到它。

  1. 爲了清楚地解釋我的問題,我需要分享我的示例工作簿,但我不知道如何將其上傳到此論壇。不幸的是,我不能在這個論壇上成功上傳/顯示圖片(由於我的評分低),這也會有很大的幫助。

順便說一句,我也看不到在這個論壇的其他問題上的圖像。 。由於在瀏覽器中缺少插件,是否會發生此問題?

+0

你有沒有考慮使用用戶窗體和顯示部分牀單上呢?爲了得到一個想法請參閱[this](http://stackoverflow.com/questions/17406319/display-a-part-of-an-excel-sheet-on-a-userform-using-vba/17407415#17407415) – 2013-08-27 13:34:46

+0

「不幸的是,它不起作用」是什麼意思?它失敗了什麼? – enderland

+0

@mehow我寫了一個模擬我的「手動」解決方法的VBA代碼,但其響應不幸無效 – mcerna2

回答

1

您可以使用一個簡單的一招......之前「Application.screenupdating =真」,你可以插入兩行:

ActiveWindow.SmallScroll Down:=-100
ActiveWindow.SmallScroll Up:=100

+0

不幸的是這對我無效 - 就像我試圖切換下一張紙一樣 – mcerna2