2012-04-09 5 views
1

私は、ユーザーが特定のシートに行くときにユーザーフォームを開くExcelアプリケーションを作成しています。ユーザーがこのシートをクリックすると、フォームが表示されます。しかし、私はシートに何が入っているのかをユーザーが見られるようにしたくありません。私はちょうど遅れなしに開くか、またはそのシートに既にロードされていることを望みます。これを行う方法はありますか?Excel VBAフォームの遅れ

ありがとうございました。

+1

あなたは、ユーザーがシート上のデータを表示したくないと言うとき、あなたは、フォームからのデータを意味していますが、シートの上にいるのですか?もしそうなら、フォームを開くだけでシートを作ってみませんか? –

+1

シートに含まれている内容をユーザーが見られないようにするには、そのシートをクリックしてフォームを開く必要があるのはなぜですか?フォームを開くために別のメカニズムを使用できますか?他のシートのボタン、おそらく? –

+0

セルはアプリケーションの残りの部分に依存しているため、シートのデータを変更することはできません。人々はこのタブに行くのに多少慣れているので、このタブをクリックしてそこから行くのはいいでしょう。長い話の種類...ユーザーがシートの一番下にあるタブをクリックしたときの動作を編集するにはどうしてですか?シートを開く代わりに、フォームを開きますか? – thebiglebowski11

答えて

2

以下は、私があなたの求めるものに近づいています。

デフォルト名が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 
2

あなたが最初に行くことによって、ワークシートのすべてのセルを非表示にすることができます:

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 

ここでの利点は、処理中に行と列の高さと幅が失われないことです。元の形式に正確に復元されます。

次のようになります。 enter image description here

+0

うまくやって、私はそれを私のツールボックスに入れています。 – Jesse

+0

私はあなたがしたことが好きですが、worksheet_activate関数で実装しようとするとエラーが表示されます:「Rangeクラスの隠しプロパティを設定できません」...考えていますか? – thebiglebowski11

+0

正確なコードを投稿して(特に上記のコードと異なる場合)、別のコメントを残して私に通知すると、私は自分のマシンでそれをテストし、何がうまくいかないかを見ます。上記とまったく同じようにすればうまくいくはずです。一部のアクションは、特定のExcelイベントの実行中に実行できないことに注意してください。これは、Worksheet_Activateイベントが発生する前にやりたいこと、またはおそらくそれを使用してディスパッチすることによって可能性が高いです。 'Application.OnTime Now、" YourMethodName " – Alain