属性声明不一致编译错误原因排查及代码问题咨询
属性声明不一致编译错误原因排查及代码问题咨询
嘿,我来帮你揪出这个编译错误的问题根源!
你遇到的「属性声明不一致」错误,核心原因是VBA对带额外参数的Property Let和Property Get有严格的匹配要求:当你的Property Let定义了除赋值目标参数之外的额外参数时,对应的Property Get必须包含完全相同的额外参数(参数名、类型都要一致)。
看你的代码:
Property Let CellEntered有两个参数:uNewValue As Boolean(这是赋值用的参数,Let方法里第一个参数固定是要赋的值),以及额外的uCaller As String- 但对应的
Property Get CellEntered却没有这个uCaller参数,这就违反了VBA的属性声明规则,编译器自然会报错。
修正后的代码示例
' 修正后的Property Get,添加对应的uCaller参数 Public Property Get CellEntered(ByVal uCaller As String) As Boolean CellEntered = m_bCellEntered End Property Public Property Let CellEntered(ByVal uNewValue As Boolean, ByVal uCaller As String) If uNewValue Then If InIDE() Then SetFormCaption frmMain, "enter caller: " & uCaller End If End If m_bCellEntered = uNewValue End Property
额外说明
如果你其实不需要在属性里传递uCaller这个参数——比如设置窗体标题的逻辑可以单独抽成一个独立的方法,而不是绑定在Property Let里——那也可以调整结构,把uCaller从Property Let里移除,这样Get和Let的参数就能统一(都只有和属性类型匹配的参数)。不过根据你当前的代码逻辑,保留uCaller并给Get补上参数是最直接的修复方式。
备注:内容来源于stack exchange,提问作者tmighty
相关产品推荐
相关产品推荐

