我遇到了一个绊脚石。
我想知道如何构建错误处理程序以防止运行时错误。我不小心在命名单元格ProductNumber
中输入了非数字,并进行了调试
这是工作表更改代码
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
这些是我用于每个单元格的宏
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
最佳答案
代替错误处理程序,对您的代码进行一些验证。您可以检查:
IsNumeric
Select Case...
逻辑我快速重新编写了您的代码。
Worksheet_Change
中,您可以将Range
传递给子例程,以防止需要重新定义它。 Variant
,这意味着它可以接受任何数据类型。然后,您可以使用IsNumeric
来检查输入是否为数字,并使用CLng
来获取Select Case...
逻辑的整数。 工作表_更改
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
关于excel - Worksheet_Change事件中的VBA错误处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43997602/