2018年07月21日

VBAでのインターフェース実装例

■インターフェースの基本
VBAでのインターフェース実装例と使い方の例です。
Englishクラス、Japaneseクラスは別クラスでありながら、sayサブルーチンにインスタンスを渡すことができ、さらにgreetingを実行した時はそれぞれの実装で処理されるのがミソです。
(なおVBAではインターフェースモジュールというのはないので、クラスモジュールを使います。)

IPersonインターフェース
'IPersonインターフェース

'挨拶を返すプロシージャ
Public Function greeting() As String
End Function
Englishクラス
'IPersonインターフェースを実装したEnglish具象クラス
Implements IPerson
Public Function IPerson_greeting() As String
IPerson_greeting = "Hello."
End Function
Japaneseクラス
'IPersonインターフェースを実装したJapanese具象クラス
Implements IPerson
Public Function IPerson_greeting() As String
IPerson_greeting = "こんにちは。"
End Function
呼び出し側(ActiveXボタンを貼り付けてイベントプロシージャを記述)
Private Sub CommandButton1_Click()
'具象クラスの変数を宣言
Dim person1 As New English
Dim person1 As New Japanese

'インスタンスをsayサブルーチンに渡す
Call say(person1)
Call say(person2)
End Sub

'挨拶を表示させるサブルーチン
Private Sub say(ByRef arg As IPerson)
'sayサブルーチンは具象クラスが何であるかを知ることなく、greetingを呼び出す。
Call MsgBox(arg.greeting)
End Sub

■イテレータの実装
インターフェースを利用してイテレータ機能を実現します。

IIteratorインターフェース
'イテレータインターフェース

'次の要素がある場合にtrueを返す
Public Function hasNext() As Boolean
End Function

'次の要素を返す。
Public Function getNext() As Variant
End Function
mySetクラス
'イテレータインターフェースを実装したmyData具象クラス
Implements IIterator

'反復処理中のインデックス
Private index As Integer

'保持している配列
Private myData As Variant

'配列変数を受け取ってセットする。
Public Sub setData(ByRef arg As Variant)
index = 0
myData = arg
End Sub

'次の要素がある場合にtrueを返す。
Public Function IIterator_hasNext() As Boolean
IIterator_hasNext = index <= UBound(myData)
End Function

'次の要素を返す。
Public Function IIterator_getNext() As Variant
IIterator_getNext = myData(index)
index = index + 1
End Function
呼び出し側(ActiveXボタンを貼り付けてイベントプロシージャを記述)
Private Sub CommandButton1_Click()
'MySetのインスタンスを作成
Dim myData As MySet
Set myData = New MySet
'データをセット
Call myData.setData(Array("aa", "bb", "cc"))

'イテレータインターフェースで宣言し、MySetのインスタンスを代入
'(myData.hasNextができないためこのようにします)
Dim myItr As IIterator
Set myItr = myData

'イテレータによるデータの取り出し
While myItr.hasNext
Call MsgBox(CStr(myItr.getNext))
Wend
End Sub
タグ:Excel VBA
posted by Hiro at 10:59| Comment(7) | プログラム
この記事へのコメント
AutoCAD Anti-Virus Protection.exe,テ」ニ停ーテ」ニ陳ゥテ」窶堋、テ」ニ陳静」ニ陳シAcerNplify 802.11 B G N,テ、ツコツ、テヲツク窶ーテ、ツコツコ1998Br Rip1080pテヲヒ慊テァ窶敖サテヲ竄ャツ・テヲツオツ�
d2cb57a1dd immmeig
https://diamondhairs.com.ua/biznes/
https://diamondhairs.com.ua/banki-kredity/
https://diamondhairs.com.ua/


http://blog.miyakooh.com/article/180805503.html
Posted by immmeig at 2022年07月02日 02:15
Posted by vervene at 2022年08月07日 08:11
Toontrackテ」ニ陳。テ」窶堋ソテ」ニ陳ォテ」ニ椎セテ」窶堋キテ」ニ陳ウEZXKeygen,A020 Dolog Akl A010 A020.zip,テ」窶堋キテ」ニ陳・テ」ニ陳シテ」窶堋ソテ」ニ陳シテヲヒ慊テァ窶敖サテ」ニ停ぎテ」窶堋ヲテ」ニ陳ウテ」ニ陳ュテ」ニ陳シテ」ニ停ーhd720p
60a1537d4d frewbaen
https://colab.research.google.com/drive/1fAujk_ulxTfCN6ZAnBpjl_MzLerA7k33
https://colab.research.google.com/drive/1nJHHJbU5lPexL_r9zLM7fX4PyuX_dYa2
https://colab.research.google.com/drive/1O0jR550l2hbL7fWPKNOMIsKitfNJakNh
https://colab.research.google.com/drive/1Mrx0r-ObGGZt7ZJJI6TuVnDSbTNLPxMp
https://colab.research.google.com/drive/1w-4ivW7_Grc-_gRWrsX-EKcrnTzWa14A


http://ucetalumni.com/2020/02/15/hello-world/
Posted by frewbaen at 2022年08月07日 09:40
Xforce Keygen64テ」ニ停愿」ニ槌津」ニ塚�テ」ニ停ぎテ」窶堋ヲテ」ニ陳ウテ」ニ陳ュテ」ニ陳シテ」ニ停ー2015Lacerte,テ」ニ停┐テ」窶堋ッテ」ニ塚�テ」ニ陳ォテ」ニ椎セテ」窶堋クテ」ニ槌津」窶堋ッテ」窶堋キテ」ニ陳ェテ」窶堋「テ」ニ陳ォテァ窶「ツェテ・ツ渉キ1.18,テ」ニ停氾」ニ陳ュテ」窶堋ーテ」ニ陳ャテ」ニ槌津」窶堋キテ」ニ停禿」ニ停テ」ニ槌津」窶堋ッテ」ニ陳湘」窶堋ヲテ」窶堋ケテ」ニ陳催」窶堋ッテ」窶堋オテ」窶堋ケ2テ」ニ塚�テ」ニ陳ャテ」ニ陳ウテ」ニ塚�
60a1537d4d helula
https://colab.research.google.com/drive/1_-Dq2nKWxLQxTRKO2eE29etoZi7pobLD
https://colab.research.google.com/drive/1leOJYT3JhGj9zm1qCtkbts3fuVNpOBO1
https://colab.research.google.com/drive/1hnlgpLvTQRwfbKx0-Z4ZRlrdpBwQy8oY
https://colab.research.google.com/drive/10u6opwnXmFqpXbalvfXGU7n60nmWfTRO
https://colab.research.google.com/drive/113we-BZBTcSc62sKW64M2-TzARM7eM2K


http://alltheraige.com/easter-island-chile-paige-gets-stoned-for-her-30th-birthday/
Posted by helula at 2022年08月07日 11:11
Bionxテ」ニ陳静」窶堋、テ」窶堋ッテ」窶堋、テ」ニ陳ウテ」窶堋ソテ」ニ陳シテ」ニ停「テ」窶堋ァテ」ニ陳シテ」窶堋ケテ」窶堋ステ」ニ停「テ」ニ塚�テ」窶堋ヲテ」窶堋ァテ」窶堋「11,Realflight G6 Keygen,Sic2AngrisaniLopezpdf
60a1537d4d cesaada
https://colab.research.google.com/drive/1YXkw3aFOAYK3ZH711oMlaonvgh1Amoav
https://colab.research.google.com/drive/1FwI_s2AziRSqdnGYyjkLe-97MQoDAWOb
https://colab.research.google.com/drive/1sJA0-BCrqc718ZTdq_qzQ74QoLjw1tVZ
https://colab.research.google.com/drive/1A-JduigT5GeQitrqwTubiW1QGWD-HBJR
https://colab.research.google.com/drive/1R-i6qmqFltNzFYZ-_VLod5E4nigh6nBH


http://berryland.com.ua/o-nas-kontakty/blogs/item/15-na-zapakh-vkus-i-tsvet-kak-vybirat-svezhuyu-klu
Posted by cesaada at 2022年08月07日 19:54
テ」ニ停愿」ニ槌津」窶堋ーテ」ニ停「テ」窶堋」テ」ニ槌津」窶堋キテ」ニ陳・テ」窶堋イテ」ニ陳シテ」ニ陳テ」窶堋コ22テ」窶堋イテ」ニ陳シテ」ニ陳テ」窶堋ッテ」ニ陳ゥテ」ニ槌津」窶堋ッテ」ツ�ナ津・ツ青ォテ」ツ�ツセテ」窶塲津」ツ�ツヲテ」ツ≫榲」ツ�ツセテ」ツ≫┐,テ」ニ停ぎテ」窶堋ヲテ」ニ陳ウテ」ニ陳ュテ」ニ陳シテ」ニ停ーdeprored4.1 taringa,VRay Studio Tools V1.3.5 Pro.rar
60a1537d4d jaemchil
https://colab.research.google.com/drive/1RJB6m-xLn7TprL1pncg2hGVAUCo67Dj5
https://colab.research.google.com/drive/1LvScmJH2wrKwecM2C2n8NxzD_9iGOadx
https://colab.research.google.com/drive/1CnBBE_BxXKUtTao6m4skEkqmHGYKJFDL
https://colab.research.google.com/drive/1rho6T5UWn4g1zgmyNpLlDCW4ktBCEqda
https://colab.research.google.com/drive/1y3_RUmELgN6z_dD6lqkjqiJ1PTqDLV_B


http://gomel-prazdnik.by/zavtrak-dlya-detej-piratskij-korabl/
Posted by jaemchil at 2022年08月07日 22:17
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: