excel - Excel VBA Target.Address 被修改并导致错误 13 类型不匹配
问题描述
原型帖子:VBA 新手,在阅读了多个帖子/网站后无法解决问题,现在转向这里所有出色的人,他们的帖子让我走到了这一步。
我在 C 列中有一个带有数据验证的工作表(列表;强制选择是/否选项)。如果用户在 C7 中选择“否”,则 C9:C11 需要自动立即填充为“否”。我已经通过以下方式使它起作用:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$7" And Target.Value = "No" Then
Range("$C$9").Value = "No"
Range("$C$10").Value = "No"
Range("$C$11").Value = "No"
End If
End Sub
我在同一个工作表(即 Sheet5)上还有一个文本框,单击该文本框会触发一个清除 C6:C7 内容的宏。此重置宏位于 General 下的模块中。
Sub C_B_Reset()
Sheet5.Range("C6:C7").ClearContents
End Sub
单独来说,这些都可以正常工作,但是当两者都存在时,它会在触发 Reset 宏后导致 Target.Address 出现 Type 13 错误。触发 Reset 宏后,“If Target.Address”部分解析为 Reset 宏中引用的范围(即 C6:C7)。因为“If Target.Address”需要一个单一的、绝对的单元格引用(例如,$C$7),所以它会抛出不匹配代码,因为当鼠标悬停在它上面时它会解析为 (C6:C7)。
即使完全删除了 Reset 宏,如果在 Target.Address 代码中使用以下内容,也会出现同样的问题:
Range("$C$9:$C$11").Value = "No"
Target.Address 然后解析为 "$C$9:$C$11" 并抛出 Type 13 mismatch 错误。
看来,如果“范围”用于引用任何其他宏中的单元格范围,它会自动分配为 Target.Address。但是,如果 Range 仅引用单个单元格,则不会发生这种情况(这就是 Worksheet_Change 代码中 C9 到 C11 有单独行的原因)。
我确定我使用了不正确的术语,但我希望我解释得足够好,因为我肯定会感谢一些帮助。
谢谢参观,
解决方案
“Excel VBA Target.Address 被修改并导致错误 13 类型不匹配”
Target.Address
不是这里的问题...Target
是已更改的单元格,当您同时清除和时Target.Address
也会如此。$C$6:$C$7
C6
C7
主要问题是这样的:
... And Target.Value = "No" ...
当是一个多单元格范围时,这将失败并出现Type Mismatch
错误,因为 then是一个二维数组,您无法与.Target
Target.Value
Variant
"No"
此外,通常的方法是使用Intersect
而不是考虑Target.Address
.
如果你只关心C7
,那么也许这样写:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("C7")) Is Nothing Then
If Me.Range("C7").Value = "No" Then
On Error GoTo SafeExit
Application.EnableEvents = False ' Avoid re-triggering the event
Me.Range("C9:C11").Value = "No"
End If
End If
SafeExit:
Application.EnableEvents = True
End Sub
推荐阅读
- swift - Swift 5 尝试呈现视图不在窗口层次结构中的 ViewController
- node.js - SequelizeEagerLoadingError:模型未关联到 otherModel
- javascript - 关闭按钮上的 javascript 问题 | 我该如何解决?
- windows - 编译 Lua Rock vs Windows App 的 Lua.dll
- python - Python 字典 - 请求
- oauth-2.0 - 使用 IdentityServer4 和 ASP.NET Core 身份时是否应该在令牌中注入权限和角色
- flock - 编译flock struct C++时出现错误消息
- amazon-s3 - 当 Amazon S3 删除正在进行并且上传尝试覆盖同一存储桶中的同一对象时会发生什么
- android - Android studio Timer end 停止时闹钟声音播放问题
- html - 悬停效果在移动浏览器中不起作用