Cell.Offset与VBA中ActiveCell.Offset的行为

时间:2017-06-01 15:21:45

标签: excel vba excel-vba

我有一个For循环&在VBA中的For Each循环中,我使用Offset在循环中的每个单元格的内容中搜索字符串:

使用For Each:

Lastrow = ActiveSheet.Range("A2").End(xlDown).Row
Set Myrange = ActiveSheet.Range("M2:M" & Lastrow)

countrows = Cells(Cells.Rows.Count, "A").End(xlUp).Row

For Each Cell In Myrange 
    If strPattern <> "" Then
    If Cell.Offset(0, 31) <> "Fizz" Then
        strInput = Cell.Value

使用For:

countrows = Cells(Cells.Rows.Count, "A").End(xlUp).Row

For i = 1 To countrows
    Range("AK" & i).Select
    check_value = ActiveCell
    If ActiveCell.Offset(0, 7) <> "Buzz" Then
        ActiveCell.EntireRow.Copy

在下面的示例中,我必须使用ActiveCell.Offset。使用Cell.Offset甚至Cell.Offset.Value会抛出“Object Required”错误。

为什么会这样?

2 个答案:

答案 0 :(得分:3)

在底部示例中,您尚未定义With是什么,因此VBA对您尝试执行的操作一无所知。 ActiveCell不是一个特殊的词 - 它是顶部示例中的变量

编写底层语句的更好方法是使用Select代替countrows = Cells(Cells.Rows.Count, "A").End(xlUp).Row For i = 1 To countrows With Range("AK" & i) check_value = .Value2 If .Offset(0, 7) <> "Buzz" Then .EntireRow.Copy End If End With Next i getParameterByName()

function getParameterByName( name ){
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return decodeURIComponent(results[1].replace(/\+/g, " "));
}

答案 1 :(得分:1)

在第一个循环中,Cell是一个Range对象 在第二个单元格中,Nothing,你必须为它分配一个Range对象,即:

Set Cell = Range("AK" & i)

顺便问一下,你宣布你的变量吗?