『L・DK』上白石萌音&杉野遥亮インタビュー!

よろしくお願いします。

標準モジュール(例、TestModule())からClassモジュール(Class1)を呼び出し、
呼び出すClass1で別のクラス(Class2)を呼び出して使いたい場合、
どのような記述を行えばよいのか、ご教授いただけないでしょうか。

標準モジュールから他の標準モジュールを呼び出す場合、
call Module
で呼び出すということは知っていますが、同じようにCallで
Classで別のクラスを呼び出すことは可能なのでしょうか?

自分なりに色々調べはしましたが不十分なせいもあるのでしょうが
方法が見当たりませんでした。

よろしくお願いします。

環境)Windows10、Office365 solo(Office2016)Excel

このQ&Aに関連する最新のQ&A

A 回答 (2件)

標準モジュール内のサブプロシージャ内でクラスAを呼ぶ場合


クラスB内のメソッドからクラスAを呼ぶ場合
どちらも同じだと思います。

Sub内あるいはクラスBのメソッド内で
Dim Cls As Object
set Cls=New クラスA
Cls.クラスAの望みのメソッド名
    • good
    • 0
この回答へのお礼

ご教授いただきありがとうございました。返事が遅れて申し訳ありませんでした。

お礼日時:2016/10/03 23:43

メソッドの呼び出しはcallではなく インスタンス名.メソッド名 のように生成したインスタンス名の後にドット(.)を付けてメソッド名を記述します。


以下のソースを実行してください。

標準モジュール:module1
---------------------------------------
Option Explicit
Public Sub Macro1()

Dim A As Class1 'クラス定義
Set A = New Class1 'インスタンス生成
A.Method1 ("Module1からmethod1を呼び出し")
A.Method2 ("Module1からmethod2を呼び出し")
Set A = Nothing 'インスタンス参照の破棄
End Sub
--------------------------------

クラスモジュール:Class1
-------------------------------------
Option Explicit

' クラスのメソッド
Public Sub Method1(ByVal msg As String)
MsgBox ("Class1:Method1で以下のメッセージを表示" & vbLf & msg)
End Sub

Public Sub Method2(ByVal msg As String)
Dim B As Class2
Set B = New Class2
B.Method1 (msg)
Set B = Nothing
End Sub
----------------------------------------

クラスモジュール:Class2
-----------------------------------------
Option Explicit

Public Sub Method1(ByVal msg As String)
MsgBox ("Class2:Method1で以下のメッセージを表示" & vbLf & msg)
End Sub
------------------------------------------

上記の状態で標準モジュール:module1の
A.Method1 ("Module1からmethod1を呼び出し") 
は、Class1のMethod1を呼び出しています。

>標準モジュール(例、TestModule())からClassモジュール(Class1)を呼び出し、
>呼び出すClass1で別のクラス(Class2)を呼び出して使いたい場合、
>どのような記述を行えばよいのか、ご教授いただけないでしょうか。
の回答としては、
標準モジュール:module1の
A.Method2 ("Module1からmethod2を呼び出し")
は、Class1のMethod2を呼び出しています。
そして、クラスモジュール:Class1の
Public Sub Method2(ByVal msg As String)
Dim B As Class2
Set B = New Class2
B.Method1 (msg)
Set B = Nothing
End Sub
は、
Method2はClass2のMethod1を呼び出します。

標準モジュールからあるクラスのメソッドを呼び出す場合も、
あるクラスから他のクラスのメソッドを呼び出す場合も、
1)インスタンスの生成
2)そのインスタンスの後にドット(.)を付加し、メソッドを呼び出す。
というのが、基本的な流れになります。
    • good
    • 1
この回答へのお礼

返信が遅れて申し訳ありません。
ご教授いただき有難うございました。

お礼日時:2016/10/03 23:43

このQ&Aに関連する人気のQ&A

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

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

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

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

QVBA オブジェクトが空かどうか判定する

皆様のお知恵を拝借させてください。

エクセルVBAでオブジェクトを入れる変数を定義し、その変数にオブジェクト
が入っているかどうか検査したいのですがどうしたらいいでしょうか。

例えば---
Dim a As Workbook
If a <> nothing then ←この部分が分からない。このままだとエラー。
処理
End if
---------
環境
エクセル2003
WinXPsp1

Aベストアンサー

もし、aが空だったら
If a Is Nothing Then 

もし、aが空じゃなかったら
If Not a Is Nothing Then

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub

QVB.NETでのイベントの途中終了

VB.NETで、あるボタン(button1)をクリックさせた際にイベントを発生させます。

そのイベント内の処理途中で、イベントを終了させたいと思っていますが、どのように書いていいかわからず困っています。

どなたかおわかりの方お願いします。

Aベストアンサー

Exit ←これをイベント終了したいところで、使えばいいと思いました。

(例)
Private Sub Button1_Cilck・・・省略・・・
 '「Button1」をクリックしたときのイベント
 If Msgbox("イベントを途中終了しますか?",vbYesNo) = vbYes Then
  Exit Sub 'イベント途中終了
 End If
 Msgbox("イベントを途中終了しませんでした。")
End Sub

QDataGridViewで指定したセルの値を取得

こんにちは。

VB2008のDataGridViewで指定したセルの値を取得をする方法がわかりません。
どなたか教えてください。

Aベストアンサー

こんばんは.

 Dim Data As String
 Data = Me.DataGridView(0, 2).Value
 MsgBox(Data)

みたいな感じで取れないですかね???

Q「インスタンス」の意味をわかりやすく教えてください

VBのヘルプなどによく出てくる「インスタンス」という言葉の意味をもっとわかりやすく教えてください。

Aベストアンサー

もっと噛み砕いちゃいましょう。

例えばMac/VというパソコンをGrapeという会社が発売するとしましょう。
Grape社が用意する仕様に従って、製品が出来上がるわけですが、私が買ったMac/Vとあなたの買ったMac/Vは全く同じ仕様ですが、別々に存在するので全く同じ物では有りません。

というお話の中の「仕様」がクラスで、「私のMac/V」や「あなたのMac/V」がインスタンスです。

QEXCEL VBAマクロ作成で、他のEXCELからデータを取り込みたい

メインプログラム(EXCEL VBA)より、
他のフォルダーにあるEXCELの項目の内容を取り込みたいです。
たとえば他のフォルダーのEXCELのRange("A2:A3").ValueをメインプログラムのRange("C2:C3").Valueにセットしたい時です。

・コマンドボタン押したら、どこのEXCELから取り込むかのポップアップ(?)は、表示はできてます。
・作業者が選んだパスとブックもMsgBoxで表示できてるので、もらう相手の場所も取得できてます。

・となると次はOPEN,INPUTですか?
テキストデータの取り込みですと、Inputでそのバッファを定義してるのですが、なんか違うような。。。

よろしくお願いします!

Aベストアンサー

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Cells(2, 2).Value ' 相手シートの B2 の値を自分自身の A1 に書き込む

readBook.Close False ' 相手ブックを閉じる
Set readSheet = Nothing
Set readBook = Nothing

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Ce...続きを読む

QVBでグローバル変数を宣言するには

VB初心者ですが。クイズゲームのようなものを作成したいと考えてます。
Private Sub ~ End Sub の中で宣言した変数って他のところに呼び出したり(戻り値として渡す)出来るのでしょうか?
どこでも、いつでも呼び足せるグローバル変数の宣言とはどのようにやるのか、具体的に教えていただけないでしょうか?

Aベストアンサー

>Public a as Integerのように宣言して、初期化するにはどのように記述を行えばよいですか?

>Public a As Boolean = 0
のように記したら”コンパイルエラー”と出ました。

Booleanって整数値取れたかなと思いつつ。
Sub~End Sub内でa = 0を代入したりしてください

扱おうと言うことがあるかどうか疑問だけど

Public Const a As Integer = 10 'グローバルな定数の宣言

QForm間の値の渡し方

1つのForm上のコマンドボタンで別のFormを表示、そこで変数に値を入れ、そのFormを閉じ、元のFormでその変数を使いたいのですが、どうもうまくいきません。
実施したやり方は、一方のFormの宣言領域で、”Public abc As String”を宣言、両方のFormの(変数に値を入れた方と変数を使う方の)プロシージャーの宣言では引数として(abc As String)と記述しました。
因みに、両プロシージャーともイベントプロシージャーです。何か基本的なことができていないのだとは思いますが、どなたか教えていただけませんか?よろしくお願いします。

Aベストアンサー

すでに何件か回答があがっていますので、少し変わった方法をご参考までに。

あまり使われませんが、Formにはtagというプロパティがあります。
これは「文字列形式であれば何でも格納できる」という、上手く使えば便利なプロパティです。

FormAからFormBを呼び出し、FormBで変更した値をFormA.tagにセットします。
ここでFormBをUnloadしてもFormA.tagの値は影響を受けないので自由に使えます。

複数の値を呼び出し元に戻してやる場合に、区切り文字(カンマなど)で連結した文字列をtagに格納し、呼び出し元で区切り文字でsplitして、複数の値を受け渡すという手法をよく使っています。

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)
で切り上げです。

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

QVB.NETのDataGridで、選択行の特定の列の内容を取得したい

タイトルにあるとおり、DataGridを使用している場合、実行時に選択された行の特定の列の内容を取得するにはどのようにすればよいのでしょうか?

DataGridは複雑で、まだよくわかっていません。
よろしくお願いします。

Aベストアンサー

選択している行番号は、dataGrid1.CurrentRowIndexでわかります。
行、列を指定して各セルにアクセスするには、
dataGrid1(行番号,列番号)でいいので
dataGrid1(dataGrid1.CurrentRowIndex,列番号)
で選択されている行の特定の列の内容を取得できます。
註:番号は、0始まり


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

人気Q&Aランキング

価格.com 格安SIM 料金比較