これが私がそれをする方法です。これらのプロパティのゲッターとセッターを使用して、CContactというクラスを作成します。
Private mlContactID As Long
Private msLastName As String
Private msFirstName As String
Private msJobTitle As String
Private msCompany As String
Private msDepartment As String
Private msEmail As String
Private msBusinessPhone As String
Private msCellPhone As String
Private msPager As String
Private msFax As String
すべてのCContactインスタンスを保持するCContactsクラスを作成します。CContactsで、FillFromRangeメソッドを作成して、すべての連絡先をロードします。
Public Sub FillFromRange(rRng As Range)
Dim vaValues As Variant
Dim i As Long
Dim clsContact As CContact
vaValues = rRng.Value
For i = LBound(vaValues, 1) To UBound(vaValues, 1)
Set clsContact = New CContact
With clsContact
.ContactID = vaValues(i, 1)
.LastName = vaValues(i, 2)
.FirstName = vaValues(i, 3)
.JobTitle = vaValues(i, 4)
.Company = vaValues(i, 5)
.Department = vaValues(i, 6)
.Email = vaValues(i, 7)
.BusinessPhone = vaValues(i, 8)
.CellPhone = vaValues(i, 9)
.Pager = vaValues(i, 10)
.Fax = vaValues(i, 11)
End With
Me.Add clsContact
Next i
End Sub
このように、クラスを満たすためのプロシージャを作成します
Public Sub Auto_Open()
Initialize
End Sub
Public Sub Initialize()
Set gclsContacts = New CContacts
gclsContacts.FillFromRange Sheet1.Range("C6").CurrentRegion
End Sub
この例では、ダブルクリックイベントを使用しています。連絡先をダブルクリックすると、vcardが作成されます。ボタンを使用するには、変更する必要があります。行を決定するためにクリックされたボタンのTopLeftCellプロパティを取得します。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim lContactID As Long
lContactID = Me.Cells(Target.Row, 3).Value
If gclsContacts Is Nothing Then Initialize
If lContactID <> 0 Then
gclsContacts.Contact(CStr(lContactID)).CreateVCardFile
End If
End Sub
これにより、列CからIDが取得され、CreateVCardFileメソッドが呼び出されてファイルが書き出されます。
Public Sub CreateVCardFile()
Dim sFile As String, lFile As Long
Dim aOutput(1 To 12) As String
lFile = FreeFile
sFile = ThisWorkbook.Path & Application.PathSeparator & Me.VCardFileName
Open sFile For Output As lFile
aOutput(1) = gsBEGIN
aOutput(2) = gsLASTNAME & Me.LastName
aOutput(3) = gsFIRSTNAME & Me.FirstName
aOutput(4) = gsTITLE & Me.JobTitle
aOutput(5) = gsCOMPANY & Me.Company
aOutput(6) = gsDEPARTMENT & Me.Department
aOutput(7) = gsEMAIL & Me.Email
aOutput(8) = gsBUSINESSPHONE & Me.BusinessPhone
aOutput(9) = gsCELLPHONE & Me.CellPhone
aOutput(10) = gsPAGER & Me.Pager
aOutput(11) = gsFAX & Me.Fax
aOutput(12) = gsEND
Print #lFile, Join(aOutput, vbNewLine)
Close lFile
End Sub
これは、文字列を作成してファイルに書き込むだけです。この例はVCard仕様ではないため、これらの詳細を理解する必要があります。このメソッドには、いくつかの定数とファイル名を作成するプロパティが必要です。
Public Const gsBEGIN As String = "BEGIN:VCARD VERSSION: 3.0"
Public Const gsEND As String = "END"
Public Const gsLASTNAME As String = "N1;"
Public Const gsFIRSTNAME As String = "N2;"
Public Const gsTITLE As String = "TITLE;"
Public Const gsCOMPANY As String = "ORG1;"
Public Const gsDEPARTMENT As String = "ORG2;"
Public Const gsEMAIL As String = "EMAIL,TYPE=WORK;"
Public Const gsBUSINESSPHONE As String = "TEL,TYPE=WORK;"
Public Const gsCELLPHONE As String = "TEL,TYPE=CELL;"
Public Const gsPAGER As String = "TEL,TYPE=PAGER;"
Public Const gsFAX As String = "TEL,TYPE=WORK,TYPE=FAX;"
そしてファイル名プロパティ
Public Property Get VCardFileName() As String
VCardFileName = Me.LastName & "_" & Me.FirstName & ".vcf"
End Property
このファイルをダウンロードすると、省略された詳細とそれがどのように連携するかを確認できます。
http://dailydoseofexcel.com/excel/VCardCreator.zip