Saya memiliki tugas VBA yang tampaknya sepele. Namun, saya biasanya tidak menggunakan VBA dan hampir tidak pernah dalam konteks Microsoft Word. Saya memiliki formulir Word yang menggunakan bidang Kontrol Konten (serta beberapa tombol radio ActiveX) dan perlu mengujinya dengan mencetak cap waktu dan menyelesaikan entri formulir ke file yang dibatasi koma. Ketika saya menjalankan kode berikut:

Sub WriteToText()
Dim DataFile As String
Dim StrData As String
Dim CCtrl As ContentControl
Dim bControl_Exists As Boolean

DataFile = "C:\Users\Annabanana\Documents\Data.txt"
StrData = "": Open DataFile For Append As #1
StrData = Format(Now, "DD-MMM-YYYY hh:mm:ss")

With Application.ActiveDocument
    bControl_Exists = .Saved
    For Each CCtrl In ThisDocument.ContentControls
        With CCtrl
            Select Case .Type
                Case Is = wdContentControlCheckBox
                    StrData = StrData & "," & .Checked
                Case wdContentControlDate, wdContentControlDropdownList, wdContentControlComboBox, wdContentControlText
                    StrData = StrData & "," & .Range.Text
                Case Else
            End Select
        End With
    Next
End With
Print #1, StrData: Close #1
End Sub

Saya mendapatkan stempel tanggal tetapi tidak ada yang lain. Idealnya saya akhirnya ingin mencetak tag bidang dan nilainya yang sesuai seperti:

Nilai Tag11 Nilai Tag22 Nilai Tag33 .............

Akhirnya semua itu akan dicetak ke database, tetapi pada titik ini saya hanya ingin dapat melihat bagaimana data keluar dari formulir dan bagaimana saya perlu mengubahnya sebelum memuat. Setiap saran sangat dihargai. Terima kasih.

0
Annabanana 21 Mei 2020, 00:04

1 menjawab

Jawaban Terbaik

Pada intinya, masalah Anda bermuara pada penyalahgunaan Dokumen Ini. Mencoba:

Sub GetCCtrlData()
Dim CCtrl As ContentControl, StrData As String, DataFile As String
StrData = Format(Now, "DD-MMM-YYYY hh:mm:ss")
DataFile = "C:\Users\" & Environ("UserName") & "\Documents\Data.txt"
For Each CCtrl In ActiveDocument.ContentControls
  With CCtrl
    StrData = StrData & vbTab & .Title & "|" & .Tag & ": "
    Select Case .Type
      Case Is = wdContentControlCheckBox
        StrData = StrData & .Checked
      Case wdContentControlDate, wdContentControlDropdownList, wdContentControlRichText, wdContentControlText
        StrData = StrData & .Range.Text
      Case Else
    End Select
  End With
Next
Open DataFile For Append As #1: Print #1, StrData: Close #1
End Sub

Kode di atas juga mengekspor judul dan tag kontrol konten, menggunakan pembatas tab, bukan koma. Menggunakan pembatas tab memungkinkan kemungkinan ada koma dalam data.

Pada tahap tertentu, saya membayangkan, Anda ingin memproses banyak dokumen. Untuk itu, lihat: http://www.vbaexpress.com/forum/showthread.php?40406-Extracting-Word-form-Data-and-exporting-to-Excel-spreadsheet&p=257696&viewfull=1#post257696 . Meskipun kode di sana mengekstrak data ke buku kerja Excel, prinsip dasarnya sama.

1
macropod 20 Mei 2020, 22:50