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