我正在尝试搜索不同工作表上的一系列列,其中范围由两个单独的变量定义。我已经成功地使用相同的代码来搜索我手动输入的一系列列,但使用变量会导致错误:
运行时错误'1004': 应用程序定义或对象定义的错误
我使用代码在单独的工作表中搜索当月第一个实例的列号,然后搜索以特定日期的列号开头的范围。
我正在搜索的工作表示例:
http://i.imgur.com/ljmmGGi.png
以下是代码。具体来说,MonthFind函数已经完美地工作,但后续的DayFind函数使用了MonthFind的输出。
Private Sub ComboBox21_Change()
Dim i As String
Dim j As String
i = "February"
j = 9
Dim MonthFind As Variant
With Sheets("Project Schedule").Range("A1:ZZ1")
Set MonthFind = .Find(i, LookAt:=xlWhole, MatchCase:=False)
End With
Dim Month1 As Integer
Dim Month2 As Integer
Month1 = MonthFind.Column
Month2 = MonthFind.Column + 12
Dim DayFind As Variant
With Sheets("Project Schedule").Range(Columns(Month1), Columns(Month2))
Set DayFind = .Find(j, LookAt:=xlWhole, MatchCase:=False)
End With
End Sub
任何帮助都会非常感激,我一直在尝试这么多不同版本的代码无济于事!
编辑 - 链接到Excel文件:https://www.dropbox.com/s/275fo0uucfeum3y/Project%20Scheduling%20SO.xlsm?dl=0
答案 0 :(得分:0)
我几乎放弃了这一点,但我发现了问题所在。
您的ComboBox_21
对象在输入表上有一个输入范围(将使用可选值填充组合框),该输入表使用一组引用项目计划表的公式。每当您对组合框所依赖的项目进度表中的范围执行所有复制/粘贴功能时,您实际上都在更改下拉框的数据,从而导致_Change()
事件在每次粘贴时触发影响那个区域。
这并不总是一个问题(虽然在我看来,它导致了大量不必要的代码执行),但是这些代码导致了AddJob1_Click()
事件中的问题:
Range(Sheet1.Cells(erow, 5), Sheet1.Cells(erow + 3, 10000)).ClearContents
当组合框所依赖的单元格内容发生变化时,显然不允许执行Range.Find()
方法。
这里有一些关于这方面的信息,虽然它不是非常有用: https://msdn.microsoft.com/en-us/library/office/aa221581(v=office.11).aspx
这就是为什么,现在如何解决它:
推迟自动计算,直到您的UserForm代码完成,无论需要做什么。
这将确保您可以进行查找和参考。
Private Sub AddJob1_Click()
' turn off automatic calculation
Application.Calculation = xlCalculationManual
erow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
' ... other stuff
' turn calculation back on and perform a calculate, which will fire off the ComboBox21_Change() event
Application.Calculation = xlCalculationAutomatic
Application.Calculate
Unload Me
End Sub