5

スピン ボタン (ActiveX コントロール) を使用して前または次のシートを表示したい。ボタンをクリックすると、イベントが正常にトリガーされ、目的のシートがアクティブになりますが、元のシートの一部の要素 (コマンド、グラフなど) が保持され、追加の画像として表示されます。

間違ってロードされたシート スピンボタン付きの最初のシート (右) 下ボタンイベントのサンプルコード:

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 イベントを使用して) 前/次のシートを表示しようとすると、このような問題は発生しません。目的のページが正しく表示されます。写真を参照してください。

ここに画像の説明を入力

このイベントのサンプル コードここに画像の説明を入力してください:

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 スプレッドシート」を挿入したユーザー フォームの例を試しました。ユーザーがセルに値を挿入すると、そのようなシートの応答が(私のような高速PCでも)比較的遅いため、これは私の場合には良い解決策ではないことがわかりました。さらに、これは私のかなり単純な *.xlsm ワークブックを非常に複雑にします。このワークブックには 50 を超えるシート (毎週 1 シート、これらのシートの内容はメイン シートにリンクされます) があり、私の基本的な必需品を完全に満たしています (もちろん、このスピンボタンは例外です)。

私の意見では、ある種のシステム プロパティ (Application.ScreenUpdating トリックなど) を操作する必要があるかもしれませんが、それを見つけるのに十分な VBA の知識がありません。

  1. 質問を明確に説明するには、サンプル ワークブックを共有する必要がありますが、このフォーラムにアップロードする方法がわかりません。残念ながら、このフォーラムで画像を正常にアップロード/表示できません (評価が低いため)。これも大いに役立ちます。

ところで、このフォーラムの他の質問の画像も表示されません。. この問題は、Web ブラウザーにプラグインがないために発生する可能性がありますか?

4

1 に答える 1

1

簡単なトリックを使用できます...「Application.screenupdating = true」の前に、次の2行を挿入できます。

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

于 2013-09-13T13:17:05.643 に答える