Excel VBA类型不匹配引用Cell.Value

时间:2015-09-04 11:16:09

标签: excel vba excel-vba

对不起,这几乎肯定是一个“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

如果删除这段代码,表格(“联系人”)。范围(“A1”)的分配都可以正常工作。

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

非常感谢您的任何帮助!

1 个答案:

答案 0 :(得分:5)

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