2017-05-05 6 views
2

32ビットオフィスでWin 7 64ビットで32ビットVBアプリケーションを実行すると、すべて正常に動作します。 64ビットOffice(特にWord)で実行すると、ほとんどのコードが正常に動作しますが、Word.selectionクラスの.Pasteメソッドが失敗し、 'This command is not available'と表示されます。ユーザーはその時点でctrl-Vを使用して内容を貼り付けることができます。 32ビットと64ビットの両方のWordをサポートするためにVBコードをどのように変更できますか?32ビットMSオフィスで自動化するVBアプリケーション

oWorkDoc = oWord.Documents.Open(filename, , True, False) 
oWord.Selection.Copy() 
cell.Select() <--- refers to cell in table in another document 
Try 
    oWord.Selection.Paste() <--- failing statement 
Catch ex As Exception 
    oWord.Visible = True 
    MsgBox(ex.Message) 
End Try 

アップデート:ユーザーはOffice 64ビットを使用していません。彼は32ビットを使用しています。だから謎が肥えます。また、コードシーケンスは、アプリケーションの他の部分で使用され、正常に動作します。また、Try/Catchブロックが例外を無視するように変更され、ペーストアクションが発生しています。

+0

bit化を行うには何を持っていることはほとんどありません。エラーは、単にCopy()がクリップボードに何も置かなかったことを伝えます。かなり正確に見えますが、何かを選択した明白なコードはありません。 –

答えて

0

...テーブルセルを含む選択によっても、予期しない動作が発生する可能性があります( )。 Informationプロパティは、 の選択がテーブル内にあるかどうかを示します。

レンジオブジェクトは 選択オブジェクトと同じメソッドとプロパティの多くを共有しているため、範囲のオブジェクトを使用して物理的に現在 選択を変更する理由がない場合 に文書を操作するため好ましいです。 出典:Selection interface - Remarks

私はできるだけSelectionオブジェクトの使用を避けることをお勧めします。代わりに、適切な型の型付き参照を使用してください。この場合はWord.Rangeです。 CopyおよびPasteは、Word.Rangeオブジェクトのメソッドであり、有効なリファレンスで利用できるはずです。 cellWord.Cellオブジェクト参照であると仮定すると、そのRangeプロパティを使用します。

ので、代わりの:

cell.Select() <--- refers to cell in table in another document 
oWord.Selection.Paste() <--- failing statement 

使用:

cell.Range.Paste 
+0

Selectionオブジェクトの代わりにRangeオブジェクトを使用するように変更され、例外が「アクションは組織ポリシーによってブロックされました」に変更されました。ドキュメントは、信頼できる場所の一部ではなく、その場所をリストに追加したフォルダーに格納されており、エラーが発生しています。 –

+0

@StephenHussey、これは[Information Rights Management]のように聞こえる(https://support.office.com/en-us/article/Information-Rights-Management-in-Office-2010-C7A70797-6B1E-493F-ACF7- 92A39B85E30C#__ toc254684671)問題が発生しました。本当にコピー/ペースト操作を実行する必要がありますか? 'destinationRange.Text = sourceRange.Text'を設定してテキスト値だけをコピーしてみてください。 – TnTinMn

+0

私のテストに基づいて、コンテンツにはコンテンツコントロール(アクティブなチェックボックス)が含まれているため、コピー/ペーストを使用する必要があります。 Textプロパティはテキストコンテンツだけで動作し、チェックボックスを正方形に変えます。 –

関連する問題