ActiveFormが有るか無いかを判定したいのですがどうやって聞けばよいのでしょうか?
If Screen.ActiveForm.Name = "" Then
でも
If Screen.ActiveForm = Nothing Then
でも、『型が違う』と怒られます。
簡単な方法があればぜひ教えて頂きたいです。

A 回答 (1件)

よくコンパイル通りましたね。


If Screen.ActiveForm = Nothing Then
ではなく、
If Screen.ActiveForm Is Nothing Then
じゃないと、コンパイルを通らなかったです。

ちなみにIs Nothingを使うとフォームがアンロードされた時点で引っ掛けられます。
<試したプログラム>
フォーム2枚。Form1上にLabel1とTimer1を貼り付け。
タイマーはInterval=100ms。
Forma2を消すとNothingとなります。

Private Sub Form_Load()
Form2.Show
End Sub
Private Sub Timer1_Timer()
If Screen.ActiveForm Is Nothing Then
Label1 = "Nothing"
Else
Label1 = Screen.ActiveForm.Name
End If
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございました。
おっしゃる通り、コンパイルエラーです!!!

お礼日時:2001/01/04 09:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVB.NETでアクティブなformを知りたい

VB.NETでform1,2,3を開き
今アクティブなformが1か2か3かを知りたいのですが。
(form1でaに値をセット,form2でbに値セット,form3でアクティブなformnの変数で計算 form1ならaを使いform2ならbを使う)

Aベストアンサー

単純に、

「Form.ActiveForm プロパティ 」
(http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.form.activeform(VS.80).aspx)

では駄目だったんでしょうか?

#「active form」で検索したら、すぐにHITしましたけど・・・

QForm_Load と Form_Activate のタイミング

あるデータ入力アプリを作っています。
親フォーム(Form0)で番号を決め、子フォーム(Form1,Form2,Form3,Form4) でデータ入力し、それぞれの子フォームを出るとき(Unload Me) に、変数にsaveしています。それを親フォーム(Form0)で登録を選択したとき、入力データをチェックしてDBに格納しています。
すでにDB格納済のデータの場合、親フォームでDBから変数に読み込み、子フォームのForm_Loadで展開しています。
そこで困っているのは、親と子のフォームを行き来するときにデータの表示で前のが残っていたり、消えてしまったりします。
Form_LoadとForm_Activateを通過するタイミングが、ちゃんと理解できていないためコードの記述位置が不適切なのだと思います。

Form_Load と Form_Activate の実行タイミングについて、お教えください。

Aベストアンサー

Form_Loadは、フォームがロードされたときです。
ロードされる条件は、
1.フォームがスタートアップに指定されているとき、アプリが実行された直後。
2.Show メソッドが呼ばれたとき
3.Loadメソッドが呼ばれたとき
4.フォームに貼り付けられたコントロールのプロパティが参照されたとき
5.フォームに貼り付けられたコントロールのメソッドが呼ばれたとき
です。

ただし、一度ロードされると、Unloadされるまで呼ばれません。


Form_Activateは、フォームがアクティブになったとき、つまり、キャプション(ウィンドウのタイトルバー)の色が変わったときです。

Q現在アクティブなフォーム名を取得するには

アクセスの標準モジュールでのプロシージャーで、現在アクティブなフォーム名を取得したいです。
フォームモジュールなら、Me.Nameでイケますが、すべてのフォームから使えるように、
標準モジュールで作りたいのですが、どうすればいいでしょう?


Debug.Print ActiveForm.Name


とすると、コンパイルエラーになります。
Debug.Print ActiveForms.Nameでも同じです。ご回答よろしくお願いします。

Aベストアンサー

screen.activeform.name
です。

Q上下の位置揃えについて

オブジェクトの TEXTやLABELで文字を左揃え、中央揃え、右揃えはALIGNMENTプロパティを指定しますが、上下の位置指定はどのようにすれば良いか教えてください。
いつも上揃えになってしまいます。
よろしくお願いします。

Aベストアンサー

色つきのラベルなのに文字位置が上詰で気になる!っていうときは
姑息な手段ですが、背景を透明に設定したラベルを
上に重ねると好きな位置に文字を表示できます。
テキストボックスの場合は下のテキストボックスを
Enable = Falseにしておき、上に重ねる方を
フラットにして実線を消しておくとそれらしくなります。
でもオブジェクトがたくさんあるとめんどくさいですよね…

Q【VB6.0】 あるフォームから他のフォームへ値を受け渡したい

タイトルの通り、あるフォームから他のフォームに値の受け渡しを行いたいのですが、どのようにしたらよいのでしょうか??

以下のようなコードできんのかなぁ~~って、やったみだけど、
むりでした。。サンプルコード内でいうParamsのような値を
受け渡しさせたいのですが・・・。ご存知の方、申し訳ないですが
教えて頂けると非常にありがたいです。それと、、私はVB初心者です。

---FormA---
Public Params as new Params

Private sub Command1_Click()
Call Me.Hide
FormB.Show vbModeless, Me
End sub

---FormB---
Private Sub Form_Load()
'Owner.Paramsのような形で参照できるかと思ったができませんでした。

End sub

Aベストアンサー

こんにちは。

 下記サイトをご参照下さい。
  http://www005.upp.so-net.ne.jp/h-masuda/vb6/vb6first/forms040.html
   簡単に渡すには、グローバル変数を使えばよいと思います。
   別な方法では、FprmAにPrrams変数を参照するためのPublic関数を作り、FormBからその関数を呼び出して参照することも出来ると思います。

では。

QFormの表示状態の取得

Form1がすでに表示済みなのかどうかを取得する方法を教えてください。よろしくお願いします。

Aベストアンサー

UserFormに限らず、表示可能なObjectの表示状態は、Visibleを調べれば判ります

なので、
MsgBox UserForm1.Visible
で、判ると思います
通常はIf文などで、切り分けると思いますが

因みに、全てのUserFormはUserFormsと扱う事ができますので、以下の方法で、表示中のFormが調べられます

  Dim MyForms
  
  For Each MyForms In UserForms
    If MyForms.Visible = True Then
      MsgBox MyForms.Name
    End If
  Next MyForms

QExcelVBAのコントロールの種類の取得方法

ExcelVBAのフォームについての質問です。
コントロールの種類(TextBox,ComboBox等)を取得するプログラムがあれば教えて下さい。
何をしたいかと言うと、Enabledを切り替えるサブルーチンを作りたいのですが、
TextBox等のwindow型のコントロールの場合は、BackColorも変えたいので、条件分岐させたいのです。
ちなみに今は、コントロール名にtxtやcmb等をつけて判断させています。
何か良い方法があれば教えて下さい。

Aベストアンサー

TypeName関数を使ってみてください。

'-------------------------------------- 
Private Sub CommandButton1_Click()
  Dim myCtrl As Control
  For Each myCtrl In Me.Controls
    Select Case TypeName(myCtrl)
     Case "TextBox"
       myCtrl.BackColor = RGB(255, 0, 0)
     Case "Label"

     Case "ListBox"
       myCtrl.BackColor = RGB(0, 255, 0)
     Case "CheckBox"

     Case "ComboBox"

     Case "CommandButton"

    End Select
  Next myCtrl
End Sub
'------------------------------------------
 
勘違いでしたらご容赦願います。
以上ここまで。
 

TypeName関数を使ってみてください。

'-------------------------------------- 
Private Sub CommandButton1_Click()
  Dim myCtrl As Control
  For Each myCtrl In Me.Controls
    Select Case TypeName(myCtrl)
     Case "TextBox"
       myCtrl.BackColor = RGB(255, 0, 0)
     Case "Label"

     Case "ListBox"
       myCtrl.BackColor = RGB(0, 255, 0)
     Case "CheckBox"

     Case "ComboBox"

     Case "CommandBu...続きを読む

Q現在アクティブになっているオブジェクトを取得

現在アクティブになっているオブジェクトを取得する方法は?アクセスです

Sub マクロ()
DoCmd.MoveSize 0, 0
End Sub

でフォームの位置を指定できますが、
現在アクティブになって言えるオブジェクトに対して行われますよね。

例えばデータベースウインドウを選択した後に実行すれば
データベースウインドウに対して行われますよね。

そこで現在アクティブなオブジェクト名を取得したいのですがそのようなコードはありますか?

DoCmdをウォッチ式に追加して観察しましたが
現在アクティブなオブジェクト名は表示されませんでした。

DoCmd.SelectObjectacForm,フォーム1

でアクティブにできる事はしっています。ご回答よろしくお願いします。

Aベストアンサー

> 現在アクティブなオブジェクト名を取得したいのですがそのようなコードはありますか?

対象がFormオブジェクト(及びそのControlオブジェクト)に限定されますが、以下のコードで
取得が可能です:

<アクティブなフォームの名前>
 Screen.ActiveForm.Name
 (「Screen.ActiveForm」は、Formオブジェクトとして扱えます:
  「Set Frm = Screen.ActiveForm」として、Form型の変数への格納が可能)
 例)
  MsgBox Screen.ActiveForm.Name

<アクティブなコントロールの名前>
 Screen.ActiveControl.Name
 (こちらも同様に「Screen.ActiveControl」はControlオブジェクトとして扱えます)
 例)
  MsgBox Screen.ActiveControl.Name


詳しくは、ヘルプの「Screenオブジェクト」の項目などを参照してみてください。
(直前にフォーカスを持っていたコントロールを取得する「PreviousControl」なんて
 ものもあります)

> 現在アクティブなオブジェクト名を取得したいのですがそのようなコードはありますか?

対象がFormオブジェクト(及びそのControlオブジェクト)に限定されますが、以下のコードで
取得が可能です:

<アクティブなフォームの名前>
 Screen.ActiveForm.Name
 (「Screen.ActiveForm」は、Formオブジェクトとして扱えます:
  「Set Frm = Screen.ActiveForm」として、Form型の変数への格納が可能)
 例)
  MsgBox Screen.ActiveForm.Name

<アクティブなコントロールの名前>
 Screen.ActiveControl.Name
 (...続きを読む

QTimerイベントについて

ある処理を30秒おきに実行します。その結果が正常終了するまで繰り返します。正常終了すれば次の処理へ移ります。が、5分間正常終了しなければ次の処理に移るというロジックを考えているのですが、思いつきません。
現在、Timerコントロールを使用してます。TimerをONには出来ますが、処理が自動的に次の処理へ移ってしまう状況です。Timerイベントを走らせた後に結果が分かるまで処理を一時中断したいんです。どなたか助言をお願いします。

Aベストアンサー

こんにちは、honiyonです。

フラグを使えば良いと思います。
グローバル変数を1つ用意します。(例:FLAG)

----タイマー内----
~いろんな処理~
FLAG = 1


----メイン内----
FLAG = 0
~ここでFLAG=0の間ループする~
do
DoEvents
until (FLAG<>0)



最近VBは使ってないので命令語忘れてます(^^;
命令が違う、記述が誤ってるなどご容赦ください(..

参考になれば幸いです(..

QEXCEL VBAで計算値を四捨五入、切り上げ、切捨てする方法

ネットで探してみたのですが、計算結果を四捨五入して特定のセルを
返すにはどうしたらいいのでしょうか?

Sub hokangosa()

Dim ZPS As Double
Dim ZPOS As Double
Dim DMN As Double
MsgBox (" >>> 補間誤差自動計算 <<< ")
MsgBox (" >>> 初期値入力します <<< ")
ZPS = InputBox(">>> ステップを入力してください<<<")
ZPOS = Sheet1.Cells(22, 4).Value
DMN = ZPOS / ZPS
Sheet1.Cells(23, 6).Value = DMN
End Sub

ここでDMNの値を四捨五入したいです。

またこれとは別に切上げ、切捨ても教えていただけるとありがたいです。

Aベストアンサー

DMN = Application.WorksheetFunction.Round(ZPOS / ZPS, 0)
で、四捨五入
DMN = Application.RoundDown(ZPOS / ZPS, 0)
で切り捨て
DMN = Application.RoundUp(ZPOS / ZPS, 0)
で切り上げです。

引数で、対象桁を変更できます。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング