複数のサブルーチンで使う定数をIf文で定義

このQ&Aのポイント
  • Win7+VB2008における複数のサブルーチンで共有する定数をIf文で定義する方法について教えてください。
  • コーディング上の見た目のすっきりさを保ちつつ、毎回Callせずに定数を使用する方法を知りたいです。
  • Class宣言文直後にIf文を書いた場合に「ステートメントを、メソッド本体の外側に表示することはできません」というエラーが出るため、予め定数として書く方法を教えてください。
回答を見る
  • ベストアンサー

複数のサブルーチンで使う定数をIf文で定義。。。

複数のサブルーチンで使う定数をIf文で定義。。。  今晩は,質問させていただきます.どうぞよろしくお願いいたします. Win7+VB2008になります。 OSの種類によって決まる定数を複数のサブルーチンで使いたい次第で ございますが、どのように書くべきでございましょうか??? 一旦下のようにコーディングいたしまして、 Public Class Form1   Dim OS種類 as Double   Private Sub      :    Call OS調べ(OS種類)    A = OS種類 *2      :   End Sub   Private Sub      :    Call OS調べ(OS種類)    B = OS種類 *3      :   End Sub   Private Sub      :    Call OS調べ(OS種類)    C = OS種類 *4      :   End Sub   Private Sub OS調べ(OS種類)    If OS.Version.Major = 0 then     OS種類 = 3.141592    else     OS種類 = 1.0    EndIf   End Sub ・・・すべてのサブルーチンにCallを描くのもすっきりいたしませんので、 毎回Callせずに、「OS種類」を使用できるようにしたいのですが、 予め定数として書いておくにはどのようにすべきでございましょうか?? (Class宣言文直後にIf OS.Version~と書こうといたしましたところ、 「ステートメントを、メソッド本体の外側に表示することはできません」と エラーになりました。。)  もしお詳しい方がいらっしゃいましたら,どうぞよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • OMEGAT
  • ベストアンサー率70% (455/642)
回答No.1

たとえばフォームモジュールであれば、変数をクラス変数で定義して、Form_Loadなどで1度だけOSの種類を判定すればどうですか。 あとはフォームモジュール内の任意の場所から、クラス変数を参照すればいいと思います。 Private OS種類 As Double Private Sub Form_Load Call OS調べ(OS種類) End Sub Private Sub OS調べ(OS種類) End Sub

linelan
質問者

お礼

 どうもありがとうございます!!m(_ _)m うまく動きました^^ 素人質問で申し訳ございませんでしたorz この度はご親切にどうもありがとうございました!! 助かりました!!

関連するQ&A

  • サブルーチンの使い方

    こんにちは 以前 このサイトでサブルーチンを教えて頂いたのですが 今回は、このサブルーチンを使って Commandbuttonに Sheets("20年7月度").Cells(2, 6).Value = Cells(2, 6) & Mojiを 入れたいのですが、どのようにすれば いいですか? 宜しくお願い致します。 Private Sub mySub(Moji) '数字 If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & Moji Else: TextBox1.Value = TextBox1 & Moji End If End Sub Private Sub CommandButton1_Click() 'サブルーチン Call mySub("1") End Sub Private Sub CommandButton2_Click() Call mySub("2") End Sub Private Sub CommandButton3_Click() Call mySub("3") End Sub Private Sub CommandButton4_Click() Call mySub("4") End Sub Private Sub CommandButton5_Click() Call mySub("5") End Sub Private Sub CommandButton6_Click() Call mySub("6") End Sub Private Sub CommandButton7_Click() Call mySub("7") End Sub Private Sub CommandButton8_Click() Call mySub("8") End Sub Private Sub CommandButton9_Click() Call mySub("9") End Sub Private Sub CommandButton10_Click() Call mySub("0") End Sub Private Sub CommandButton11_Click() Call mySub("00") End Sub Private Sub CommandButton12_Click() Call mySub("000") End Sub

  • 【VB.NET】複数のサブルーチンをすべて一気に抜ける方法?

    【VB.NET】複数のサブルーチンをすべて一気に抜ける方法?  今晩は,いつも勉強させていただいております. 質問させていただきます.どうぞよろしくお願いいたします.  環境:Vista+VB2008 でございます。 例えば下のようなコードがあったといたしまして、  Sub AAA    Call BBB  End Sub  Sub BBB    Call CCC  End Sub  Sub CCC    '★  End Sub 特定の条件の時のみ、★マークのところで、動作を終了したい (Sub AAAのEnd Subに移動したい)場合、どのようにすべきでございましょうか?? Exit SubだとSub CCCしか抜けてくれませんし(Sub BBBから実行を続行してしまう)、 フラグ立てだと  Public フラグ as string =""  Sub AAA    Call BBB    If フラグ = "抜ける" then Exit Sub     End Sub  Sub BBB    Call CCC    If フラグ = "抜ける" then Exit Sub     End Sub  Sub CCC    If (抜けたい時)then     フラグ = "抜ける"     Exit Sub    End If     End Sub のように、コードが少し見にくくなってしまいます。。。 何か他のスマートな方法などございましたら、是非ともご紹介いただきたくお願いいたします。 もしお詳しい方がいらっしゃいましたら,どうぞよろしくお願いいたします。

  • サブルーチンの処理

    すみませんが教えてください。 往年のF-BASICやN88などでは 10 INPUT A 20 IF A=1 then gosub 100 ELSE PRINT "Aは1ではありません!" 30 END 100 PRINT A 110 RETURN こんなふうだったかサブルーチンが使えたかと思います。 これをVB.NETでかくと Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim A As Integer A = TextBox1.Text If A = 1 Then ここにどういれたらいいでしょう Else MsgBox("Aは1ではありません") End If End Sub End Class になるとおもうのですが、Thenのあとサブルーチンへ飛ばせるのでしょうか? それとも根本的に考え方が違うのでしょうか? 初歩的な質問ですみませんが、Timer1.Enable = Trueを使った処理以外 入門書に載っていないので、どなたかお教えいただけませんでしょうか。

  • bitmapの宣言

    こんばんわ。 bitmapの宣言を最初に行い、途中のサブルーチン内で大きさの変更を行いたいのですが、可能でしょうか? Public Class Form1 Dim BMP As New Bitmap(300, 200) Private Sub このなかで、300*200の指定を行いたいです。 End Sub ちなみに、 Public Class Form1 Dim BMP As Bitmap Private Sub BMP = New Bitmap(300, 200) End Sub などと悪あがきをしましたがダメでした。 良い解決策を教えてください。よろしくお願いします。 バージョンは、.NET 2005です。

  • サブルーチンにオブジェクト名を引数で渡したい

    度々お世話になっております。 基本的なことだとは思うのですが,うまく探せませんでしたので質問させてください。 現在,次のようなプログラムをVB6.pro環境で作っています。 ・ボタン(command1)を押す→ボタンの色が赤に変わる ソースは以下の通りです。 Private Sub Command1_Click()  Call ColorChange(Command1) End Sub Sub ColorChange(Obj As Object) Obj.BackColor = vbRed End Sub 以上のプログラムでは,サブルーチンを呼び出す際に オブジェクト名(Command1)をダイレクトに入力していますが, これを自動で入力する関数はありますでしょうか。 Form1ならば,Meのようなものです。 よろしくお願いいたします。

  • (.NET)IF文の計算結果が思ったのと違う!?

    IF文でiとjの足す処理が括弧にくくられているので、きちんと足される思ったのですがラベルでの実行結果が0になります。 コード上は計算されているように見えるのですがなぜ計算されていないのでしょうか?計算できないとしたらIF文の中では計算処理ができないということでしょうか? 回答のほどよろしくお願い致します。 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim i, j i = 0 j = 0 If (i = i + 1) = 0 Or (j = j + 1) = 0 Then MessageBox.Show("+1") End If Label1.Text = i Label2.Text = j End Sub

  • VBA の IF then 文につぃて

    access2000でテーブルに連結していないフォームがあり その中のテキストボックスにバーコードや磁気カードで読み込ませその桁数によって処理を分けようと思っていますが、どのようにコードを書けばよいのかおしえてください。 たとえば、 private sub() if 入力テキスボックス が 8桁 then 磁気カード処理 if 入力テキストボックスが 11桁 then バーコード処理 end if end sub public sub 磁気カード処理() public sub バーコード処理() のような形です。 どうかお願いします

  • if文からcase文への置き換え

    ピクチャボックスをクリックしたら、チェック ボックスがチェックされるメソッドを作りたいと 思っています。 Private Sub PictureBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click,PictureBox2.Click 'ここから If sender Is PictureBox1 Then If Me.CheckBox1.Checked = False Then Me.CheckBox1.Checked = True Else Me.CheckBox1.Checked = False End If ElseIf sender Is PictureBox2 Then If Me.CheckBox2.Checked = False Then Me.CheckBox2.Checked = True Else Me.CheckBox2.Checked = False End If End If 'ここまで End Sub 上記のif文をCase文に置き換えたくて、 'ここから Select Case sender Case PictureBox1 If Me.CheckBox1.Checked = False Then Me.CheckBox1.Checked = True Else Me.CheckBox1.Checked = False End If Case PictureBox2 If Me.CheckBox2.Checked = False Then Me.CheckBox2.Checked = True Else Me.CheckBox2.Checked = False End If End Select 'ここまで 上記のように書き換えたのですが、エラーが出てしまいます(ビルドは通るのですが)。 Case文の使い方が間違っているんだとは思いますが、どこがどう 間違っているのがよくわかりません。 ご教授いただけないでしょうか?

  • クラス宣言かな?

    いろいろ調べてはみたのですが 答えにたどり着けなかったので質問させていただきます。 Testからテストに移り またTestにもどるというものです。 Class Test Private Sub Button1_Click(~省略~)  テスト.Show()  Me.Hide() End Sub End Class と Class テスト Private Sub Button2_Click(~省略~)   If ~省略~   Test.Show()   Me.Hide() ElseIf ~省略~   Test.Show()   Me.Hide() End If End Sub End Class があります。 このときの「Class テスト」の「Test.Show()」を Dim FF as Test FF.Show() みたいなかんじで一行の文を変えるだけで反映させたいのですが うまくいかず困ってます。 どうやってやればうまくいくのか教えてください。

  • 再質問 長いIF文を短くしたい

    お世話になっております 先日1/24に、条件を示さずに「長いIF文を短くしたい」という質問をしてしまいました こちらの手抜きをお詫びします 前回keithinさんにアドバイスいただいた方法で書き直しましたので これをさらに簡単に書く方法があれば教えてください 以下は、Private Sub Worksheet_Change(ByVal Target As Range)内のマクロです If Target.Row >= 15 And Target.Row <= 100 And Target.Column = 9 Then If Range("I" & Target.Row).Value < Range("J" & Target.Row).Value Then If Range("G" & Target.Row).Value >= 1 Then If Range("I" & Target.Row).Value >= Range("G" & Target.Row).Value Then If Range("I" & Target.Row).Value Mod Range("G" & Target.Row).Value = 0 Then  処理 End If End If End If End If End If

専門家に質問してみよう