I have hit a bit of a stumbling block.
I would like to know how i would build an error handler to prevent a run time error. I accidentally typed in a non numerical number into the named cell ProductNumber
and got a debug
This is the worksheet change code
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Target.Worksheet.Range("People_working_on_Campaign")) Is Nothing Then
Toggle_Rows
Else
End If
If Not Intersect(Target, Target.Worksheet.Range("ProductNumber")) Is Nothing Then
Toggle_Rows2
Else
End If
End Sub
These are the macros i am using for each cell
Sub Toggle_Rows()
Dim Sheet As Worksheet: Set Sheet = ThisWorkbook.Worksheets("ROI Calculator")
Dim val As Integer
val = Sheets("ROI Calculator").Range("People_working_on_Campaign").Value
Select Case Sheet.Range("People_working_on_Campaign").Value2
Case 1 To 10
Sheet.Rows("45:59").Hidden = True
Sheet.Rows(45).Resize(Sheet.Range("People_working_on_Campaign").Value2).Hidden = False
End Select
End Sub
Sub Toggle_Rows2()
Dim Sheet As Worksheet: Set Sheet = ThisWorkbook.Worksheets("ROI Calculator")
Dim val As Integer
val = Sheets("ROI Calculator").Range("ProductNumber").Value
Select Case Sheet.Range("ProductNumber").Value2
Case 1 To 9
Sheet.Rows("4:12").Hidden = True
Sheet.Rows(4).Resize(Sheet.Range("ProductNumber").Value2).Hidden = False
End Select
End Sub
答案 0 :(得分:1)
而不是错误处理程序为您的代码引入一些验证。你可以查看:
IsNumeric
Select Case...
逻辑我快速重写了你的代码。
在Worksheet_Change
中,您可以将Range
传递给子例程,以防止需要重新定义它。
在子例程中,将单元格值的变量定义为Variant
,这意味着它可以接受任何数据类型。然后,您可以使用IsNumeric
将输入检查为数字,并使用CLng
获取Select Case...
逻辑的整数。
<强> Worksheet_Change 强>
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ws As Worksheet
' set a reference to worksheet of Target and use it below
Set ws = Target.Worksheet
If Not Intersect(Target, ws.Range("People_working_on_Campaign")) Is Nothing Then
Toggle_Rows Target
End If
If Not Intersect(Target, ws.Range("ProductNumber")) Is Nothing Then
Toggle_Rows2 Target
End If
End Sub
子例程
Option Explicit
' rng is going to be People_working_on_Campaign
Sub Toggle_Rows(rng As Range)
Dim var As Variant
' get value of range
var = rng.Value
' test if range is numeric
If IsNumeric(var) Then
' test range value - CLng will convert to Long which is preferred to Integer
Select Case CLng(var)
Case 1 To 10
rng.Worksheet.Rows("45:59").Hidden = True
rng.Worksheet.Rows(45).Resize(rng.Value2).Hidden = False
Case Else
' do something else ?
End Select
Else
MsgBox "You should enter an integer to People_working_on_Campaign"
End If
End Sub
' rng will be ProductNumber
Sub Toggle_Rows2(rng As Range)
Dim var As Variant
' get value of range
var = rng.Value
' test if range is numeric
If IsNumeric(var) Then
' test range value - CLng will convert to Long which is preferred to Integer
Select Case CLng(var)
Case 1 To 9
rng.Worksheet.Rows("4:12").Hidden = True
rng.Worksheet.Rows(4).Resize(rng.Value2).Hidden = False
Case Else
' do something else ?
End Select
Else
MsgBox "You should enter an integer to ProductNumber"
End If
End Sub