• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBの使い方-Wordに差し込み印刷したデータを使ってオプションボタンをonにする方法)

VBの使い方-Wordに差し込み印刷したデータを使ってオプションボタンをonにする方法

このQ&Aのポイント
  • Excelのデータを、差し込み印刷でWordに取り込んでいます。Wordにオプションボタンと文字列を追加し、特定の条件下でオプションボタンをオンにする方法を知りたいです。
  • また、差し込み印刷で取り込んだデータに特定の文字が含まれている場合に、それらを認識して別の文字列を表示させる方法も知りたいです。
  • Officeのバージョンは2007を使用しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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

mini_miki
質問者

お礼

ご丁寧な回答ありがとうございます。 チェックボックスを使うのですね。 もう少し応用したいのですが、自分の勉強が足りないため、 これをきちんと理解してからTRYします。 ありがとうございました。

関連するQ&A