【问题标题】:VBA Excel Fails to run because of Compile Error: Type Mismatch由于编译错误,VBA Excel 无法运行:类型不匹配
【发布时间】:2019-01-14 20:44:02
【问题描述】:

当我运行 VBA 代码时,它给了我一个“编译错误:类型不匹配”的错误。它不会像以前那样给出错误代码。

它被用来处理这些数据。左边的数据是我针对第 J 行中的值运行并在第 M 行中分配 ID 的表

[Excel 图像][1]
Sub Cat()
    Dim i As String
    Dim x As String

    For i = 1 To 113
        For x = 1 To 13
            If Sheet1.Cells("B", i).Value = Sheet1.Cells("J", x) Then
                Sheet1.Cells("A", i).Value = Sheet1.Cells("M", x)
            End If
        Next
    Next
End Sub

我希望根据 for 循环将 A 行的 ID 插入到 B 和 M 相等的位置

【问题讨论】:

  • For i = 1 To 113: 如果你打算使用i 作为数字,不要将dim 它作为string。请改用Dim i as long。与x 相同

标签: excel vba


【解决方案1】:

多种类型不匹配

记住:你可以使用例如Cells(i, "B")Range("B" & i) 用于单单元格范围。

代码

Option Explicit

Sub Cat()
    Dim i As Long
    Dim x As Long

    For i = 1 To 113
        For x = 1 To 13
            If Sheet1.Cells(i, "B").Value = Sheet1.Cells(x, "J") Then
                Sheet1.Cells(i, "A").Value = Sheet1.Cells(x, "M")
            End If
        Next
    Next
End Sub

【讨论】:

  • Range("B" & i) 客观上比使用列的字符串参数参数化 Cells 更好。请记住Cells 没有参数,它只是返回一个Range 对象;通过默认成员调用,参数与隐藏的Item 属性相反。相当迂回的海事组织。
  • 只是强调使用 Option Explicit...在计数循环中使用的字符串变量会立即被编译标记。
【解决方案2】:

除了明显的i As String 被非法用作循环计数的整数值(应声明为As Long)之外,您正在反转隐式Range.[_Default] 成员调用的RowIndexColumnIndex 参数:

Sheet1.Cells("B", i).Value

"B" 不是有效的 RowIndex 值。

经验法则,当你有一个列的字符串时避免Range.Cells;当您有一行 index 和一列 index 时使用它,即行和列的数值。

当您有诸如"B" 之类的列标题字符串时,请使用Range 属性并连接单元格地址,例如Sheet1.Range("B" & i).

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    • 2017-04-12
    相关资源
    最近更新 更多