VBA - range.sort脚本意外地运行它不应运行的其他脚本

时间:2015-03-18 10:21:36

标签: vba excel-vba excel

我正在制作一本工作簿而且我收到一个让我发疯的错误。我真的不知道这里出了什么问题。

在主工作表(Bestandsübersicht)上,我有一个名为ddBestand的组合框。在该组合框的更改事件中,它运行一个脚本,检查是否应启用或禁用某些按钮。代码是:

Private Sub ddBestand_Change()

    On Error GoTo ExitSub
    Dim i As Integer
    i = 3
    Dim WS As Worksheet
    Set WS = Sheets("Bestandsübersicht")

    If ddBestand.Value = "" Then GoTo ExitSub

    Do Until WS.Cells(i, 1).Value = ddBestand.Value
        i = i + 1
    Loop

    If WS.Cells(i, 13).Value = 0 Or _
    Right(Sheets("Bestandsübersicht").Range("AL1").Value, 3) <> "yes" Then
        btnNetwork.Enabled = False
    Else
        btnNetwork.Enabled = True
    End If

    btnChange.Enabled = True
    btnSpecifics.Enabled = True
    btnCopy.Enabled = True

    Exit Sub

ExitSub:
    btnChange.Enabled = False
    btnSpecifics.Enabled = False
    btnNetwork.Enabled = False
    btnCopy.Enabled = False

End Sub

当我使用ddBestand时,这完全正常。但有时当我运行其他脚本时,这个脚本意外地开始运行,即使这些脚本与彼此不相关。例如,当我为一个userform(从另一个工作表启动)运行初始化时,它开始在这个range.sort方法中运行:

Sheets("DB_Network").Columns("A:C").Sort key1:=Sheets("DB_Network").Range("A2"), _
    order1:=xlAscending, Header:=xlNo

它给出错误1004(无法设置OLEObject类的启用属性(这是logica,因为我们在另一个工作表上,这些按钮的属性是错误的。)因为我不知道如何停止第一个脚本运行,我通过将OLEObjects更改为:

来修复脚本
    Sheets("Bestandsübersicht").OLEObjects("btnChange").Object.Enabled = True

解决症状可能不是最漂亮的解决方案,但由于我无法找出问题到底是什么,我认为这是一个合适的解决方案。但它变得更疯狂了。我仍在使用本文档的另一个版本,因为我需要它来完成我的工作。不知怎的,相同的排序方法开始在另一个文档中运行相同的脚本,这导致发生相同的错误。现在我真的想解决这个问题,因为我不希望它意外地在其他文档中运行脚本。这里有谁可以提供帮助吗?非常感谢!

1 个答案:

答案 0 :(得分:1)

我猜你的组合框使用ListFillRange和/或LinkedCell属性直接链接到一个范围。出于这个原因,这不是一个好主意。我建议您使用代码来使用其.List属性来填充控件,这比.AddItem更容易,更快:

Sheets("Bestandsübersicht").OLEObjects("ddBestand").Object.List = Sheets("blah").Range("A2:A100").Value

例如。