2017-05-05 50 views
2

當在32位辦公室Win 7 64位上運行32位VB應用程序時,一切工作正常。當使用64位Office(特別是Word)運行時,大多數代碼工作正常,但Word.selection類的.Paste方法因'此命令不可用'而失敗。用戶可以在該點使用ctrl-V粘貼內容。如何將VB代碼更改爲支持32位和64位Word?32 VB應用自動化與32位MS辦公室

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

這是不太可能,這有什麼關係位數。錯誤只是告訴你Copy()沒有在剪貼板上放置任何東西。看起來相當準確,沒有明顯的代碼選擇任何東西。 –

回答

0

...包含表單元格的選擇還可能導致 不可預知的行爲。如果 選擇位於表格內,Information屬性會告訴您。

由於範圍對象共享許多相同的方法和屬性作爲 選擇對象,使用對象範圍是優選的用於操縱 一個文件時,沒有理由物理改變當前選擇 。 來源:Selection interface - Remarks

我建議避免使用Selection對象儘可能的。而應使用適當類型的類型化引用;在這種情況下是Word.RangeCopyPasteWord.Range對象上的方法,應該在有效的引用上可用。假設cellWord.Cell對象引用,請使用它的Range屬性。

所以不是:

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

使用:

cell.Range.Paste 
+0

更改爲使用Range對象代替Selection對象,並將異常更改爲「該行爲被組織策略阻止」。文檔被存儲在不屬於受信任位置的文件夾中,但將該位置添加到列表中,並且仍然出現錯誤。 –

+0

@StephenHussey,這聽起來像[信息權限管理](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屬性只能處理文本內容,並將複選框變成正方形。 –