4

複数の連絡先情報を手動で入力して、連絡先(1つずつ)またはすべてを指定したディレクトリ内の個々のvcfファイルにエクスポートできるExcelファイルを作成することを検討しています。最善の方法はVBAを使用することだと思いますが、私はあまり知識がなく、少しプッシュする必要があります。

連絡先フィールドを含むExcelファイルのスクリーンショットを以下に示します。

ここに画像の説明を入力してください

どんなガイダンスでも大歓迎です。

OK、それで私は最初に各行を個々のvcardにエクスポートすることをアドレス指定することから始めました。私は次の戦略に従っています:

  1. 一時的な新しいワークシート(tmp)を作成します
  2. ヘッダーを貼り付けます:BEGIN:VCARD VERSION:3.0
  3. 画像に従って4行目をコピーして貼り付け、VCARDのIDとエクスポートしようとしている行(この最初の場合は行6)が含まれるようにします。ワークシートtmpに転置して貼り付けます。

特定のフィールドでvcardが使用される方法は、フィールドを「;」で区切ることであるため、この段階で行き詰まります。そして彼らは異なる位置にいます。行4のフィールドを見て、VBAでこれらを生成する方法がわかりません。つまり、N1とN2は、N:Stuart;Carolという行を作成する必要があります。また、ADRフィールドについても同じことが起こります。

この完全なコードが生成されたら、VCARDファイルを生成するコードがあります。

この時点での助けをいただければ幸いです。

4

3 に答える 3

2

これが私がそれをする方法です。これらのプロパティのゲッターとセッターを使用して、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

于 2012-11-08T21:02:45.383 に答える
1

編集:Visual Basic言語についての有用な知識が実質的にないことを認めた場合、実際には、それを呼び出すときの単なるヒントや「プッシュ」ではなく、ソリューションが必要でした。解決策を単純な「ヘルプ」と混同しないでください。非常に短い時間で意図した特定の結果(つまりvCardコードの例)に言及した場合、Excelワークシートの目標を達成するために、はるかに短いコードを考え出し、それを任意の形式にエクスポートします。そしてあなたの側からのこれ以上の助けを必要とせずに。しかし、あなたはただプッシュを必要とするプロのように振る舞っています...そのようなことがあれば。繰り返しになりますが、これはプライドに関するものではなく、(私は)攻撃的でもありません。この特定のサイトの限界に関するヒントを落とす行為を批判しているだけです。

あなたの質問はかなり一般的です。このWebサイトの目的は、特定の問題に対する回答を見つけることであり、アプリケーションの複雑さの問題に対する解決策を提供することではないと思います。これは私の最初の試みであり、おそらく私は間違っていますが、この質問は「この質問は研究努力を示していません。不明確または役に立たない」という説明によると、反対票を投じる資格があるようです。

ただし、必要なのが実際にプッシュするだけの場合は、ウィキペディアでVCardファイル形式に関する情報を見つけることができます(例を含む)-形式の最新バージョンはXMLであるため、操作方法を知っていれば簡単です。 Visual Basicで文字列を作成し、スクリプトからExcelセルの内容にアクセスします。 http://en.wikipedia.org/wiki/VCard

そうでない場合は、 http://www.excel-vba-easy.com/などのWebサイトで必要に応じて練習することができます。

試して、より具体的な問題で戻ってください。「答える」のではなく、単に質問にコメントしたかったのですが、その方法が見つかりませんでした。

于 2012-11-08T18:10:15.557 に答える
0

サンプルのExcelシートとそれに対応するVBAコードがあります。 サンプルExcelシート

これは、vcfタイプに変換するための対応するVBAコードです。

Private Sub Create_VCF()
'Open a File in Specific Path in Output or Append mode
Dim FileNum As Integer
Dim iRow As Integer
Dim FirstName As String
Dim LastName As String
Dim FullName As String
Dim EmailAddress As String
Dim PhoneHome As String
Dim PhoneWork As String
Dim Organization As String
Dim JobTitle As String


iRow = 3
FileNum = FreeFile
OutFilePath = "C:\output.VCF"
Open OutFilePath For Output As FileNum

'Loop through Excel Sheet each row and write it to VCF File
While VBA.Trim(Sheets("Sheet1").Cells(iRow, 1)) <> ""



    FirstName = VBA.Trim(Sheets("Sheet1").Cells(iRow, 1))
    LastName = VBA.Trim(Sheets("Sheet1").Cells(iRow, 2))
    FullName = VBA.Trim(Sheets("Sheet1").Cells(iRow, 3))
    EmailAddress = VBA.Trim(Sheets("Sheet1").Cells(iRow, 4))
    PhoneWork = VBA.Trim(Sheets("Sheet1").Cells(iRow, 5))
    PhoneHome = VBA.Trim(Sheets("Sheet1").Cells(iRow, 6))
    Organization = VBA.Trim(Sheets("Sheet1").Cells(iRow, 7))
    JobTitle = VBA.Trim(Sheets("Sheet1").Cells(iRow, 8))

    Print #FileNum, "BEGIN:VCARD"
    Print #FileNum, "VERSION:3.0"

    Print #FileNum, "N:" & FirstName & ";" & LastName & ";;;"
    Print #FileNum, "FN:" & FullName
    Print #FileNum, "ORG:" & Organization
    Print #FileNum, "TITLE:" & JobTitle
    Print #FileNum, "TEL;TYPE=HOME,VOICE:" & PhoneHome
    Print #FileNum, "TEL;TYPE=WORK,VOICE:" & PhoneWork
    Print #FileNum, "EMAIL:" & EmailAddress

    Print #FileNum, "END:VCARD"
    iRow = iRow + 1
Wend

'Close The File
Close #FileNum
MsgBox "Contacts Converted to Saved To: " & OutFilePath & " 
End Sub

ありがとう、これがお役に立てば幸いです。

于 2019-06-09T12:43:19.757 に答える