VBA运行计时器错误1004与.offSet()
我有一个包含属性的工作簿,每个属性都有相应的属性ID。 下面的代码旨在查找与从combobox中的列表中select的ID相对应的行,然后使用行中的数据填充表单中剩余的字段。
Private Sub propertyCodeCombo_change() Set wks = Application.Workbooks("Book1.xlsm").Worksheets("Property") Dim propertyCell As Range Set propertyCell = wks.Range("A2") Do Until propertyCell.Value = propertyCodeCombo.Value Set propertyCell = propertyCell.Offset(1, 0) <--Error Occurs here Loop addressText = propertyCell.Offset(0, 1).Value suburbText = propertyCell.Offset(0, 2).Value propertyTypeCombo = propertyCell.Offset(0, 3).Value bedroomsText = propertyCell.Offset(0, 4).Value bathroomsText = propertyCell.Offset(0, 5).Value weeklyRentalFeeText = propertyCell.Offset(0, 6).Value statusCombo = propertyCell.Offset(0, 7).Value commisionText = propertyCell.Offset(0, 8).Value ownerCodeCombo = propertyCell.Offset(0, 9).Value End Sub
我觉得奇怪,因为我有几乎相同的代码,如下所示,不会导致错误,并完美地运作。
Set wks = Application.Workbooks("Book1.xlsm").Worksheets("Property") Dim propertyCell As Range Set propertyCell = wks.Range("A2") Do Until IsEmpty(propertyCell) Set propertyCell = propertyCell.Offset(1, 0) Loop
您的代码因为没有find匹配而出现错误,所以您的“偏移量”命令最终会到达工作表的最后一行。 偏移一行会导致错误。
这就是为什么你的其他类似的代码工作 – 你应用一个不同的testing,所以你先退出循环。
使用此代码,您将获得更好的性能,因为它使用数组而不是偏移:
Private Sub propertyCodeCombo_change() Dim wks As Worksheet Set wks = ThisWorkbook.Worksheets("Property") Dim propertyCell As Range Set propertyCell = wks.Range("A2") Dim comboValue As Variant comboValue = propertyCodeCombo.Value Dim props As Variant props = wks.UsedRange.Value If IsArray(props) Then Dim propRow As Long For propRow = LBound(props) To UBound(props) If props(propRow, 1) = comboValue Then addressText = props(propRow, 2) suburbText = props(propRow, 3) propertyTypeCombo = props(propRow, 4) bedroomsText = props(propRow, 5) bathroomsText = props(propRow, 6) weeklyRentalFeeText = props(propRow, 7) statusCombo = props(propRow, 8) commisionText = props(propRow, 9) ownerCodeCombo = props(propRow, 10) Exit For End If Next propRow End If End Sub