我的程序:我有一个程序可以导入数据并将其拆分到同一工作簿中的不同工作表中。一旦数据被分割,目的是让最终用户能够进入这些表并更新数据。如果用户更新数据,则该特定单元格将更改颜色。因此,我专门为这些工作表创建了一个代码,以便在最终用户输入数据时自动更新。
我的问题:拆分宏可以完全独立工作,特定的表单代码可以完美地运行。但是,当我一起运行整个程序时 - vba会输入一个类型不匹配的错误。
这是特定的表格代码
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Target.Select
Range("E" & ActiveCell.Row).Select
ActiveCell.Interior.ColorIndex = 24
If Target.Value < 2000000 Then 'ERROR OCCURS HERE WHEN I CLICK MY SPLIT BUTTON
If Target.Column = 16 Then
Range("R" & Target.Row) = "Low"
End If
End If
If Target.Value >= 2000000 And Target.Value < 10000000 Then
If Target.Column = 16 Then
Range("R" & Target.Row) = "Medium"
End If
End If
If Target.Value >= 10000000 Then
If Target.Column = 16 Then
Range("R" & Target.Row) = "High"
End If
End If
If Target.Value < 600000 Then
If Target.Column = 17 Then
Range("R" & Target.Row) = "Low"
End If
End If
If Target.Value >= 600000 And Target.Value < 3000000 Then
If Target.Column = 17 Then
Range("R" & Target.Row) = "Medium"
End If
End If
If Target.Value >= 3000000 Then
If Target.Column = 17 Then
Range("R" & Target.Row) = "High"
End If
End If
Application.EnableEvents = True
End Sub
答案 0 :(得分:0)
良好的编程习惯表明:如果某段代码重新至少重复两次,请将其移至单独的过程/函数中。
使用Excel VBA,除非必要,否则不要使用选择语句。
改进的程序可能如下:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Range("E" & Target.Row).Interior.ColorIndex = 24
Range("R" & Target.Row) = GetStatus(Target.Value)
Application.EnableEvents = True
End Sub
Function GetStatus(ByVal curVal As Integer, ByVal iCol As Integer) As String
Dim sRetVal As String
Select Case iCol
Case 16
Select Case curVal
Case Is < 2000000
sRetVal = "Low"
Case 2000000 To 10000000
sRetVal = "Medium"
Case Is >= 10000000
sRetVal = "High"
End Select
Case 17
Select Case curVal
Case Is < 600000
sRetVal = "Low"
Case 600000 To 299999.9999
sRetVal = "Medium"
Case Is >= 3000000
sRetVal = "High"
End Select
End Select
End Function
但是,为什么要强行打开门?使用conditional formatting。
干杯,
马切伊