gpt4 book ai didi

vba - 在 Excel 中更改数据范围时出现类型不匹配错误

转载 作者:行者123 更新时间:2023-12-02 10:09:09 26 4
gpt4 key购买 nike

我编写了一个宏,如果输入为 TRUE,则将单元格着色为绿色;如果单元格的输入为 FALSE,则将单元格着色为红色。

    Private Sub Worksheet_Change(ByVal Target As Range)
If ActiveSheet.Name = "Ribs" Then
If Not Intersect(Target, Range("G2:K200")) Is Nothing Then
If Target = "False" Then
Sheets("Ribs").Range(Target.Address).Style = "Bad"
ElseIf IsNumeric(Target) Then
Sheets("Ribs").Range(Target.Address).Style = "Good"
End If
ElseIf Not Intersect(Target, Range("D2:D200")) Is Nothing Then
RotateRib (Target.Address)
End If
End If
End Sub

现在的问题是,如果我更改范围值(例如在单元格 G2 中键入 TRUE,然后将鼠标指针从 G2 的右下角拖动到 G10,应将值 TRUE 复制到范围 G2:G10)会引发 Type我的宏中出现不匹配错误

调试器表示有问题的行是 If Target = "False"then

是否有解决给定错误的方法?忽略错误可能会完成这项工作,但这不是我想要做的事情。

最佳答案

问题是您正在尝试执行非法操作。您要求编译器查看 G2:G10 的内容是否等于False - 您可以通过添加 Debug.Print Target.Address 来看到这一点到代码顶部,然后再进行一次尝试。

可以做你想做的事,但你需要更多代码。比较值时,您必须逐个单元格进行比较 - 您无法一次比较整个范围。这是一个基本示例:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
If ActiveSheet.Name = "Ribs" Then
For Each c In Target
If Not Intersect(c, Range("G2:K200")) Is Nothing Then
If c.Value = "False" Then
Sheets("Ribs").Range(c.Address).Style = "Bad"
ElseIf IsNumeric(c.Value) Then
Sheets("Ribs").Range(c.Address).Style = "Good"
End If
ElseIf Not Intersect(c, Range("D2:D200")) Is Nothing Then
RotateRib (c.Address)
End If
Next c
End If
End Sub

主要的变化是我们不再与 Target 进行比较,我们循环遍历 c 的所有单个单元格内容(Range 对象表示为 Target )并与这些进行比较。

同样,您可以通过尝试此代码并填写一些值来验证这是否有效:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
For Each c In Target
Debug.Print c.Address
Next c
End Sub

关于vba - 在 Excel 中更改数据范围时出现类型不匹配错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48058128/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com