VBA 对象参数不匹配类型

问题描述

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...