我正在尝试在一个模块中执行以下操作:
Public Const
在另一个模块中,在运行时。 但是,它会引发错误:
Can't enter break mode at this time
虽然,它确实更新了公共(public)常量。
我尝试按 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 语言规范对于 Const Declarations 没有运行时语义。 (为什么会这样?)。例如...
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 中的代码不再匹配在调试器上下文中执行的代码。考虑以下代码:
'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
如果您使用 F8 逐步执行此操作,那么在您删除所有代码后调试器应该突出显示哪一行?
所以,X to your Y就是根本不尝试运行自我修改代码。需要更改的字符串不是常量 - 它是变量。我的建议是让它成为一个属性,给它一个默认值,并根据需要在运行时设置它:
'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
关于excel - 此时无法进入中断模式错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52404306/