1

在我的项目中,我有 2 个函数,每个函数都有 3 个工作表,我已将它们设置为 Select Case。每个功能分为 3 张。这些过程是一个更大的程序的一部分,该程序将数据导入 Excel 工作簿,然后格式化该数据以执行一些分析。因此,在执行每个子程序时必须遵循一个逐步的顺序。

原因是因为发生在一张纸上的任何事情都必须发生在函数中的其他 3 张纸上。例如,如果一个已排序,则所有 3 个都必须排序。考虑到这一点,我有一个程序可以在第一个函数中用三张纸自动填充 B6:AH6 中的一些数据。

这里是:

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

    'This function indexes all of the Employee sheets
    'to use in various loops during he instal process
    '@param EmployeeSheets, are the sheets to index

    Select Case Index

        Case 1 : Return xlWSAllEEAnnul
        Case 2 : Return xlWSAllEEHourly
        Case 3 : Return xlWSAllEESalary

    End Select

    Throw New ArgumentOutOfRangeException("Index")

End Function

Sub copyFormulas()

    Dim eeRefSheets As Excel.Worksheet

    For i As Long = 1 To 3 Step 1

        eeRefSheets = EmployeeSheets(i)

        With eeRefSheets
            Dim lngLr As Long

            lngLr = .Cells.Find(What:="*", SearchDirection:=Excel.XlSearchDirection.xlPrevious, SearchOrder:=Excel.XlSearchOrder.xlByRows).Row

            .Range("B6:AH6").AutoFill(.Range("B6:AH" & lngLr), Excel.XlAutoFillType.xlFillDefault)

        End With

    Next i

End Sub

所以那里没有问题,一切正常。除了现在我必须对这些工作表做同样的事情:

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

'This function indexes all of the Position sheets
'to use in various loops during he instal process
'@param PositionSheets, are the sheets to index

Select Case Index

    Case 1 : Return xlWSAllPositionAnnul
    Case 2 : Return xlWSAllPositionHourly
    Case 3 : Return xlWSAllPositionSalary

End Select

Throw New ArgumentOutOfRangeException("Index")

我想做的不是两次编写我的 For 循环,而是将两个 Select Case 索引合并到一个循环中并执行自动填充。

可以这样做,还是有更好的方法?

4

1 回答 1

1

尝试将其作为子 .. 并使用 Byref 作为变量引用 ..

Public Sub EmplNPosSheets(Index As Long, ByRef ES As Excel.Worksheet, ByRef PS As Excel.Worksheet) 

    'This function indexes all of the Employee sheets
    'to use in various loops during he instal process
    '@param EmployeeSheets, are the sheets to index

    Select Case Index

        Case 1 
          ES = xlWSAllEEAnnul
          PS = xlWSAllPositionAnnul
        Case 2 
          ES = xlWSAllEEHourly
          PS = xlWSAllPositionHourly
        Case 3 
          ES = xlWSAllEESalary
          PS = xlWSAllPositionSalary

    End Select

    Throw New ArgumentOutOfRangeException("Index")

End Sub

要使用它,请这样做..

Dim eeRefSheets As Excel.Worksheet 
Dim posRefSheets As Excel.Worksheet

Set eeRefSheets = Application.Worksheets(0)
Set posRefSheets = Application.Worksheets(0)

EmplNPosSheets(i,eeRefSheets,posRefSheets)
于 2013-09-22T02:55:08.650 回答