Несоответствие типов при использовании разделенного VBA - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть следующий код, и он дает мне ошибку Несоответствие типов для строки кода «Split_dt_2 = Split (Split_dt_1,", ")». Я не могу выполнить код с помощью F8, потому что он сразу выдаёт мне ошибку, поэтому я не могу дать точное значение «Split_dt_1», но это всегда дата, которая имеет такую ​​форму: [1.11.2009, 01.12.2009].

Моя цель - получить: y_Dest = 2019 и m_Des = 11

 Sub import_Redeem_Spread()    
    Workbooks.Open "C:\Users\106400\OneDrive\Documents\FTT\CDOPT_AB.xlsm"
    Dim wksSource As Worksheet, wksDest As Worksheet
    Set wksSource = Workbooks("CDOPT_AB.xlsm").Sheets(2)
    Set wksDest = ThisWorkbook.Sheets(2)



 Dim Split_dt_1() As String
    Dim Split_dt_2() As String
    Dim Split_dt_3() As String
    Dim Split_dt_4() As String


    nbRows = wksSource.Cells(Rows.Count, 1).End(xlUp).Row
    nbDates = wksDest.Cells(Rows.Count, 1).End(xlUp).Row

    For i = 2 To nbRows
        If wksSource.Cells(i, 16) = "CPG Taux Fixe" Then
            For m = 7 To nbDates
 Split_dt_1 = wksDest.Cells(m, 2)
        Split_dt_2 = Split(Split_dt_1, ",")
        Split_dt_3 = Split_dt_2(0)
        Split_dt_4 = Split(Split_dt_3, "[")
        y_Dest = Right(Split_dt_4(1), 4)
        m_Dest = Left(Split_dt_4(1), 2)
        y_source = Left(Cells(I, 3), 4)
        m_Source = Right(Cells(I, 3), 2)

                If y_Dest = m_Dest & y_Source = m_Source Then
                    For n = 4 To 15
                        wksDest.Cells(m, n) = wksSource.Cells(i, n)
                    Next n
                End If
            Next m
        End If
    Next i

    End Sub

Я пробовал «Dim Split_dt_2 () As Variant», но это не дает результатов решить проблему

и я попытался

Split_dt_1 = wksDest.Cells(m, 2).value
Split_dt_2 = Split(Split_dt_1, ",")

, и она все еще не работает

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 07 апреля 2020

Я бы отказался от назначения массивов и всех промежуточных шагов в целом:

y_Dest = Year(Split(Split(wksDest.Cells(m, 2), ",")(0), "[")(0))

Бывают случаи, когда эти промежуточные шаги помогают, но ИМО, это не один из них.

0 голосов
/ 07 апреля 2020

Используйте Variant при использовании Split для создания массива вместо Dim, используя его как массив String.

A Variant примет свойства Array когда используемая функция возвращает Array.

Dim Split_dt_1 As Variant
Split_dt_1 = Split(wksDest.Cells(m, 2), ",")
...