【问题标题】:Excel VBA Type Mismatch referencing Cell.ValueExcel VBA 类型不匹配引用 Cell.Value
【发布时间】:2017-10-25 08:08:49
【问题描述】:

您好,抱歉,这几乎肯定会是一个“doh”时刻,但我已经很久没有编码了,我有点生疏了。

我有一个单元格值,当我尝试将其视为字符串时,我不断收到类型不匹配,但 CStr 和对 IsNull 等的测试似乎没有帮助。感谢您的建议。

Set ClientTable = SourceBook.Sheets("Source Data").Range("extdata")
For Each rng1 In ClientTable.Columns(1).Cells
    'if not first row (header row) and the customer name is matching the selected customer
    If (i <> 0) And (rng1.Value = SourceBook.Sheets("Source Data").Range("C1")) Then
        If Not IsNull(ClientTable.Columns(6).Cells.Offset(i, 0).Value) Then
            MsgBox ClientTable.Columns(6).Cells.Offset(i, 0).Value ' type mismatch here
        End If
        With Sheets("Contacts").Range("A1")
            .Offset(rowToWriteTo, 0).Value = ClientTable.Columns(6).Cells.Offset(i, 0).Value ' first name
            .Offset(rowToWriteTo, 1).Value = ClientTable.Columns(2).Cells.Offset(i, 0).Value ' last name
            .Offset(rowToWriteTo, 5).Value = ClientTable.Columns(3).Cells.Offset(i, 0).Value ' email
            .Offset(rowToWriteTo, 6).Value = ClientTable.Columns(4).Cells.Offset(i, 0).Value ' DDI
            .Offset(rowToWriteTo, 7).Value = ClientTable.Columns(7).Cells.Offset(i, 0).Value ' mobile
            .Offset(rowToWriteTo, 8).Value = ClientTable.Columns(5).Cells.Offset(i, 0).Value ' title
        End With
        rowToWriteTo = rowToWriteTo + 1

    End If
    i = i + 1
Next

如果我删除这段代码,Sheets("Contacts").Range("A1") 分配一切正常。

PS:使用 MsgBox 只是为了调试。尝试将 ClientTable.Columns(6).Cells.Offset(i, 0).Value 分配给字符串变量会产生相同的错误。

非常感谢您的任何帮助!

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    表达式ClientTable.Columns(6).Cells.Offset(i, 0).Value 生成一个值数组,因为Columns(6) 是一个包含多个单元格的Range 对象。您不能将此数组分配给字符串。也许您应该改用ClientTable.Cells(i, 6).Value。所以你得到一个值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-28
      • 1970-01-01
      相关资源
      最近更新 更多