2017-04-05 90 views
4

我使用,我在這裏看到了#2的功能:長文本的分割功能失敗,並顯示VALUE!錯誤

Function EXTRACTELEMENT(Txt, n, Separator) As String 
EXTRACTELEMENT = Split(Application.Trim(Txt), Separator)(n - 1) 
End Function 

有人劈裂數據數組,像這樣:

SRN LMDscandata SRA LMDscandata 1 F97BBF 0 0 6D2A 6D2D 71F5A0FA 71F5FD85 0 0 7 0 0 1388 168 0 1 DIST1 3F800000 00000000 D9490 1388 5 6E2 6DC 6E3 6E1 6ED 0 0 0 0 0 0

但是,當我試圖增加的數據量:

SRN LMDscandata SRA LMDscandata 1 1 F97BBF 0 0 FCDF FCE2 9DC90606 9DC9637B 0 0 7 0 0 1388 168 0 1 DIST1 3F800000 00000000 C3500 1388 3D 525 50B 518 508 51D 50A 51A 502 514 50F 502 51C 50E 51C 50E 4FF 509 505 50B 4F9 505 51B 513 516 501 50F 509 4FE 505 508 50C 507 50C 50E 51A 511 514 528 511 519 524 52E 526 522 524 535 534 52E 527 52F 52E 53D 52F 550 535 547 548 559 551 557 558 0 0 0 0 0 0

發生錯誤,VBA返回錯誤窗口,並且沒有數據被分割。我該如何解決它?

這是完整的代碼,我編寫它來測試傳感器輸出,在那裏我收到一些重要的數據在十六進制& ascii,然後轉換爲十進制並製作一些圖。這是轉換值的函數。 如果有人還可以給分的一些技巧,我將不勝感激。

Sub ler() 

Dim ncell 
Dim vArr, col 
Dim counter, elem_end As Integer 
Dim rng1, rng2 As String 

Set ascii = ThisWorkbook.Worksheets("ASCII") 
Set medidas = ThisWorkbook.Worksheets("Medidas") 
'Valor da última linha preenchida da coluna A' 
    ncell = ascii.Range("A65536").End(xlUp).Row 
    'Número de elementos' 
    elem_end = ascii.Range("B" & ncell).Value 

    For counter = 1 To elem_end 

    counterplus = counter + 2 
    vArr = Split(Cells(1, counterplus).Address(True, False), "$") 
Col_Letter = vArr(0) 
col = Col_Letter 
Let rng1 = col & ncell 
Let rng2 = "A" & ncell 
    ascii.Range(rng1).NumberFormat = "@" 
    ele = EXTRACTELEMENT(ascii.Range(rng2), counter, " ") 
    ascii.Range(rng1).FormulaR1C1 = ele 


    Next 


    With ascii.Range(Cells(ncell, 1), Cells(ncell, counterplus)) 
Set dist = .Find("DIST1", LookIn:=xlValues) 
    If Not dist Is Nothing Then 
     firstAddress = dist.Address 
     Do 
      dist1 = firstAddress 
      Set dist = .FindNext(dist) 
     Loop While Not dist Is Nothing And dist.Address <> firstAddress 
    End If 
End With 


    data_col = ascii.Range(dist1).Column + 5 
    data_num = ascii.Cells(ncell, data_col).Value 
    dec_num = CLng("&H" & data_num) 
    medidas.Range("A" & ncell).Value = dec_num 

    For counter2 = 1 To data_num 
    asc_value = ascii.Cells(ncell, data_col + counter2).Value 
    Dec = CLng("&H" & asc_value) 
    medidas.Cells(ncell, counter2 + 1).Value = Dec 

    Next 


End Sub 

B列中,有一個計算列A

+0

什麼是錯誤的窗口? –

+0

錯誤「13」,EXTRACTELEMENT功能突出顯示。 – danieltakeshi

回答

4

您需要聲明的變量,你得到一個類型不匹配,至少首先需要的數據元素的數的函數被宣佈。

Function EXTRACTELEMENT(Txt As String, n As Long, Separator As String) As String 
EXTRACTELEMENT = Split(Application.Trim(Txt), Separator)(n - 1) 
End Function 
+0

但爲什麼它適用於較小數量的數據?而當它變長時,程序就會中斷? – danieltakeshi

+2

我只能假設,當它變得很長,它試圖把變量爲一個範圍。因爲如果我將'Application.Trim(Txt)'切換到'Application.Trim(Txt.Value)',它也可以。 –

+2

一般來說,當你的arent聲明變量前面可能發生的任何數量的事情。當一個類型沒有被聲明時,必須假定一個類型。這些變量都以「Variant」輸入開始,但隨後在程序運行時得到一個類型。在運行時聲明變量類型以避免潛在問題始終是最佳做法。 –