VBA 对象参数不匹配类型

时间:2021-05-08 11:14:33

标签: vba object types arguments mismatch

我创建了一个代码,该代码将一个子例程用于 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

请....有人帮我...

2 个答案:

答案 0 :(得分:0)

我得到了 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

不幸的是,错误仍然存​​在

答案 1 :(得分:0)

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", "Primo argomento", 1, objDoc, objSelection)
End Sub
相关问题