将 2 个范围变量传递给需要的子对象/ByRef 参数类型不匹配错误

时间:2021-06-08 03:33:53

标签: vba

我正在尝试使用条件格式规则从 1 个工作表复制范围,并使用确切格式粘贴到另一个工作簿中,但删除条件规则。 我将 2 个范围对象传递给我的子程序,并且在调用宏时出现错误。请帮帮我。

  Sub Create() 
  Dim rgFrom, rgTo As Range
  oldBook = ActiveWorkbook.Name
  Workbooks.Add
  Set rgFrom = Workbooks("Daily Flow Template.xlsm").Worksheets("DailyFlow").Range("A1:BZ110")
  Set rgTo = ActiveWorkbook.Worksheets("Sheet1").Range("A1:BZ110")
  PasteFormattedRange (rgFrom), rgTo   ----- Error Object Required
  End Sub

  Sub PasteFormattedRange(ByRef rgFrom As Range, ByRef rgTo As Range)
   Dim S                     As String
   Dim rgStart As Range
   Dim i As Long, CF_Format  As Long
   Dim SaveDisplayAlerts As Boolean, SaveScreenUpdating As Boolean
   Dim HTMLInClipBoard       As Boolean
   Dim Handle As Long, Ptr As Long, FileName As String
   Set rgStart = Selection
   rgFrom.Copy

'Enumerate the clipboard formats
  If OpenClipboard(0) Then
    CF_Format = EnumClipboardFormats(0&)
    Do While CF_Format <> 0
        S = String(255, vbNullChar)
        i = GetClipboardFormatName(CF_Format, S, 255)
        S = Left(S, i)
        HTMLInClipBoard = InStr(1, S, "HTML Format", vbTextCompare) > 0
        If HTMLInClipBoard Then
            Application.CutCopyMode = False
            Application.Goto rgTo
            ActiveSheet.PasteSpecial Format:="HTML"
            Application.Goto rgStart
            Exit Do
        End If
        CF_Format = EnumClipboardFormats(CF_Format)
    Loop
    CloseClipboard
 End If

End Sub

1 个答案:

答案 0 :(得分:1)

ByRef 参数类型不匹配

来自“This answer”的

ByRef argument type mismatch in Excel VBA 可能有助于比我更清楚地解释这个错误。

它的基本要点是:

  • 除非您需要,否则传递参数 ByVal 而不是 ByRef
  • 如果您使用 ByRef,请确保明确声明您的语句,而不是使用默认数据类型 (Variant) 进行声明,这样您将传递 Range,其中 {{1 }} 是预期的。

This answer on my question on CodeReview 还涉及传递参数 RangeByVal 相对。


需要对象(错误 424)

如果您不返回值,则不需要包含括号 ByRef - 您可以在 Using parentheses in code(VBA) 上阅读。

对您的问题行的以下编辑将在没有 ( ) 错误的情况下执行:

Object Required

当对 PasteFormattedRange rgFrom, rgTo Sub 或任何其他 FunctionMethod 使用括号时,您需要将所有参数封装在括号内,而不仅仅是一个 如果确实需要括号

如果要赋值,则需要括号,如下所示:

Property

如果您没有赋值,则不包括括号,如下所示:

Sub Foo()
    x = MyFunction(Argument1, Argument2)
End Sub
相关问题