范围类的删除方法失败 - 错误

时间:2017-07-05 18:18:57

标签: excel vba

我有这个代码来检索从数据库到excel电子表格的行:

Public Sub Button1_Click()

ActiveSheet.Unprotect  ' This will unprotect the whole sheet

Dim sQry As String
Dim iRows As Integer
Dim iCols As Integer
Dim SQL As String



On Error GoTo ErrHandler



'Clear worksheet
Call ClearExistingRows(4)

'Create ADODB Recordset for retrieved data
 Call DBConnection.OpenDBConnection

'Create Recordset
Dim rsMY_Resources As ADODB.Recordset
Set rsMY_Resources = New ADODB.Recordset

SQL = "SELECT EmpID, EName, [Grouping], CCNum, CCName, ResTypeNum, ResName, Status from Employee_FTE Order by Status"

'Query the database

rsMY_Resources.Open SQL, DBConnection.oConn, adOpenStatic, adLockReadOnly
If rsMY_Resources.EOF = True Then
    MsgBox ("No record found in database")
    Exit Sub
End If

'Fill excel active sheet, starting from row# 3
iRows = 3
For iCols = 0 To rsMY_Resources.Fields.Count - 1
    ActiveSheet.Cells(iRows, iCols + 1).Value = rsMY_Resources.Fields(iCols).Name
Next
ActiveSheet.Range(ActiveSheet.Cells(iRows, 1), ActiveSheet.Cells(iRows, rsMY_Resources.Fields.Count)).Font.Bold = True

iRows = iRows + 1
ActiveSheet.Range("A" + CStr(iRows)).CopyFromRecordset rsMY_Resources

iRows = rsMY_Resources.RecordCount

'Clean up
rsMY_Resources.Close:
Set rsMY_Resources = Nothing

Call DBConnection.CloseDBConnection


MsgBox (CStr(iRows) + " records have been retrieved from the database!")

Columns("B:H").Select
Selection.Locked = False
ActiveSheet.Protect

Exit Sub

ErrHandler:
MsgBox (Error)

End Sub


Public Sub ClearExistingRows(lRowStart As Long)
Dim lLastRow As Long
Dim iLastCol As Integer

If (Not (Cells.Find("*", Range("A1"), xlFormulas, , xlByRows, xlPrevious) Is Nothing)) Then
    lLastRow = Cells.Find("*", Range("A1"), xlFormulas, , xlByRows, xlPrevious).Row ' Find the last row with data

    If (lLastRow >= lRowStart) Then
        iLastCol = Cells.Find("*", Range("A1"), xlFormulas, , xlByColumns, xlPrevious).Column ' Find the last column with data
        Range(Cells(lRowStart, 1), Cells(lLastRow, iLastCol)).Select
        Selection.EntireRow.Delete
    End If
End If
End Sub

但是,当我编写此代码以锁定整行时,如果H列具有值“InActive”,那么我得到错误 - 删除方法或范围类失败。

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)


    For Each cell In Range("A4:H500")

    If cell.Value = "InActive" Then

    ActiveSheet.Unprotect

    cell.EntireRow.Locked = True

    ActiveSheet.Protect

    End If

    Next cell


    End Sub

请告诉我如何解决此错误。

谢谢, HEMA

0 个答案:

没有答案