【问题标题】:VBA object argument mismatch typeVBA 对象参数不匹配类型
【发布时间】:2021-07-30 11:13:59
【问题描述】:

我在 VBA 中创建了一个使用子例程到另一个子例程的代码。 具体来说,我传递了两个方法返回的参数:Documents.Add 和 Selection。 不幸的是,我收到了一个不匹配的错误 beetween 论点。 这是代码:

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

拜托……有人帮帮我……

【问题讨论】:

  • 请在代码开头添加 Option Explicit。这将向您表明您有许多未变暗的变量。完成此操作后,请告诉我们您收到错误的行。

标签: vba object types arguments mismatch


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-05
      • 2022-01-06
      • 1970-01-01
      相关资源
      最近更新 更多