VBA不匹配错误13

时间:2014-10-14 20:11:48

标签: excel vba type-mismatch

我对VBA比较陌生,我写了一个Sub来解析单个单元格中包含的CSV信息,并将某些数据返回给电子表格中的其他单元格。它是一个相对简单的代码,但我找不到错误。这是一个错误的错误13 Moods = Application.Index(fullArray, 0, 3)任何帮助将不胜感激。

Private Sub parseCSV()
'Parse "Notes" column and return Moods/Keywords to their apropriate cells

    Dim CSV As String
    Dim fullArray As Variant
    Dim lRow As Long
    Dim Keywords As Variant
    Dim Moods As Variant
    Dim i As Long

    lRow = ActiveSheet().Range("BL" & ActiveSheet().Rows.Count).End(xlUp).Row

    For i = 3 To lRow

        CSV = ActiveSheet.Range("BL" & i)            
        fullArray = Split(CSV, Chr(10))
        Moods = Application.Index(fullArray, 0, 3)
        Keywords = Application.Index(fullArray, 0, 2)

        ActiveSheet.Range("CD" & i).Value = Moods
        ActiveSheet.Range("CE" & i).Value = Keywords

    Next i

End Sub 

我测试了下面的解析函数:

Private Sub parseCSVTest()
'Parse "Notes" column and return Moods/Keywords to their apropriate cells

    Dim CSV As String
    CSV = ActiveSheet.Range("BL5")

    Dim fullArray As Variant
    fullArray = Split(CSV, Chr(10))

    Dim Moods As Variant
    Moods = Application.Index(fullArray, 0, 3)

    Dim Keywords As Variant
    Keywords = Application.Index(fullArray, 0, 2)

    ActiveSheet.Range("CD5").Value = Moods
    ActiveSheet.Range("CE5").Value = Keywords

End Sub

工作得很好。所以我测试了我的循环。

Private Sub loopTest()

    Dim i As Long
    Dim lRow As Long
    lRow = ActiveSheet().Range("BL" & ActiveSheet().Rows.Count).End(xlUp).Row


    For i = 3 To lRow
        ActiveSheet.Range("CD" & i).Value = "testing"
    Next i

End Sub

工作正常。我不知道从哪里开始。

2 个答案:

答案 0 :(得分:1)

在为其指定值之前,您正在使用 CSV

答案 1 :(得分:0)

我知道了。感谢所有人的帮助,这是一个大脑破坏者。出于某种原因

Moods = Application.Index(fullArray, 0, 3)
Keywords = Application.Index(fullArray, 0, 2)
指定整列时,

不会返回值((0,0)= VBA数组中列中的所有行)。我只是将数组引用更改为(1,3)和(1,2)。完整的工作代码如下。这是我在网上发现的最简单的方法,用于解析单元格中的数据并对数组进行切片。感谢所有帮助过这一点的人。

Private Sub parseCSV()
'Parse "Notes" column and return Moods/Keywords to their apropriate cells

    Dim CSV As String
    Dim fullArray As Variant
    Dim lRow As Long
    Dim Keywords As Variant
    Dim Moods As Variant
    Dim i As Long

    lRow = ActiveSheet().Range("BL" & ActiveSheet().Rows.Count).End(xlUp).Row

    For i = 3 To lRow

        CSV = ActiveSheet.Range("BL" & i)
        fullArray = Split(CSV, Chr(10))
        Moods = Application.Index(fullArray, 1, 2)
        Keywords = Application.Index(fullArray, 1, 3)

        ActiveSheet.Range("CE" & i).Value = Moods
        ActiveSheet.Range("CD" & i).Value = Keywords

    Next i


End Sub