2013-04-03 37 views
0

我在Excel中做了一个VB makro来执行一些东西,如果单元格在给定的范围内,但是当我执行它时,它会给我一个错误,我不明白为什么。VB如果单元格在范围内Excel

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim isect As Boolean 
isect = Application.Intersect(Selection, Range("D11:D35")) 
If isect Then 
    If ActiveCell.Offset(-1, 0) - ActiveCell.Offset(-1, 1) > 2.5 Then 
     Range("A1:A1").Value = "ok" 
    End If 
End If 
End Sub 

的错误是:

Object variable or With block variable not set. 
+1

'如果不是没有那么'你也应该说明'Target'不总是一个单元:它可以是一个多单元的范围...... – 2013-04-03 21:36:12

+0

你正在得到这个问题,因为你的代码试图进入一个循环,因为'Range(“A1:A1”)。Value =“ok”'。我会建议看到这个http://stackoverflow.com/questions/13860894/ms-excel-crashes-when-vba-code-runs/13861640#13861640也改变选择'目标'编辑:此外蒂姆有一个有效点'目标不总是一个单元格所以你将不得不考虑这一点以及.. – 2013-04-03 21:41:14

+0

@TimWilliams感谢队友'如果不是isect是没有那么'它的作品像一个魅力我怎么能接受你的答案? – pocpoc47 2013-04-03 21:45:31

回答

0

更改前3行到:

Dim isect As Range 
Set isect = Application.Intersect(Selection, Range("D11:D35")) 
If Not isect Is Nothing Then 

但@Siddharth有关循环,这是非常重要的在这里检查还发表评论。

+0

该死的你是对的我还可以使用什么比WorkSheet_Change? – pocpoc47 2013-04-03 21:55:38

+0

只是指[思想](http://stackoverflow.com/a/13861640/2143262)通过@Siddharth – 2013-04-03 21:58:34

+0

谢谢伟大的工作:) – pocpoc47 2013-04-03 22:11:17

0

的另一种方法,而无需使用Boolean Variable/Selection(也包含蒂姆的建议为好)......

Private Sub Worksheet_Change(ByVal Target As Range) 
    On Error GoTo Whoa 

    Application.EnableEvents = False 

    If Target.Cells.CountLarge > 1 Then 
     MsgBox "More than 1 cell ws changed" 
    Else 
     If Not Intersect(Target, Range("D11:D35")) Is Nothing Then 
      If Target.Offset(-1, 0).Value - Target.Offset(-1, 1).Value > 2.5 Then 
       Range("A1").Value = "ok" 
      End If 
     End If 
    End If 

Letscontinue: 
    Application.EnableEvents = True 
    Exit Sub 
Whoa: 
    MsgBox Err.Description 
    Resume Letscontinue 
End Sub 

注:为什么.CountLarge?请参阅this

+0

谢谢你完美 – pocpoc47 2013-04-04 08:01:49

相关问题