VBA数据validation在VBE中工作,但不在“停用”事件中

我的目标是有一个下拉,所以员工不会input细节的错误。 这是通过使用excel的数据validationfunction。

当我在VBE( F5键)中运行这个脚本时,脚本没有问题。

但是,当我把它放在工作表的Deactivate事件,它在一个点上的错误。

该行发生错误:

 Worksheets("Input").Range("C" & i7).Select 

在这个代码块中:

 Dim Total_rows_Dash7 As Long Dim Total_rows_Active7 As Long Dim Total_rows_Input7 As Long Dim i7 As Long Dim j7 As Long Dim m7 As Long Total_rows_Dash7 = Workbooks("Hourly Production Monitoring.xlsm").Worksheets("Dashboard").Range("B" & Rows.count).End(xlUp).Row For i7 = 2 To Total_rows_Dash7 m7 = 0 Total_rows_Active7 = Workbooks("Hourly Production Monitoring.xlsm").Worksheets("Active Jobs").Range("A" & Rows.count).End(xlUp).Row For j7 = 2 To Total_rows_Active7 If Worksheets("Dashboard").Cells(i7, 2) = Worksheets("Active Jobs").Cells(j7, 1) Then m7 = 1 End If Next j7 If m7 = 0 Then Worksheets("Active Jobs").Cells(Total_rows_Active7 + 1, 1) = Worksheets("Dashboard").Cells(i7, 2) End If Next i7 Total_rows_Active7 = Workbooks("Hourly Production Monitoring.xlsm").Worksheets("Active Jobs").Range("A" & Rows.count).End(xlUp).Row Total_rows_Input7 = Workbooks("Hourly Production Monitoring.xlsm").Worksheets("Input").Range("A" & Rows.count).End(xlUp).Row For i7 = 2 To Total_rows_Input7 Worksheets("Input").Range("C" & i7).Select '<-- error occurs here With Selection.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="='Active Jobs'!$A$2:$A$" & Total_rows_Active7 & "" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .ShowInput = True .ShowError = True End With Next i7 

错误如下所示:

运行时错误“1004”:范围类的select方法失败

在这里输入图像描述

按照我在评论中提出的build议,你可以试试这个…

 For i7 = 2 To Total_rows_Input7 With Worksheets("Input").Range("C" & i7).Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="='Active Jobs'!$A$2:$A$" & Total_rows_Active7 & "" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .ShowInput = True .ShowError = True End With Next i7