標準モジュールとクラスモジュールについて

このQ&Aのポイント
  • 標準モジュールでType型を使用しています。この標準モジュールをクラスモジュールに置き換えて、Formから呼び出すCOMに作り変えたいのですが、引数ってどう設定したらよいのでしょうか?
  • 現在は標準モジュールで呼び出している内容をクラスモジュールに置き換えたいです。具体的には、Type型を使用している部分の引数の設定方法が分からないので、アドバイスをいただきたいです。
  • 私は標準モジュールでType型を使用していますが、クラスモジュールに置き換えたいと考えています。具体的な引数の設定方法が分からないため、設定方法をご教示いただけますか?
回答を見る
  • ベストアンサー

標準モジュールとクラスモジュールについて

標準モジュールでType型を使用しています。 この標準モジュールをクラスモジュールに置き換えて、Formから呼び出すCOMに作り変えたいのですが、引数ってどう設定したらよいのでしょうか? 今は標準モジュールなので、こんな感じで呼んでいるのですが・・・ 例) Private Sub Command1_Click() Dim in_b As IN_PARA Dim out_b As OUT_PARA in_b.Name = "山本太郎" in_b.Seikaku = "優しい" in_b.Syumi = "釣り" in_b.Tokugi = "野球"

noname#47454
noname#47454

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

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

VBのCOMでは、Typeで宣言したものは公開できません。 公開可能なものは、Variantに格納できるもののみです。 対応としては、それぞれの項目を別々のプロパティにするしかないです。

関連するQ&A

  • VBA 標準モジュールとフォーム

    ある標準モジュール内で生成した変数の値をフォームのコマンドボタンをクリックしたら表示されるプログラムはどうやってつくるのですか? 標準モジュール sub test() dim a as integer dim b as integer dim sum as string a=5 b=1 sum=a+b End sub フォームのコマンドボタンクリック Sub CommandButton1_Click() MsgBox sum End Sub 標準モジュールで計算した答えがフォームのコマンドボタンをクリックしたら答え6が表示されるようにしたいのですが、どうしたらできますか?

  • 標準モジュールとイベントの質問

    初めて質問します。 ビジュアルベーシックで標準モジュールで ボタンのクリックイベントを実行したいのですが どうやってプログラムすればいいんでしょうか? 今の会社に入っていきなりVBの仕事させられて とっても困っています。 Private Sub Frm1Command1_Click() Call Module1.Frm1Command1_Click End Sub こんな書き方じゃなくて、標準モジュール内で Public Sub Command1_Click() MsgBox "sine" End Sub って書いて実行できるようにしなくてはダメなんです。 どうすればいいんでしょうか? もしかして無理なんでしょうか? これ、上司の嫌がらせだったらイヤですね・・・。

  • 標準モジュールにpublicで宣言するしかない?

    フォームモジュールと標準モジュールで同じ変数を使って値を行き来したい場合、 標準モジュールにpublicで宣言するしかないのでしょうか? 【フォームモジュール】 Private Sub cmd_コマンド0_Click() test = "aaa" Call 標準モジュールtest End Sub 【標準モジュール】 Public test As String Sub 標準モジュールtest() MsgBox test End Sub でいいのですか?

  • VB6-標準モジュールとの変数の受け渡し

    VB6の初心者です。ごく初歩的な問題でお恥ずかしいのですが困っています。 標準モジュール内にある以下のサブルーチンを行わせるために、 Sub Transform(NumSamples As Long, RealIn() As Double, ImageIn() As Double, RealOut() As Double, ImagOut() As Double, Optional InverseTransform As Boolean = False) (NumSamples、RealIn()、ImageIn()は入力値) (RealOut()、ImagOut()は戻り値) ... ... End Sub フォームモジュール内で以下のようにコールすると、 Private Sub cmdStart_Click() Dim A as Long Dim B(10000) as Double Dim C(10000) as Double Dim D(10000) as Double Dim E(10000) as Double ... (A,B,Cに数値入力) ... Call Transform(A, B(), C(), D(), E(), False) End Sub で実行すると、変数D()に対して「コンパイルエラー:型が一致しません:配列またはユーザ定義型を指定してください」が出ます。なお、配列は10000まで宣言していますが実際には0~4096を使っています。 変数型は合わせているはずなのになぜエラーになるのでしょうか。D(),E()の型宣言をPublicにして標準モジュール内に入れたり、いろいろやってみたつもりですがうまくいきません。 よろしくお願いします。

  • 標準モジュールについてなのですが

    すみません。教えてください(/_;)VB6にて理解できないことがあります。いくつものパスを標準モジュールに記述できると知り、早速見やすいプログラムにしようと思い、標準モジュールを追加しました。サンプルなどを調べ、Function Apath() as stringを理解しました。フォームの方にはpath = Apathって書いておけばいいと書かれていたのでその通りにしました。しかし、見に行ってはくれません(>_<)で、いろいろやってみてあることに気づきました。変数を宣言してたら、ダメでしてなかったらちゃんと見に行ってくれます。 Dim path as string,Dim Apath as string.Apathを消すと働いてくれます。宣言が間違っているのでしょうか?標準モジュールをこのような感じで利用するには何か重大なルールがあるのでしょうか?すいません、初心者すぎる質問で<(_ _)>しかし、聞かぬは一生の恥と思い質問しました(>_<)よろしくお願いいたします<(_ _)>

  • クラスモジュールについて

    下記のコードは平均値を出すコードを作ったのですが、B列に文字列を含むとエラーになってしまいます。なのでB列に数字以外のものが入っている状態でも動くようにしたいのですが、お詳しい方アドバイスお願いします。 ' 標準モジュール Public Sub 平均値() Dim dct As Object Dim bot As Long Dim k As Variant Dim r As Long Dim itm As Class1 Set dct = CreateObject("Scripting.Dictionary") bot = Cells(Rows.Count, "A").End(xlUp).Row For r = 2 To bot k = CStr(Cells(r, "A").Value) If dct.Exists(k) Then Set itm = dct(k) Else Set itm = New Class1 dct.Add k, itm End If itm.Sum Cells(r, "B").Value Next For r = 2 To bot Cells(r, "C").Value = dct(CStr(Cells(r, "A").Value)).Avg() Next End Sub ' クラスモジュール(オブジェクト名「Class1」) Private total As Double Private cnt As Long Public Sub Sum(ByVal v As Double) total = total + v cnt = cnt + 1 End Sub Public Function Avg() As Double Avg = total / cnt End Function

  • EXCEL VBAで標準モジュール内で指定しても別の標準モジュールが開けません。

    Sub CommandButton2_Click() Application.Run "PARA" End Sub 以前他の方が作ったプログラムを参考にして、作成しています。 PARAという名前で作った標準モジュールを動かしたいのですが、 1004エラーと出てしまって止まってしまいます。 実際、オブジェクト名と記載されている文字列を""の間にコピペしても 動きません。 どこがおかしいのでしょうか?あるいは何か肝心なことが抜けているのでしょうか?

  • 文字列から数式に変換する標準モジュールが不安定

    文字列を数式に変換する標準モジュール「EVALUATE」の更新が不安定です エクセルシート内の文字列を数式に変換して、計算結果を返すために下記標準モジュールを登録して試すのですが うまく行ったりいかなかったり、標準モジュールが安定して機能しない原因などが分かりません。 ●現在の設定とやりたいこと (1)A1⇒=myEvalAry(B1)、B1⇒C1+D1、C1⇒2、D1⇒5 として、A1にC1+D1計算結果の7を表示させたい (2)一つのシートの中に、myEvalAry標準モジュールを数百使っている (3)一つのセルの中で、=myEvalAry(B1)+myEvalAry(B2)のように標準モジュールを複数使っているセルもある ●現在の状況 上記状態で、何かのタイミングで標準モジュールの計算結果が一気に全て正しく反映されることもあれば、 急に反映されなくなることもある。100のうち10だけ反映されることもある。 というような不安定な状態です。 しかも数量が問題かと思って、多量に登録していたmyEvalAryのセルを1つだけにして動きを確認しようとしたらまた反映 されなかったりで、全然理由が分かりません。 どこか標準モジュール内に、考慮すべき構文が漏れたりしてるのでしょうか???? 正常稼働しない理由が分かると大変ありがたいです。win7、win8、excel2003、excel2013のいずれの環境でも同様です。 /////////////////////////////////////////////////////// Function myEvalAry(ParamArray ItemR()) As Variant Dim re As Variant Dim strTmp As String Dim varR As Variant Dim i As Variant, j As Variant strTmp = "" varR = ItemR() For Each i In varR If IsArray(i) Then '引数が配列の場合 For Each j In i If IsNumeric(j) Then re = CStr(j) Else re = j End If strTmp = strTmp & re Next Else '引数が配列以外 If IsNumeric(i) Then re = CStr(i) Else re = i End If strTmp = strTmp & re End If Next myEvalAry = Application.Evaluate(strTmp) End Function

  • 標準モジュールからフォームをコントロールしたい

    こんにちは。 標準モジュールからフォームのリストボックスに文字を追加したいんですが、うまくいきません。 まず、button1をクリックすると、共通モジュールのサブルーチンを呼び出します。そして引数"0"を渡すと、Form1のListBox1に"hello"を追加したいのです。 実行させると、エラーはでないのですが、追加されるはずの"hello"がListBox1に追加されません。 たぶん     frm1.ListBox1.Items.Add("hello") あるいは    Dim frm1 As New Form1() あたりの宣言の仕方がまずいのだと思うんですが... どなたか、ご教授よろしくお願いします。 ■共通モジュール Module Module1 Dim frm1 As New Form1() Sub PC(ByVal PCrecieve As String) If PCrecieve = "0" Then frm1.ListBox1.Items.Add("hello") End If End Sub End Module ■フォーム Public Class Form1 Inherits System.Windows.Forms.Form Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Call PC("0") End Sub End Class

  • 標準モジュールだとエラーになる理由を教えてください

    アクセスのフォームの上にコマンドボタンを一つ設置して、 クリックイベントで Private Sub コマンド0_Click() DoCmd.Close acForm, Me.Name End Sub とすれば、自身のフォームが閉じます。 しかし、 Private Sub コマンド0_Click() Call test End Sub と、 標準モジュール Option Compare Database Option Explicit Sub test() DoCmd.Close acForm, Form_フォーム1 End Sub にすると、 実行時エラー2498 指定した式は、 いずれか の引数とデータ型が対応していません。 になります。 行ってる意味は同じだと思うのですが、 なぜエラーになるのか教えていただけますか?ご教授よろしくお願いします。

専門家に質問してみよう