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と関連する良く見られている質問

Qonline-shopping をする際、

online-shopping をする際、
ファッションで 【サファリ系】 を検索すると、あまり引っかかってこなぃのですが、
【サファリ系:ファッション】 に別名があったら教えて下さい! m(_ _)m

一般的な呼ばれ方が無ぃようでしたら、引っかかってくるであろぅワード★でもよぃので、
検索アイディアをくださると助かります!!

Aベストアンサー

動物柄、アニマル、サイドゴア、迷彩、”サファリ”(系をはずす。)、アフリカ・・・・

御自身で連想ゲームのつもりでキーワード検索楽しんで!

QIf Not c Is Nothing Then ~延々処理が続く~ End If

質問というか相談というか
VBAで下記のようなコードをよく見ますし、私自身もこれで書いてます。

For i= 1 to 10
set c=Range.Find(”いろは")
If Not c Is Nothing Then


処理が続く


End If
Next i

cが見つからなかったら、さっさと次の i に進む場合の処理です。Ifの字下げがず~~っと延々続き、最後のNext iの直前でEnd If です。
・Exit For はあるのに 途中Next iは出来ない
・Goto 使って書くと「スパゲティプログラムだ」とか言われる
正直言って、上記コードとGotoスパゲティで可読性に差異があるとは思えません。何でもかんでもGotoはダメていう風潮がおかしいように思えます。

みなさんどうやって書いてますか?

Aベストアンサー

こんにちは。

>Goto 使って書くと「スパゲティプログラムだ」とか言われる
どっちかというと、今は、ネットの中で、某VBA系の専門掲示板で、他人のコードを罵る時に使う用語ですね。Goto を使ったから、スパゲティーと短絡して使うのに、その言った本人は、エラー処理ひとつ施していない隙だらけのコードだということが多いのです。「スパゲティプログラム」は、◯◯の一つ覚えの用語だと思います。

>For i= 1 to 10
>set c=Range.Find(”いろは")
>If Not c Is Nothing Then

>~
>処理が続く
>~
>
>End If
>Next i

これって、よく見るとおっしゃっていますが、ひとつ例外に、いわゆる「ブルートフォースアタック(総当り制)」のコードがありますね。それは、Goto 以外に抜け出せる方法がありませんね。「深いネストはするな」という禁を犯しているのだから、Goto 以前のものがあります。(何に使うかはご存知だと思いますし、それをとやかく言う人はいないでしょう。)

これを書き換え、再帰を使うと良いとか言う人もいるのでしょうけれども、そういうのは、知識だけで実際にやったことがない人の話だと思います。「スパゲティ」とか知らない人に、比べさせれば、再帰などを使った方法は、遅くてダメ出しされるのは目に見えています。特殊な例ですが。

ご質問で、実際の私は、内容にもよりますが、
Private flg As Boolean

Sub Main()
On Error Goto ErrHandler
For i= 1 to 10
 Call subRutine(findTxt)
 If flg Then Exit For
Next i
Exit Sub

ErrHandler:
処理
End Sub
'ここの中身はテンプレート化してあります。
Private Sub subRutine(ByVal findTxt) または、Public
'処理
End Sub

としているはずで、モジュールレベルの変数を、flg とし、サブルーチンの中に置いて、目的がかなったら、Flgは、Trueになって、ループから抜け出すようにします。

サブルーチン側では、End ステートメントを使用することさえもあります。(テンプレート化しているのは、Findメソッド、RegExpの正規表現、Sortメソッド、Dictionary とSortLists などがあります。[MZ-Tools 3.0]を使用)

GOTO は、構造化プログラムが登場した時に、排除するように言われてきたものです。古い時代の人は、GOTOに逃げたくなるのを抑えるために、「GOTO」を使うなって、肝に命じてきたのです。しかし、結局、Goto は、なくならなかったのは、一つには、ErrHandlerを使った、エラートラップのせいもあります。だから、Goto を書かないでErr.Raise (513~)で飛ばす方法がありますが、あまり使う人はいません。

ところで、
「スパゲティプログラム」という話に振られると、私は自信がありません。
読みやすさ(可読性)の対極になるものでしょうけれども、誰に対して言っているものか、ということです。私の大事にしている本の中に、アスキーの『QuickBASICプログラミング道場』(1991年)という本があります。

---引用
・本道場で推奨するプログラミングスタイル (p25~)

1.変数・定数・プロシージャーの命名法 (変数の型のサフィックスは使うな)
2.インデントを付けるべし
3.メインプロシージャは短くすべし
4.プロシージャは短くすべし
5.長いブロックはプロシージャーにすべし
6.汎用性のあるプロシージャーを作るべし
7.定数は活用すべし
8.GOTOは乱用(濫用)すべからず。●
 従来のBASICを使ってきた人の中には、GOTO文を多用する人がいるようだ。GOTO文はそのときは便利なように思うが、あとになってリストを眺めてみると、どこに飛んでいるか分からなくなることが多い。……わけがわからない最低の"スパゲティプログラム"になってしまう。
 【例】GOTO文をDOループに置き換える
----引用終わり

現代でも通用するというよりも、その言葉が生まれた時代背景がありますから、必ずしも、GOTOが問題だということではなさそうです。Goto を使わないということにこだわると、逆に墓穴を掘ることになります。

それと、DO ループにするというのは、DO ~ LOOPの間に緊張感(?)は生まれるけれども、無限ループを生み出しやすくなるのです。その頃はそれで良かったかもしれませんが、もうESCでは止まりません。今は必ずしも認められるものではありません。

それと、記録マクロを、そのままVBAプロシージャーに用いるのは、絶対にダメなのですよね。本当のスパゲティプログラムになってしまいます。ベタ書きになってしまうからで、一度、そういうコードを直してくれと言われましたが、怒りを抑えて、丁重にお断りました。

こんにちは。

>Goto 使って書くと「スパゲティプログラムだ」とか言われる
どっちかというと、今は、ネットの中で、某VBA系の専門掲示板で、他人のコードを罵る時に使う用語ですね。Goto を使ったから、スパゲティーと短絡して使うのに、その言った本人は、エラー処理ひとつ施していない隙だらけのコードだということが多いのです。「スパゲティプログラム」は、◯◯の一つ覚えの用語だと思います。

>For i= 1 to 10
>set c=Range.Find(”いろは")
>If Not c Is Nothing Then

>~
>処理が続く
>~
>
>End If
>Next...続きを読む

Qベビー服のOnline Shoppingで良いサイトご存知ですか?

ベビー服のオンラインショッピングで、良いサイトをご存知の方おられますか?ジャンルは問いません。服だけでなく、肌着のショッピングができるところも探しています。

よければドシドシ教えてください♪

Aベストアンサー

私がよく見るところは、
赤すぐ(カワイイものがいっぱい)
http://akasugu.net/akasugu/
ベビーズブレス(ここで扱ってるベビーズオウンのラップアップが大好き。他のブランドもカワイイ)
http://www.babys-b.com/
レモール(安いものが多い)
http://www.baby.ac/index.htm
というところでしょうか。

娘のものはけっこう「赤すぐ」で買っていました。今妊婦なのでまたいろいろ見てイメージをふくらませている最中です。

Q条件付きコンパイル: #IF 1 Then と #IF 0 Then

条件付コンパイルで、
『#If 1 Then』と『#If 0 Then』の条件の違いを教えてください。


『#If ○○○=1 Then』などの場合はわかるのですが、
単に『#If 1 Then』の場合は何をもって真となるのでしょうか?

よろしくお願いいたします。

Aベストアンサー

条件式は、強制的に「True」又は「False」に解釈されます。

で、「数値」を「True」又は「False」に解釈する場合、
「0」は「False」、「0以外」は「True」になります。
(http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/script56/html/vsfctcbool.asp)

つまり、
『#If 1 Then』は、「必ずTrue」=常に有効
『#If 0 Then』は、「必ずFalse」=常に無効
に成ります。

QPrice is cheap/low. について

Hi ,

I found the follwing exercise on English text book and am puzzled.

■The competitor’s prices are always a little ----- ours.
(A) cheap  *(B)cheaper than  (C) morecheap  (D) most cheap

I learned "price is cheap" is wrong because price is not thing and we have to say "price is low."
Is this question right as an exercise of English text book?

Your comments are highly appreciated.

Aベストアンサー

    #2です。補足です。

>>cheap priceという具合に cheapを名詞にかかる形容詞として使ったものは見つかるのですがpriceを主語としてprice is cheapのようにcheapを補語として使ってよいものかがわかりません。

    家内がネイティブですから聞いてみました。
「The price is cheap. って言う?」ときいたら、「人は言う、私は言わない、なぜか分からない」と言う答えでした。

    僕は生粋の日本人でネイティブではありませんが、やはり「人が言うのは聞いたことがある、僕は言わない、理由は少なくとも二つある」という意見です。

1。理由1
  cheap  には既に「値段が安い」という意味があるので The price is cheap. と言うのは頭痛が痛く、馬から落ちて落馬したようなものです。

2。理由2
   cheap には「価値判断」が既に入っていて使用範囲は low に比べて遥かに広い。
   He is cheap. 彼は倹約家だ(辞書的定義)>あんなドケチが鐚一文だって出す訳ないさ。
   Talk is cheap. 談話は容易だ”(辞書的定義)> 口ばっかりで何にもしないに決まってるじゃないか。

    纏めますと
>priceを主語としてprice is cheapのようにcheapを補語として使ってよいものかがわかりません。

 と言うご質問には、文法的には補語として使って何の問題もありません。実際使う場合も人によっては多少の抵抗を感じる人(家内や僕)もいますが、些細なことで、どうでもいいんじゃないかと思います。

    #2です。補足です。

>>cheap priceという具合に cheapを名詞にかかる形容詞として使ったものは見つかるのですがpriceを主語としてprice is cheapのようにcheapを補語として使ってよいものかがわかりません。

    家内がネイティブですから聞いてみました。
「The price is cheap. って言う?」ときいたら、「人は言う、私は言わない、なぜか分からない」と言う答えでした。

    僕は生粋の日本人でネイティブではありませんが、やはり「人が言うのは聞いたことがある、僕は言わない...続きを読む

QIf myCityBUNRUINO = 2 Then Cells(myPrefNO + 3 - 47 - myCityNu, 24) = myTantou こちらについて教えていただきたいです。

myTorikomibi = Range("A2").Value
If myCityBUNRUINO = 0 Then Cells(myPrefNO + 3, 4) = myTantou
If myCityBUNRUINO = 1 Then Cells(myPrefNO + 3 - 47, 14) = myTantou
If myCityBUNRUINO = 2 Then Cells(myPrefNO + 3 - 47 - myCityNu, 24) = myTantou
For i = 1 To 3
If myCityBUNRUINO = 0 Then Cells(myPrefNO + 3, i + 4) = myTorikomibi
If myCityBUNRUINO = 1 Then Cells(myPrefNO + 3 - 47, i + 14) = myTorikomibi
If myCityBUNRUINO = 2 Then Cells(myPrefNO + 3 - 47 - myCityNu, i + 24) = myTorikomibi
Next i
マクロを編集しようとしましたところこちらが解読できづに困っています。
こちらだけとりだして実行しながら解読していますが混乱してしまっています。ご存知の方いらっしゃいましたら教えてください。Then以降がわかりません。よろしくお願いいたします。

myTorikomibi = Range("A2").Value
If myCityBUNRUINO = 0 Then Cells(myPrefNO + 3, 4) = myTantou
If myCityBUNRUINO = 1 Then Cells(myPrefNO + 3 - 47, 14) = myTantou
If myCityBUNRUINO = 2 Then Cells(myPrefNO + 3 - 47 - myCityNu, 24) = myTantou
For i = 1 To 3
If myCityBUNRUINO = 0 Then Cells(myPrefNO + 3, i + 4) = myTorikomibi
If myCityBUNRUINO = 1 Then Cells(myPrefNO + 3 - 47, i + 14) = myTorikomibi
If myCityBUNRUINO = 2 Then Cells...続きを読む

Aベストアンサー

こんにちは。maruru01です。

ヘルプはご覧になりましたか?
特に、Cellsについて。
Cellsは、

Cells(行番号, 列番号)

で、セルを参照します。
なので、各条件の時に、変数「myTantou」や「myTorikomibi」に格納されている値をそれらのセルに代入しているだけですが。
ただし、行番号が、

「myPrefNO + 3 - 47」
「myPrefNO + 3 - 47 - myCityNu」

などとちょっとややこしくなっていますが。
これも、変数「myPrefNO」「myCityNu」に入っている値から行番号が決まるというだけです。
例えば、
myPrefNO=60
myCityNu=2
なら、下の例は、
60+3-47-2=14
で、14行目となるということです。

QWhy is it OK for China or Japan ‥‥? that 以下の用法について

Economics: Why is it OK for China or Japan when they devalue their currency but horrible for Russia that they are going through it now?

経済学:日本と中国にとってなぜ貨幣価値を下げることが良いのですか?今 通り抜けているロシアにとっては恐ろしいこと なのに。

最後の"that"の用法、役割を教えてください。
they(ロシア)が今それ(貨幣価値下落)通り抜けている、ということでしょうか?


ちなみに‥‥
質問の答えはこちらです。

China and Japan are manufacturing economies. When you devalue the currency, exports become cheaper, this creates local jobs, and since people use local currency to pay for local stuff, this boosts the economy.

Russia is an oil economy. Because oil is a global commodity when you devalue the ruble, people don't buy more oil. Because Russia uses oil profits to import stuff, things become more expensive. The other problem with oil is that it is a capital intensive industry. It doesn't create that many jobs, and those jobs tend to be high skill rather than low skill.

Economics: Why is it OK for China or Japan when they devalue their currency but horrible for Russia that they are going through it now?

経済学:日本と中国にとってなぜ貨幣価値を下げることが良いのですか?今 通り抜けているロシアにとっては恐ろしいこと なのに。

最後の"that"の用法、役割を教えてください。
they(ロシア)が今それ(貨幣価値下落)通り抜けている、ということでしょうか?


ちなみに‥‥
質問の答えはこちらです。

China and Japan are manufacturing economies. When...続きを読む

Aベストアンサー

Why is it OK for China or Japan when they devalue their currency but (why is it) horrible for Russia that they are going through it now?

のようにbutの後の why is it が省略されています。訳は『どうして日本か中国が通貨切り下げをすることは良いのに、ロシアが現在経験しつつあることはロシアにとっては恐ろしいことなのか? この場合のthatは特別変なthat ではなく it is horrible that ~ 『~であることは恐ろしい』ということです。英文の答えの部分の通りロシアは石油の輸出が国の大きな収入を占めルーブルの価値が下がると困るということです。

Q例外ってIf文の中に入れますか?If文の外でTry...Catchしますか??

例外ってIf文の中に入れますか?If文の外でTry...Catchしますか??

Sub Cal(By Val Data As String)

 If ( Flag = "hoge") Then
 Total = js.Eval(Work)
 End If
End Sub

それと、”エラーコードをテキストの説明に変換する”FormatMessage関数を使おうと思っています。

「例外処理 = FormatMessage関数」という図式は古いですか?いまはもっと違う方法ですか?

Aベストアンサー

FormatMessage関数を初めて聞いたので突っ込まなかったのですが、ちょっと調べてしました。
http://msdn.microsoft.com/ja-jp/library/cc428939.aspx
Win32APIを利用した関数なんですね。

戻り値が存在していろいろできるみたいですね。
・関数が成功すると、バッファに格納されたバイト数(Unicode 版の場合は文字数)が返ります(終端のNULLを文字除く)。
・関数が失敗すると 0 が返ります。拡張エラー情報を取得するには、 GetLastError 関数を使います。

調べた結果ですが、これを必要とするのであれば使ってもいいと思います。

但し、例外処理でメッセージを出したいだけであれば MessageBox.Show を使ってしまうと思います。

Qthis dress is more expencive than that suitを言い換える

this dress is more expencive than that suit
を別のいいかたでいうときに
that suit is ( ) than this dress.
といういいかたはできるのでしょうか?
これだとカッコが一つしかないので、more 安い than といれられません。

Aベストアンサー

cheaper!

Q#If VBA7 Thenに関して

VBAを使っていて

http://blog.goo.ne.jp/mumbai/e/dc90cf94fc40baebf807f1913de4fc10

#If VBA7 Then
Debug.Print "EXCELは2010以上です。"
#Else
Debug.Print("EXCELは2007以下です。")
#End If

というように、#IFというようなものが出てきます。

これの使用方法を知りたいのですが検索して調べたところ、

https://msdn.microsoft.com/ja-jp/library/tx6yas69.aspx

このページに書かれてあるように
#があるとコンパイル時にif文の評価を行うのに対し、
#がないとif文も含めてコンパイルした後に、プログラムを実行する時にif文の評価を行う
といったことが書かれてあります。

それで試してみたのですが


#If VBA7 Then
aa=0
#Else
aa=1
#End If


というコードを実行するとaa=0が代入されます。

一方で

If VBA7 Then
aa=0
Else
aa=1
End If
というコードを実行するとVBA7がemptyになっており
aa=1が代入されます。

これはVBA7という変数がコンパイル時にのみ有効で
実行時には存在しないためだからでしょうか?

VBAを使っていて

http://blog.goo.ne.jp/mumbai/e/dc90cf94fc40baebf807f1913de4fc10

#If VBA7 Then
Debug.Print "EXCELは2010以上です。"
#Else
Debug.Print("EXCELは2007以下です。")
#End If

というように、#IFというようなものが出てきます。

これの使用方法を知りたいのですが検索して調べたところ、

https://msdn.microsoft.com/ja-jp/library/tx6yas69.aspx

このページに書かれてあるように
#があるとコンパイル時にif文の評価を行うのに対し、
#がないとif文も含...続きを読む

Aベストアンサー

少しだけですが、
#If VBA7 Then
aa=0
#Else
aa=1
#End If
の『VBA7』は条件付きコンパイル中で使える定数です。
あらかじめVBAの中に組み込まれています。

で、
If VBA7 Then
aa=0
Else
aa=1
End If
とした場合の『VBA7』は一般的な単なる変数です。

VBEでツール→オプションの編集タブにある「変数の宣言を強制する」に
チェックを入れてあると
「コンパイルエラー :変数が定義されていません」になるはずです。
でチェックを入れていない場合はVariant型として定義されますので
Empty値の初期値は、False、0、"" のいずれかになりますから
If VBA7 Then → False → aa=1 となるわけです。


人気Q&Aランキング

おすすめ情報