私は、ユーザーが特定のシートに行くときにユーザーフォームを開くExcelアプリケーションを作成しています。ユーザーがこのシートをクリックすると、フォームが表示されます。しかし、私はシートに何が入っているのかをユーザーが見られるようにしたくありません。私はちょうど遅れなしに開くか、またはそのシートに既にロードされていることを望みます。これを行う方法はありますか?Excel VBAフォームの遅れ
ありがとうございました。
私は、ユーザーが特定のシートに行くときにユーザーフォームを開くExcelアプリケーションを作成しています。ユーザーがこのシートをクリックすると、フォームが表示されます。しかし、私はシートに何が入っているのかをユーザーが見られるようにしたくありません。私はちょうど遅れなしに開くか、またはそのシートに既にロードされていることを望みます。これを行う方法はありますか?Excel VBAフォームの遅れ
ありがとうございました。
以下は、私があなたの求めるものに近づいています。
デフォルト名がUserForm1
のフォームを作成しました。以下のコードをThisWorkbook
に含めました。
ユーザーが "Sheet2"タブをクリックすると、コードはUserForm1
を読み込み、最大化して表示します。フォームが終了すると、コードは "Sheet3"に切り替わります。
フォームが表示される前に「Sheet2」が数秒間表示されるため、これは仕様と正確に一致しません。私はフォームをプリロードしようとしました。 SheetActivateイベントルーチンを終了するまで、私はSheetDeactivateイベントルーチンで画面の更新をオフに切り替えて、再度オンにしないようにしました。しかし私が試したことは、その短いフラッシュを防ぎません。
このコードを試して十分だと判断してください。
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Sh.Name = "Sheet2" Then
Load UserForm1
With UserForm1
.Width = Application.Width
.Height = Application.Height
.Show
End With
Application.EnableEvents = False ' Surpress SheetActivate event
Worksheets("Sheet3").Activate
Application.EnableEvents = True
End If
End Sub
あなたが最初に行くことによって、ワークシートのすべてのセルを非表示にすることができます:
Worksheets("Sheet3").Cells.EntireRow.Hidden = True
Worksheets("Sheet3").Cells.EntireColumn.Hidden = True
MyUserForm.Show 'You can show modally here if you like
あなたは再びユーザーにコンテンツを表示する準備ができたら、あなたが使用することができます。
MyUserForm.Hide
Worksheets("Sheet3").Cells.EntireRow.Hidden = False
Worksheets("Sheet3").Cells.EntireColumn.Hidden = False
ここでの利点は、処理中に行と列の高さと幅が失われないことです。元の形式に正確に復元されます。
次のようになります。
うまくやって、私はそれを私のツールボックスに入れています。 – Jesse
私はあなたがしたことが好きですが、worksheet_activate関数で実装しようとするとエラーが表示されます:「Rangeクラスの隠しプロパティを設定できません」...考えていますか? – thebiglebowski11
正確なコードを投稿して(特に上記のコードと異なる場合)、別のコメントを残して私に通知すると、私は自分のマシンでそれをテストし、何がうまくいかないかを見ます。上記とまったく同じようにすればうまくいくはずです。一部のアクションは、特定のExcelイベントの実行中に実行できないことに注意してください。これは、Worksheet_Activateイベントが発生する前にやりたいこと、またはおそらくそれを使用してディスパッチすることによって可能性が高いです。 'Application.OnTime Now、" YourMethodName " – Alain
あなたは、ユーザーがシート上のデータを表示したくないと言うとき、あなたは、フォームからのデータを意味していますが、シートの上にいるのですか?もしそうなら、フォームを開くだけでシートを作ってみませんか? –
シートに含まれている内容をユーザーが見られないようにするには、そのシートをクリックしてフォームを開く必要があるのはなぜですか?フォームを開くために別のメカニズムを使用できますか?他のシートのボタン、おそらく? –
セルはアプリケーションの残りの部分に依存しているため、シートのデータを変更することはできません。人々はこのタブに行くのに多少慣れているので、このタブをクリックしてそこから行くのはいいでしょう。長い話の種類...ユーザーがシートの一番下にあるタブをクリックしたときの動作を編集するにはどうしてですか?シートを開く代わりに、フォームを開きますか? – thebiglebowski11