32位VB应用程序使用32位MS Office自动执行

时间:2017-05-05 15:46:57

标签: vb.net ms-word ms-office

在32位办公室的Win 7 64位上运行32位VB应用程序时,一切正常。当使用64位Office(特别是Word)运行时,大多数代码都可以正常工作,但Word.selection类的.Paste方法失败并显示“此命令不可用”。用户可以在此时使用ctrl-V粘贴内容。如何更改VB代码以支持32位和64位Word?

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块已更改为忽略异常并且正在执行粘贴操作。

1 个答案:

答案 0 :(得分:0)

  

...包括表格单元格的选择也可以导致   不可预测的行为。信息属性将告诉您是否   选择在表格内。

     

因为Range对象共享许多与之相同的方法和属性   使用Range对象的选择对象更适合于操作   没有理由在物理上改变电流的文件   选择。   资料来源: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