VBA函数传递参数方式

        VBA函数传递参数值时分为Byval(值传递)和Byref(地址传递),用法上,分别相当于C/C++的值传递使用方法和引用传递使用方法。在VBA中,参数传递的默认方式是Byref,因为本质想法是对于相同命名的参数,在系统中采用同一个数值。

'获取非空行
Function GetNotNullRow(ByVal iStartRow, ByRef iRow)
    Dim Rng As Range
    For Each Rng In Range("B" & iStartRow & ":" & "P" & 100)
    If Rng <> "" Then
        iRow = Rng.Row
        Exit For
    End If
    Next
End Function
'附件8
Sub Annex8(strWorkbookName As String)
    Dim SourseBook As Workbook  '源工作簿
    Dim MainBook As Workbook  '主工作簿
    Dim strSheetName As String  '工作表名
    Dim iFoundRow As Integer '查找到数据的行
    Dim iMainBookStartRow As Integer  '主工作簿开始行
    Dim iKeyRow As Integer  '关键字行
    Dim strKeyRow As String  '关键字行的关键字符
    Set SourseBook = Workbooks(strWorkbookName)
    Set MainBook = Workbooks(strMainWorkbookName)
    strSheetName = "附件8"  '工作表名
    strKeyRow = "统计范围"  '关键字符
    
    Windows(strWorkbookName).Activate
    iKeyRow = ActiveWorkbook.Sheets(strSheetName).Range("A:A").Find(strKeyRow).Row
    Call GetNotNullRow(iKeyRow + 2 + 1, iFoundRow) '+2因为开始行关键字为三和一合并单元格,+1下一行开始
    Windows(strMainWorkbookName).Activate
    iMainBookStartRow = ActiveWorkbook.Sheets(strSheetName).Range("A65535").End(xlUp).Row + 1   '+1下一行开始
    If iMainBookStartRow - 1 = iKeyRow Then
        iMainBookStartRow = iMainBookStartRow + 2  '开始行关键字为三和一合并单元格,第一次添加数据需+2
    End If
    SourseBook.Sheets(strSheetName).Rows(iFoundRow).Copy MainBook.Sheets(strSheetName).Range("A" & iMainBookStartRow)
End Sub '从一个工作簿拷贝到另一个工作簿



猜你喜欢

转载自blog.csdn.net/gordennizaicunzai/article/details/79439587