Excel VBA在单元格和范围函数中使用变量

时间:2017-03-08 14:16:24

标签: excel vba excel-vba

我想在整个使用过的细胞中找到“示例”这个词。但代码给了我运行时错误1004“应用程序定义或对象定义的错误”。我知道行Range(Cells(1, 1), Cells(lastrow, lastcolumn))有问题 它可能是什么?

提前致谢。 这是代码:

Dim lastrow as Long
Dim lastcolumn as Long
Dim sclnr as Range
dim aws as WorkSheet

Set aws = Thisworkbook.Sheets("Sheet1")

'Using UsedRange
lastrow = aws.UsedRange.Rows(aws.UsedRange.Rows.Count).Row
lastcolumn = aws.UsedRange.Columns(aws.UsedRange.Columns.Count).Column
'UsedRange works fine no problem with finding last row and column

Set sclnr = aws.Range(Cells(1, 1), Cells(lastrow, lastcolumn)).Find("Example") 
'the word Example exits in one of the cells

2 个答案:

答案 0 :(得分:3)

试试这个。如果在运行宏时aws不是活动工作表,则需要限定所有范围/单元格引用。

Dim lastrow as Long
Dim lastcolumn as Long
Dim sclnr as Range
dim aws as WorkSheet

Set aws = Thisworkbook.Sheets("Sheet1")

'Using UsedRange
lastrow = aws.UsedRange.Rows(aws.UsedRange.Rows.Count).Row
lastcolumn = aws.UsedRange.Columns(aws.UsedRange.Columns.Count).Column
'UsedRange works fine no problem with finding last row and column

Set sclnr = aws.Range(aws.Cells(1, 1), aws.Cells(lastrow, lastcolumn)).Find("Example") 

答案 1 :(得分:0)

Sub test_MertTheGreat()
Dim FirstAddress As String, LookForString As String
LookForString = "Example"

Dim LastRow As Long
Dim LastColumn As Long
Dim SclnR As Range
Dim awS As Worksheet

Set awS = ThisWorkbook.Sheets("Sheet1")

'Using UsedRange
With awS.UsedRange
LastRow = .Rows(.Rows.Count).Row
LastColumn = .Columns(.Columns.Count).Column
End With 'awS.UsedRange

Set SclnR = awS.Range(Cells(1, 1), Cells(LastRow, LastColumn)).Find("Example")
'the word Example exits in one of the cells

With awS.Range(awS.Cells(1, 1), awS.Cells(LastRow, LastColumn))
    .Cells(1, 1).Activate
    'First, define properly the Find method
    Set SclnR = .Find(What:=LookForString, _
                After:=ActiveCell, _
                LookIn:=xlValues, _
                LookAt:=xlWhole, _
                SearchOrder:=xlByColumns, _
                SearchDirection:=xlNext, _
                MatchCase:=False, _
                SearchFormat:=False)

    'If there is a result, keep looking with FindNext method
    If Not SclnR Is Nothing Then
        FirstAddress = SclnR.Address
        Do
            '''---+++--- Your actions here ---+++---
            Set SclnR = .FindNext(SclnR)
        'Look until you find again the first result
        Loop While Not SclnR Is Nothing And SclnR.Address <> FirstAddress
    End If
End With

End Sub