搜索VBA中变量定义的一系列列

时间:2015-02-16 18:05:38

标签: excel vba excel-vba

我正在尝试搜索不同工作表上的一系列列,其中范围由两个单独的变量定义。我已经成功地使用相同的代码来搜索我手动输入的一系列列,但使用变量会导致错误:

运行时错误'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

1 个答案:

答案 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