- ベストアンサー
VBの使い方-Wordに差し込み印刷したデータを使ってオプションボタンをonにする方法
- Excelのデータを、差し込み印刷でWordに取り込んでいます。Wordにオプションボタンと文字列を追加し、特定の条件下でオプションボタンをオンにする方法を知りたいです。
- また、差し込み印刷で取り込んだデータに特定の文字が含まれている場合に、それらを認識して別の文字列を表示させる方法も知りたいです。
- Officeのバージョンは2007を使用しています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 まず、それは、オプションボタンでは間違いです。チェックボックスにしてください。オプションボタンは、デフォルトで必ずひとつチェックがつきます。 コントロールの数と、検索数と合っていないとエラーが出る可能性があります。MailMergeDataSource には、どうやらバグが存在するようです。 ADODB を使っても良いのでしょうけれども、差し込み印刷が、すでに設定されているものとしたら、Word Object を使ったほうがよいでしょう。コントロール名はチェックしておりませんので、おそらく、上から順にという具合になります。 標準モジュールを使います。なお、Word 2007 では、動作チェックされていません。 '------------------------------------------- 'Option Explicit Sub FindTextinField() Dim ds As MailMergeDataSource Dim numRecord As Long Dim i As Long, n As Long, v As Variant Dim fldName As String Dim Ar As Variant Dim strFind As Variant Dim ret() As Boolean '------------------------------------------- '検索語 Ar = Array("A", "B", "D") '------------------------------------------- ReDim ret(UBound(Ar)) For Each v In Ar strFind = v i = i + 1 On Error Resume Next ActiveDocument.MailMerge.ViewMailMergeFieldCodes = False Set ds = ActiveDocument.MailMerge.DataSource fldName = ds.DataFields(i).Name 'for bug (2003/2007) If InStr(1, ds.DataFields(fldName).Value, strFind, 1) > 0 Then n = 1 Else n = 0 End If ds.ActiveRecord = wdFirstRecord If ds.FindRecord(FindText:=strFind, Field:=fldName) Or n Then If n = 0 Then numRecord = ds.ActiveRecord Else numRecord = 1 End If End If If numRecord > 0 Then ret(i - 1) = True Else ret(i - 1) = False End If i = i + 1 'チェック用 'MsgBox numRecord Next v On Error GoTo 0 Set ds = Nothing Call CheckBoxesChecker(ret) End Sub Sub CheckBoxesChecker(ByRef ret() As Boolean) Dim o As Object Dim i As Long On Error Resume Next For Each o In ActiveDocument.Shapes If o.OLEFormat.ClassType = "Forms.CheckBox.1" Then o.OLEFormat.Object.Value = ret(i) i = i + 1 End If Next o On Error GoTo 0 End Sub
お礼
ご丁寧な回答ありがとうございます。 チェックボックスを使うのですね。 もう少し応用したいのですが、自分の勉強が足りないため、 これをきちんと理解してからTRYします。 ありがとうございました。