【问题标题】:Select Case Function asking for Return Value选择要求返回值的案例函数
【发布时间】:2013-09-16 14:52:21
【问题描述】:

我正在尝试写入 Select Case 函数,一个用于两个 Excel 工作表,一个用于一系列单元格。这些函数用于为排序过程索引工作表和范围。但是,函数要求我返回值,我不确定要返回什么值。我无法返回我的参数。基本上,我希望我的排序子循环遍历两个工作表和两个范围,并对函数中选择范围内的工作表进行排序。

如果有更好的方法,我也愿意接受建议。

这是我的代码:

Dim xlWB As Excel.Workbook = CType(Globals.ThisWorkbook.Application.ActiveWorkbook, Excel.Workbook)
Dim xlWSEmployee As Excel.Worksheet = CType(CType(xlWB.Sheets("byEmployee"), Excel.Worksheet), Excel.Worksheet)
Dim xlWSPosition As Excel.Worksheet = CType(CType(xlWB.Sheets("byPosition"), Excel.Worksheet), Excel.Worksheet)

    Public Function SheetsToSort(Index As Long) As Excel.Worksheet

            Select Case Index

                Case 1 : SheetsToSort = xlWSEmployee
                Case 2 : SheetsToSort = xlWSPosition


            End Select

            ***Return (?)***

        End Function

        Public Function GetRange(index As Long) As Excel.Range

            Select Case index

                Case 1 : GetRange = xlWSEmployee.Range("A1")
                Case 2 : GetRange = xlWSPosition.Range("W1")



            End Select

            ***Return (?)***

        End Function

        Sub Sort_Sheets()


            Dim refSheets As Excel.Worksheet
            Dim sortRange As Excel.Range
            Dim x As Long


            'This is Step 6 when the frmDataImportSplash is activated.

            'The key formulas only work if the data is sorted properly. The procedure
            'below sorts each sheet by the required field. Look at the public_Declarations module
            'for the pass byRef.

            For x = 1 To 2 Step 1

                refSheets = SheetsToSort(x)
                sortRange = GetRange(x)

                With refSheets

                    .Sort.SortFields.Clear()
                    .Sort.SortFields.Add(Key:=(refSheets.sortRange), SortOn:=XlSortOn.xlSortOnValues, Order:=Excel.XlSortOrder.xlAscending, DataOption:=XlsortDataoption.xlSortNormal)

                    With .Sort

                        .Header = XlYesNoGuess.xlYes
                        .MatchCase = False
                        .Orientation = Excel.XlSortOrientation.xlSortColumns
                        .SortMethod = Excel.XlSortMethod.xlPinYin
                        .Apply()


                    End With

                End With

            Next x

        End Sub

【问题讨论】:

    标签: vb.net


    【解决方案1】:

    尝试使用Return 语句而不是旧的FunctionName = ReturnValue,然后,如果您越过Select 语句,那肯定是错误吗?

    Public Function SheetsToSort(Index As Long) As Excel.Worksheet
    
       Select Case Index
           Case 1 : Return xlWSEmployee
           Case 2 : Return xlWSPosition
       End Select
    
       Throw New ArgumentOutOfRangeException("Index")
    
    End Function
    
    Public Function GetRange(index As Long) As Excel.Range
    
       Select Case index
           Case 1 : Return xlWSEmployee.Range("A1")
           Case 2 : Return xlWSPosition.Range("W1")
       End Select
    
       Throw New ArgumentOutOfRangeException("index")
    
    End Function
    

    【讨论】:

    • 非常不鼓励多次退货。使用变量存储值并在方法结束时返回
    • @Dubas - 对不起?在现代语言中多次返回是完全合法的,无论方法如何退出都会进行资源清理。
    • @Damien_The_Ubeliever 。不是资源问题,而是“最佳实践”和“编码约定”的问题,以使代码更好。更易读,更容易。在所有代码约定中通常不鼓励使用多个“返回”语句,以防止代码维护的“奇怪”问题。您的代码完全有效,但作为持久示例并不完美。
    • @Dubas - 单次返回(很像制表符的 2 对 4 对 8 个空格)往往是一个战场,几乎不可能让对方相信他们是不正确的。
    • @Damien_The_Ubeliever .. 空格 vs 制表符是代码组织的战场,但方法中间的“返回”是一个问题,在有一群开发人员的大型项目中非常有意义。如果一个开发人员在一个方法中更改了其他开发人员大方法的代码并返回它需要更多的时间来检查方法流程是否正确并且没有问题。但。你说得对,这是“代码建议”,可以用不同的方式解释
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多