2014-06-27 170 views
1

我找不到任何要求VBA的小区选择完全是我找的...基于价值

我使用两个条件来设置我的选择(查找值“减速”,然后在细胞直接在它下面,找到“”(一个空单元格)。

我很难找到一种方法来选择符合这些条件的单元格,然后列出单元格地址(我想在消息框中显示单元格地址,提醒他们'错误'的位置)

最终会有更多的细胞需要寻找,这就是为什么我要通过多个细胞进行搜索的原因。

所以,总之,我希望我的代码,找了两个标准,选择单元格的标准匹配,并显示一个弹出消息,指出错误是在哪个小区。

Private Sub Worksheet_Change(ByVal Target As Range) 
If ActiveSheet.Range("J11").Value < 0 Then 
    MsgBox "You have exceeded the maximum allowable pipe length for this section. Please review your selection before continuing. ", vbOKOnly, "Inoperable Pipe Length" 
End If 

Do While ActiveSheet.Range("J17,J7").Value = "Reducer" 
    If ActiveSheet.Range("J18,J8").Value = "" Then 
     G = Sheets("Pipe Calcs").Range("J18,J8").Address 
     MsgBox "Please Select a reducer size in cell " & G & ActiveCell.Address(False, False), vbCritical, "No Reducer Size Selected" 
     Exit Sub 
    Else 
     End 
    End If 
Loop 
End Sub 

回答

1
Private Sub Worksheet_Change(ByVal Target As Range) 
If ActiveSheet.Range("A1").Value < 0 Then 
    MsgBox "You have exceeded the maximum allowable pipe length for this section. Please review your selection before continuing. ", vbOKOnly, "Inoperable Pipe Length" 
End If 

For Each cell In Range("J1:J1000") 
    If cell.Value = "Reducer" Then 
     If Range(cell.Address).Offset(1, 0) = "" Then 
     G = Sheets("Pipe Calcs").Range(cell.Address).Offset(1, 0).Address 
     MsgBox "Please Select a reducer size in cell " & G 
     Range(Cell.Address).Offset(1, 0).Select 
     Exit Sub 
     End If 
    End If 
Next 


End Sub 

上面的代码会检查第J列的“Reducer”,如果找到,它会看到下面的单元格是否包含一个值,如果没有,它会提示用户输入单元格并退出子单元。当用户更新单元格时,它们会触发Worksheet_Change语句并使宏再次运行。

+0

这样做的伎俩,非常感谢。我想我正试图与我检查过的细胞过于精确。出于某种原因,我永远无法获得单元格地址以便在我的代码中出现。 无论如何,非常感谢! – Keegan

+0

@Keegan你永远无法让'.address'与你的范围一起工作的原因是因为你的范围在多个单元格中是固定的。 '.address'需要一个单元来查看返回地址。使用上面的代码,因为您一次循环遍历1个单元格,所以'cell.address'总是只引用一个单元格,而不是'范围(J18,J8)',它同时查看2个单元格。 – SilverShotBee

+0

你非常感谢你的帮助。这使现在更有意义。 – Keegan