问题描述
我创建了一个代码,该代码将一个子例程用于 VBA 中的另一个子例程。 具体来说,我传递了一个由两种方法返回的参数:Documents.Add 和 Selection。 不幸的是,我在争论之间收到了不匹配错误。 这是代码:
Sub crea_tabella(data As String,argomento As String,i As Integer,objDoc As Object,objSelection As Object)
objSelection.TypeText "Table 1"
objSelection.TypeParagraph
Set objRange = objSelection.Range
objDoc.Tables.Add objRange,5,5
Set objTable = objDoc.Tables(i)
objTable.Borders.Enable = True
objTable.Cell(1,1).Range.Text = data
objTable.Cell(3,1).Range.Text = argomento
selezione.EndKey 6
selezione.TypeParagraph
End Sub
Sub crea_tabelle_multiple()
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
Set objDoc = objWord.Documents.Add
Set objSelection = objWord.Selection
Call crea_tabella("01/01/2021","Primo argomento",1,objDoc,objSelection)
End Sub
请....有人帮我...
解决方法
我得到了 objDoc 和 objSelection 的类型名称,并将它们放入代码中:
Sub crea_tabella(data As String,argomento As String,i As Integer,objDoc As Document,objSelection As Selection)
objSelection.TypeText "Table 1"
objSelection.TypeParagraph
Set objRange = objSelection.Range
objDoc.Tables.Add objRange,5,5
Set objTable = objDoc.Tables(i)
objTable.Borders.Enable = True
objTable.Cell(1,1).Range.Text = data
objTable.Cell(3,1).Range.Text = argomento
selezione.EndKey 6
selezione.TypeParagraph
End Sub
Sub crea_tabelle_multiple()
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
Set objDoc = objWord.Documents.Add
Set objSelection = objWord.Selection
'MsgBox TypeName(objDoc)
'MsgBox TypeName(objSelection)
Call crea_tabella("01/01/2021","Primo argomento",1,objDoc,objSelection)
End Sub
不幸的是,错误仍然存在
,objDoc 和 objSelection 未在 crea_tabelle_multiple() 中声明,因此它们属于 Variant 类型。它们不能在 crea_tabella() 中通过 ByRef 传递,因为相应的参数 objDoc As Document、objSelection As Selection 具有确切的数据类型 - 参见 https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/byref-argument-type-mismatch。
在 crea_tabelle_multiple() 中为 objDoc 和 objSelection 添加显式类型定义:
Sub crea_tabelle_multiple()
Dim objDoc As Document,objSelection As Selection ' add it
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
Set objDoc = objWord.Documents.Add
Set objSelection = objWord.Selection
'MsgBox TypeName(objDoc)
'MsgBox TypeName(objSelection)
Call crea_tabella("01/01/2021",objSelection)
End Sub