• ベストアンサー

frm型への代入の仕方について

仕事でVisual Basicをつかっているのですが、一点質問があります。 frm型で宣言されたfrmTestに実際VBPに存在するForm1というのは、 Dim frmTest As Form Set frmTest = Form1 でセットすることができたのですが、 私がしたいことは、 Form1の部分を流動的に変更できるように、文字型の変数に置き換えたいのです。 Dim strForm As String Dim frmTest As Form strForm = "Form1" Set frmTest = strForm といったような事をしたいのですが、うまくいきません。 何か良い方法をご存知の方がいらっしゃいましたら、教えてください。よろしくお願いいたします。

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

  • ベストアンサー
noname#22222
noname#22222
回答No.5

s_husky です。 VB6.0をインストールして動作確認しております。 GetForm()->FromIndex()と名前を変更しましたが、役割りは同じです。 <使用例1> Forms (FormIndex("Form1")) <使用例2> Public Const conFORM = "Form2" Forms (FormIndex(conFORM)) ※記号定数を利用する手もありそうです。 <文字列で指定されたFormのIndexを取得する関数> Public Function FormIndex(ByVal frmName As String) As Integer   Dim I As Integer   Dim J As Integer      J = Forms.Count - 1   For I = 0 To J     If Forms(I).Name = frmName Then       FormIndex = I       Exit For     End If   Next I End Function ※該当するフォームが見つからない場合は0が戻ります。 ※該当するフォームが見つからない場合は-1を返す必要があれば修正して下さい。

stucklife554
質問者

お礼

遅くなりました。親切丁寧なご回答をありがとうございました。早速試してみます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

noname#22222
noname#22222
回答No.4

s_husky です。 判りました。思いもよらないことでした。 問題は、関数化にあるり、Access2003との差異は問題ではないというのは乱暴でした。不遜な回答をしたことを謝っておきます。「文字列でAccess2003みたいに宣言したい」というのが主旨ですね。VBとExcel、Accessの差を無くせば済むだけのようですね! Set frm = Forms(GetForm("Form2")) GetForm関数の作成要領を示せ! と解釈しました。 この解釈に間違いがなければ補足は不要です。 なお、ここまでで回答内容が推測されて、「もっといい手がある」という方は、アドバイスしてやって下さい。 少々、お待ち下さい。 只今、酒が入っています。 遅くとも、明日、10時には回答します。

全文を見る
すると、全ての回答が全文表示されます。
noname#22222
noname#22222
回答No.3

s_husky です。 関数の意図が伝わらなかったようですね!そこで、質問です。 (1)何がしたいのですか? ・オープン済みのフォームのインスタンスを宣言したい。 ・オープンしていないフォームをオープンしたい。 (2)フォームもVBからみたらオブジェクトである点は理解していますか? (3)オブジェクトの構造とメソッド等の知識はありますか? *補足を受けて、VBでテスト関数を作成します。

stucklife554
質問者

補足

たびたび、お手数かけます。 質問に答えさせていただきます。 4つのVBPで使う共通の標準モジュールを作成しているのですが、それぞれのVBPで使うフォームは異なります。 ですので、VBPに存在しないフォーム名をSetするとエラーで落ちるので、String型の変数でフォーム名をSetしたいという話になりました。 また最近、VBをはじめたもので知識に欠ける部分が多々あります。 ご面倒おかけします。 よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
noname#22222
noname#22222
回答No.2

Public Function OpenForm(ByVal frmName As String) As Boolean Dim frm As Form Set frm = Forms(frmName) MsgBox frm.Caption End Function プログラムコードにフォーム名を埋め込むのではなく、フォーム名を指定したら対応するインスタンスを作成する汎用のルーチン=関数を作成するには?と問題を立て直すと質問者の実力では、即、解決するはずですが? もちろん、 Public Function OpenForm(ByVal frm As Form) As Boolean End Function とフォームそのものを渡せば、Set文そのものが省けます。 なお、Access2003でテストしていますのでVBではしかるべく!

stucklife554
質問者

補足

ご回答ありがとうございます。 試してみたのですが、 Set frm = Forms(frmName)  ← この部分で、「型が一致しません」となってしまいます。 この関数だと返り値がBoolean型となってしまうと思うのですが、Form型では受け取れないのでしょうか?? よろしかったらご回答お願いいたします。

全文を見る
すると、全ての回答が全文表示されます。
  • dee_honda
  • ベストアンサー率53% (26/49)
回答No.1

VB6.0であれば、 strForm = "Form1" Set frmTest = Forms.Add("strForm") ではどうですか?

stucklife554
質問者

補足

ご解答ありがとうございます。 早速試してみたのですが、この場合だとstrFormのForm_Loadがはじまってしまいました・・・ これだとまずいですね。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • サブフォームに変数を代入し、RecordSourceの値を取得したい

    サブフォームに変数を代入し、RecordSourceの値を取得したいのですがうまくいきません。 Sub test1() Dim サブフォーム As String Dim フォーム As String フォーム= "土台" サブフォーム = "フォーム1" MsgBox Form_フォーム1.RecordSource End Sub ******************************************************************* Sub test2() Dim サブフォーム As String Dim フォーム As String フォーム= "土台" サブフォーム = "フォーム1" MsgBox Form_フォーム1.RecordSource MsgBox Forms(フォーム).Controls(サブフォーム).RecordSource End Sub オブジェクトは、このプロパティまたはメソッドをサポートしていません。(Error 438) ******************************************************************* Sub test3() Dim サブフォーム As String Dim フォーム As String フォーム = "土台" サブフォーム = "フォーム1" MsgBox Forms(サブフォーム).RecordSource End Sub 実行時エラー'2450' マクロの式またはVisual Basic コート゛で参照されている 'フォーム名'フォームが見つかりません。 ******************************************************************* test1~3のうち test1のみはうまくいくのですが 変数を代入したいです。 ヘルフ゜のには Forms![受注]![受注サブフォーム].Formとなってますが これじゃ変数を代入できないですよね。 どうすればサブフォームに変数を代入しつつ、RecordSourceの値を取得できるのでしょうか? よろしくお願いします。

  • Setup1.vbp の Setup1.frmとは

    WindowsXPなどにダブル バイト文字のユーザー名などでログインした後、ディストリビューションウィザードで作成したセットアップ(Vb6.0で作成)を実行しようとすると「Path or File Not Found」とメッセージが出てインストールできないため、困っております。 解決策をマイクロソフト サポート技術情報で見つけたのですが、 「Setup1.vbp において Setup1.frm の Form_Loadイベントを以下のようにカスタマイズすることで回避できます。 修正前: '使用する一時ディレクトリを取得します。 gsTEMPDIR = String$(255, 0) lChar = GetTempPath(255, gsTEMPDIR)・・ 修正後: '使用する一時ディレクトリを取得します。 gsTEMPDIR = String$(255, 0) lChar = GetTempPath(255, gsTEMPDIR・・」 (マイクロソフト サポート技術情報 - 416585 http://support.microsoft.com/default.aspx?scid=kb;ja;JP416585) とのことなのですが、恥ずかしながら、そもそもSetup1.vbp の Setup1.frm とは一般的にどこにあって、どのように開けばよいのか分かりません。 (それとも自分で作成したformのことなのでしょうか。もしもそうだとしたら、ディストリビューションウィザードで作成した後に上記のような文字が自動で記載されるのですか。どうやって開けばよいんでしょうか。) つきましては恐れ入りますが、ご教授いただけると大変ありがたく存じます。 色々調べたのですがよく分からず、申し訳ございませんがよろしくお願いいたします。

  • 変数の定義の仕方をご教授ください。

    Option Explicit Function EncodeURI(uri As String) As String Set sc = CreateObject("ScriptControl") sc.Language = "JScript" Set js = sc.CodeObject EncodeURI = js.encodeURIComponent(uri) End Function ------------------------------------------- をデバッグすると「sc =」と「js =」の部分が「変数が定義されていません」となってしまいます。 変数を宣言する時に、 dim sc  as まではわかるのですが変数のデータ型を何にしてあげればいいのでしょうか?

  • VB6にて文字型変数の内容をオブジェクト変数に代入する方法

    VB初心者ですが オブジェクト変数に文字型変数で作成した オブジェクト名を代入したいのですが 上手くいきません。 Dim anyCmb As ComboBox Dim cmb_name As String cmb_name = "ABC" Set anyCmb = cmb_name 誰かわかる方がいましたら、教えてください。 よろしくお願いします。

  • 変数を動的に作るには?

    変数を作成する際には必要な分だけ一つずつ宣言する必要があるのでしょうか? 例えば、連番を格納する文字列型変数を一時的に100個必要だとすると Dim textdat1 As String = "Number1" Dim textdat2 as String = "Number2" Dim textdat3 as String = "Number3"      ・      ・      ・ と100個宣言しないといけないと思うのですがこれを For i As Integer = 1 To 100 Dim textdat(i) As String = "Number" & i Next i という様な形で変数を作成することは出来ないのでしょうか。 初歩的な質問かもしれませんが、よろしくお願いします。

  • フォーム2を出して フォーム1を閉じたい

    のですが、うまくできません。 何が間違っているのでしょうか Dim WithEvents Frm1 As Form1 Dim WithEvents Frm2 As Form2 ------------------- Frm2 = New Form2() Frm2.Show() Frm1 = New Form1() Frm1.Close() ------------------ net です。

  • なぜ値が代入されるのかわからない

    Sub Sample1() Dim 文字 As String 文字 = "あああ" Call Sample2(文字) 'プロシージャSample2の引数に変数を渡して呼び出す End Sub Sub Sample2(a As String) MsgBox a End Sub ---------------------------------- をやってみて疑問なのですが、 なぜ a = 文字 がないのに、 aに”あああ”が代入されるのでしょう? aにウォッチ式の追加をあてて、F8で一行ずつステップインしてみると Sub Sample2(a As String) の部分で、 aに””あああ”が代入されています。 a = 文字 と Sub Sample2(a As String) は 同じ意味なのでしょうか?

  • Eval関数を使いたい!ドキュメントにある宣言とはなに?

    Eval関数を使いたい!ドキュメントにある宣言とはなに? DataBinder.Eval メソッド にある DataBinder.Eval (Object, String, String) 実行時にデータ バインディング式を評価し、 結果を要求側のブラウザに表示されるテキストとして書式化します。 を使いたいです。 Visual Studio 2005のドキュメントで見つけました。 ドキュメントにある宣言とはなんですか? Visual Basic (宣言) Public Shared Function Eval ( _ container As Object, _ expression As String, _ format As String _ ) As String Visual Basic (使用法) Dim container As Object Dim expression As String Dim format As String Dim returnValue As String returnValue = DataBinder.Eval(container, expression, format) 宣言と使用方法が載っていましたが、使い方がわかりません・・・ ~~~~~~~~~~~~~~~~~~~~~~ 以下を書くと「名前'Eval'は宣言されていません」とエラーが出ます。 宣言がわかっていないので、当たり前といえば、当たり前です。 Dim myWork As String = "1+2+3+4" Dim myTotal As String = "" myTotal = Eval("myWork") これが使えるようにするにはどうしたらいいか教えてください!

  • 超基本 変数への代入教えてください。

    dim mychr as string * 255 mychrという変数を255個宣言しているのは分かりますが、どうやって代入するかが分かりません。ちなみに mychr=vbnullstring '初期化 mychr="ABCDEFG" mychr="A" mychr(0)="A" 全部だめでした、本で調べるにも調べようがなく、ご教授お願いいたします。

  • VBA モジュールで共通に使う変数の宣言方法

    VBAにてプログラミングを覚えている者です。 現在、いくつかのモジュールがあり、それぞれDimにて宣言している共通の変数があります。 いくつものプロシージャに毎回宣言せず、どこかでひとまとめにしたいと思い、色々と調べています。 例えば、 Dim pic1 As Picture Dim cell1 As String Dim pass1 As String Dim pic2 As Picture などです。 Dimのほかに、Publicの宣言などがありますが、いま一つ使い方がピンときません。 共通宣言する変数をひとつのモジュールとして登録し、活用できると、いざ変更となったときに その内容だけ置き換えればいいと思うのですが、みなさんはどのように宣言をしていますか? (例えば、Stringなどは各モジュールで変更するのが大変だと思うのですが・・・) ヒントを教えていただければと思います。よろしくお願いします。

筆まめの住所録が更新されない
このQ&Aのポイント
  • 筆まめ33で年賀状作業をするためにリストを修正していますが、入力したデータが反映されません。
  • 保存や再起動の後もデータが反映されず、ファイルの上書きもうまくいきません。
  • どうすれば筆まめの住所録が正しく更新されるでしょうか?
回答を見る