2012年1月25日 星期三

VBA-檢查是否有在在原本定義欄位之外的欄位輸入資料


Rem <summary>
Rem 檢查是否有在在原本定義欄位之外的欄位輸入資料
Rem <param name="tcSheetName">Sheet名稱</param>
Rem <param name="tnColumnCount">原先定義欄位數量</param>
Rem <returns>True:通過檢查,False:未通過檢查</returns>
Function checkExceedInput(tcSheetName As String, tnColumnCount) As Boolean

    '取得指定Sheet曾經己使用的區域
    Dim myRange As Range
    Set myRange = Worksheets(tcSheetName).UsedRange

    '取得指定Sheet曾經己使用的區域的最大欄位編號(絕對位置)
    Dim lnUsedColumnMaxNo As Integer
    lnUsedColumnMaxNo = myRange.Column + myRange.Columns.Count - 1
 
    '取得指定Sheet曾經己使用的區域的最大列數編號(絕對位置)
    Dim lnUsedRowMaxNo As Integer
    lnUsedRowMaxNo = myRange.Row + myRange.Rows.Count - 1
 
    '如果『曾經己使用的區域的最大欄位編號』>『原先定義欄位數量』
    '則檢查超過的欄位中是否有任何資料(都是不合法的!必須報警提示).
    Dim lnI As Integer
    Dim lnRowNo As Integer
    If lnUsedColumnMaxNo > tnColumnCount Then
 
        For lnI = (tnColumnCount + 1) To lnUsedColumnMaxNo
     
            lnRowNo = 0
            lnRowNo = Worksheets(tcSheetName).Cells(lnUsedRowMaxNo + 1, lnI).End(xlUp).Row
         
            If lnRowNo > 1 Then
         
                Worksheets(tcSheetName).Activate
                Worksheets(tcSheetName).Cells(myRange.Row + lnRowNo - 1, myRange.Column + lnI - 1).Select
                MsgBox "第" + CStr(lnRowNo) + "列,第" + CStr(lnI) + "行" + _
                "己超出資料填寫區域,請檢查修正(刪除)後再存檔!"
                checkExceedInput = False
                Exit Function
             
            End If
         
        Next lnI
     
    End If
 
    '通過檢查
    checkExceedInput = True

End Function