2017-02-17 11 views
-3

私は以前この質問をしましたが、私は不適切な方法でこの質問をしたかどうかわかりません。助けてください!!あなたがこの質問に投票することができれば、それは素晴らしいだろう!そんなにうれしいです。以下は私の以前の質問です。本物の技術的な問題ではありません

私はExcelファイルをダブルクリックすると、それは私にエラーを与えたこのマクロを実行しようとすると、私は、エクセルVBAを使用してユーザーフォームを作成:ポップアップウィンドウに表示

タイプdismatch

フォーム名がMainFormで、ThisWorkbookのコードは以下の通りです:

Private Sub Workbook_Open()  
    ThisWorkbook.Application.Visible = False 
    MainForm.Show 
'MainForm is a Userform that former person created 
End Sub 

私はこの問題を解決するにはどうすればよい...タイプと間違って何が起こっているか分からないのですか?

+0

デバッグモードで実行します。エラーが実際に発生する場所を確認するためにステップバイステップで実行します。 –

+0

ThisWorkbook.Application.Visible = Falseとは何ですか?あなたは何を達成しようとしていますか? –

+0

@Shai Radoは、すべてのインスタンスを非表示にして、最終的にはユーザーフォームのみが表示されるようにします。 –

答えて

-1

私は自分で考え出しましたが、エラーはフォームに残っているキャッシュ(または古いデータ)が原因です。私はフォームをクリアしてこのファイルを再度開き、正常に動作しています!

+0

これはこの場合解決する方法です...しかし、私は正確な問題を知りませんでした。私の質問は編集後に見てください。 –

1

私は、ユーザーフォームを表示または非表示にしようとしているときに問題が発生している可能性があります。私は自分のコードで複製するエラーを得ることはできませんが、私はこれが前に起こったと信じています。オブジェクトとしてフォームを作成すると、問題を解決することがあります。

Dim oForm as MainForm 
Set oForm = New MainForm 

oForm.Show 

はまた、私はあなたが(あなたのelse文のために)それを含むブックを開いているときのMainFormが既に開いだろう、なぜわかりません。ワークブックの開始と終了のイベントの間に何らかの形で持続しない限り、ユーザーフォームを非表示にする必要はありません(これは、コードを使用していることの問題です)。

+1

'As Object'を宣言すると、それ以降のすべての呼び出しが実行時にレイトバインド/解決されます。つまり、' .Show'に対してintellisenseを取得しないので、 '.Snow'と入力するとコードがうまくコンパイルされます。代わりに...なぜそれを 'MainForm'として宣言しませんか? –

+0

それは間違いなく良いでしょう。私は、MainFormオブジェクトがドキュメントのスコープ内に存在すると、オブジェクトタイプとして使用できることを完全に忘れていました。これを修正するコードを編集しました。 –

+0

FWIW私は、質問が答えることができないと思う - 実行時エラーの原因となるフォームの 'Activate'ハンドラにコードが存在する可能性があることはすべて知っているから... OPはどこにエラーが起きているかを教えてくれない私たちができるのは投機的なことだけです。私は、*デフォルトのインスタンス*からではなく、フォームの新しいインスタンスを処理することが(もっと)良い方法であることに同意します。そのためにupvoteを持ってください...しかし、私はそれが何かを大きく変えるとは思わないOPの具体的な問題として、 –

関連する問題