Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel Can';此时无法进入中断模式错误_Excel_Vba_Metaprogramming_Breakpoints_Vbe - Fatal编程技术网

Excel Can';此时无法进入中断模式错误

Excel Can';此时无法进入中断模式错误,excel,vba,metaprogramming,breakpoints,vbe,Excel,Vba,Metaprogramming,Breakpoints,Vbe,我试图在一个模块中完成以下操作: 在运行时替换另一个模块中的公用常量 调用使用更新的公共常量的过程 但是,它会抛出一个错误: 此时无法进入中断模式 尽管如此,它还是会更新公共常量 我试着按F5继续执行,但没用。有什么建议吗 Sub AB() Call LoadQuoteDetails2.Automation Application.VBE _ .ActiveVBProject _ .VBComponents _

我试图在一个模块中完成以下操作:

  • 在运行时替换另一个模块中的
    公用常量
  • 调用使用更新的公共常量的过程
  • 但是,它会抛出一个错误:

    此时无法进入中断模式

    尽管如此,它还是会更新公共常量

    我试着按F5继续执行,但没用。有什么建议吗

    Sub AB()
    
        Call LoadQuoteDetails2.Automation
    
        Application.VBE _
                   .ActiveVBProject _
                   .VBComponents _
                   .Item("mod00Admin") _
                   .CodeModule _
                   .ReplaceLine 2, "Public Const QuoteDB = ""A:\1.0 Projects\P0445 Ireland Commercial Raters\02 Analysis\05 Rate Assessor\ROI Fleet Rater\Quote Database\Quote DB June 18.accdb"""
    
        Call CalcTariffPrem
    
    End Sub
    

    如注释中所述,您需要使用全局变量或属性,而不是“常量”。您收到“此时无法进入中断模式”消息的原因是您正在修改当前正在运行的
    VBProject
    。基本上,您正在更改源代码,而已经编译的代码仍在执行。
    Const
    是“硬编码”到执行过程中的,因此在重新编译项目之前更改它不会起任何作用。事实上,VBA语言规范没有(为什么会?)的运行时语义。例如

    Public Const EXAMPLE = "Foo"
    
    Public Sub Test()
        Application.VBE.ActiveVBProject.VBComponents.Item("Module1").CodeModule.ReplaceLine 1, _
            "Public Const EXAMPLE = ""Bar"""
        Debug.Print EXAMPLE   '<-- prints Foo
    End Sub
    

    如何“更新”公共常量?使用此选项,我正在更改声明的公共常量应用程序.VBE.ActiveVBProject.VBComponents.Item(“mod00Admin”).CodeModule.ReplaceLine 2,“public Const QuoteDB=”“a:\1.0 Projects\P0445爱尔兰商业评级机构\02 Analysis\05利率评估机构\ROI车队评级机构\Quote数据库\Quote DB June 18.accdb”“”您试图使用程序修改程序运行时无法修改的行:如果您尝试在使用F8单步执行时手动执行此操作,则它会告诉您需要重置项目。我能看到的唯一方法是从另一个应用程序执行此操作-您可能可以从另一个数据库中的宏执行此操作,但我对此表示怀疑。总体而言,我建议,如果这是一个常规操作,那么您应该将数据存储在“设置”表中,并在运行时从该表中检索。首先,如果要更改该常量的值,则它不是常量。其次,可能是因为需要在Excel中设置一个选项而导致错误。确保签入Excel选项->受信任站点->受信任站点的设置->宏设置->检查对Visual Basic Edito的信任访问
    'Module1
    Public Const EXAMPLE = "Bar"
    
    Public Sub Test()
        With Application.VBE.ActiveVBProject.VBComponents.Item("Module1").CodeModule
            .DeleteLines 1, .CountOfLines
        End With
        Debug.Print "Where am I?"  '<-- this will still execute.
    End Sub
    
    'mod00Admin
    Private Const DEFAULT_DB As String = "C:\Foo\Bar.accdb"
    Private activeQuoteDB As String
    
    Public Property Let QuoteDB(rhs As String)
        activeQuoteDB = rhs
    End Property
    
    Public Property Get QuoteDB() As String
        If activeQuoteDB = vbNullString Then
            QuoteDB = DEFAULT_DB
        Else
            QuoteDB = activeQuoteDB
        End If
    End Property
    
    '...
    
    Public Sub AB()
        LoadQuoteDetails2.Automation
        mod00Admin.QuoteDB = "A:\1.0 Projects\P0445 Ireland Commercial Raters\02 Analysis\05 Rate Assessor\ROI Fleet Rater\Quote Database\Quote DB June 18.accdb"
        CalcTariffPrem
    End Sub