【问题标题】:Private Sub returning ByRef argument type mismatchPrivate Sub 返回 ByRef 参数类型不匹配
【发布时间】:2017-12-10 20:32:38
【问题描述】:

我写了以下函数

    Public Function sorting(WS As Worksheets, Col As Range, Rng As Range, Sort_Order As XlSortOrder)

   Application.ScreenUpdating = False

    With WS

        .Sort.SortFields.Clear
        .Sort.SortFields.Add Key:=Col, SortOn:=xlSortOnValues, Order:=Sort_Order, DataOption:=xlSortNormal


        With .Sort


            .SetRange Rng
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply


        End With


    End With

    Application.ScreenUpdating = True


End Function

现在我正在尝试根据函数运行以下代码。

Private Sub cmbCareerPath_Change()

Application.ScreenUpdating = True


    Set WS = Worksheets("FindPath")
    Set Col = WS.Range("D:D")
    Set Rng = WS.Range("A:Z")

        Call sorting(WS, Col, Rng, xlAscending)

            Application.ScreenUpdating = False


End Sub

但是,当我运行我的 Sub 时,我得到了编译错误:

ByRef argument type mismatch

在 WS 上的下面一行。

调用排序(WS, Column, Rng, xlAscending)

任何帮助将不胜感激。

谢谢

【问题讨论】:

  • WS 是一个工作表对象。您将其传递给 WorkSheets 集合。在您的子中,将 WS as WorkSheets 更改为 WS as WorkSheet

标签: excel vba


【解决方案1】:

首先,您需要在 subcarrerpathchange 中声明所有变量。否则,您将传递变体。这将解决你眼前的问题。 (如上所述,Dim as Worksheet,虽然现在它看到的是 Variant,而不是 Worksheets)

Dim ws As Worksheet
Dim col As Range
Dim rng As Range
Dim xla As XlSortOrder

然后将您的公共功能更改为 ws 作为工作表(不是工作表)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-03
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-10
    相关资源
    最近更新 更多