2017-10-24 2 views
2

ExcelスプレッドシートからデータをインポートするWord文書があります。どちらのファイルも私のものではありません。私はこの問題を継承しました。以前のバージョンのExcelスプレッドシートでは、データはQからTの列にありました。新しいバージョンでは、列はRからUの列にあります。使用されるコードは次のとおりです。以前のバージョンのドキュメントを実行しても問題はありません。できるだけ早く私はそれがこのエラーコードを壊し、新しい文書をインポートを行うよう:Word 2010マクロが動作しません

5941 - コレクションの要求のメンバーが

存在しないデバッガが問題としてコードElseIf cel.Value <> ""を強調します。新しいコードは以下の通りです。 (動作していた古いコードは、上記の範囲を除いて全く同じです)。

どのような考えですか?

ありがとうございます。

Sub ImportComplianceResults() 

    Dim fd As FileDialog, oApp As Excel.Application, oWb As Excel.Workbook, iWs As Integer, rData As Excel.Range 

    Set fd = Application.FileDialog(msoFileDialogFilePicker) 
    With fd 
     'Open modal window 
     .Title = "Select file to import:" 
     .InitialFileName = "X:\Template\" 
     .Filters.Clear 
     .Filters.Add "Excel files", "*.xlsx" 
     .InitialView = msoFileDialogViewList 
     .AllowMultiSelect = False 
     If .Show = -1 Then 
      Set oApp = New Excel.Application 
      Set oWb = oApp.Workbooks.Open(.SelectedItems(1), , True) 
      'Check for worksheet in selected file 
      For Each ws In oWb.Worksheets 
       If ws.Name = "Compliance Results" Or ws.Name = "Résultats de conformité" Then iWs = ws.Index 
      Next ws 
      If iWs > 0 Then 
       Set rData = oWb.Worksheets(iWs).Range("R10:T10,R13:U15,R17:U17,R19:U19,R21:U21,R23:U23,R25:U25,R27:U27,R29:U29,R32:U34,R37:U39") 
       With ActiveDocument 
        For Each cel In rData 
         If IsError(cel.Value) Then 
          .SelectContentControlsByTag(cel.Address).Item(1).Range.Text = "#N/A" 
         ***ElseIf cel.Value <> "" Then 
          .SelectContentControlsByTag(cel.Address).Item(1).Range.Text = Format(cel.Value, cel.NumberFormat)*** 
         Else 
          .SelectContentControlsByTag(cel.Address).Item(1).Range.Text = " " 
         End If 
        Next cel 
       End With 
       MsgBox "Data imported successfully.", vbInformation 
      Else 
       MsgBox "No data exists in selected file." & vbCr & "Import cancelled.", vbCritical 
      End If 
      oWb.Close False 
      'Cleanup Resources 
      Set rData = Nothing 
      Set oWb = Nothing 
      Set oApp = Nothing 
     Else 
      MsgBox "Import cancelled.", vbCritical 
     End If 
    End With 

End Sub 

答えて

0

使用してみてください:

ElseIf Not cel.Value = "" Then 
    .SelectContentControlsByTag(cel.Address).Item(1).Range.Text = Format(cel.Value, cel.NumberFormat) 
+0

ありがとうDavid!私はあなたの提案を試みたが、それは何かを壊すことはありません、それは良いです。しかし、正しい範囲で再度インポートを試みると、すぐには機能しません。私はその範囲内で見ていないものがあると思っています。単語文書には合計4つのマクロがあります。それは、他の3人のうちの1人が問題を引き起こしている問題の1つになる可能性があります。 – Richard

0

あなたの代わりに.Valueののエラー制御、ただの.textプロパティを乗り越えたら。

... 
ElseIf cel.Text <> "" Then 
    .SelectContentControlsByTag(cel.Address).Item(1).Range.Text = cel.Text 
... 
+0

提案をありがとう!私がそうするとき、それはその時点で壊れます。私がしたことは、古い方法に戻って範囲を修正し、それがうまくいった(データが適切な場所にない)あなたがこの修正を行ったときにうまくいかなかった:( – Richard

関連する問題