2016-12-13 81 views
1

我公開承認我對vba一竅不通。VBA切斷字符串?

我正在爲一個項目及其用VBA編寫的遺留工具工作。有一個錯誤我正在努力,我已經縮小了這個問題,但無法弄清楚爲什麼我的字符串顯然被截斷?

strXPlusLast4 = "xxxxxxxxxxxx" & strDCLast4 
    For Each varItem In objIE.Document.getElementsByTagName("tr") 
     If InStr(varItem.innerhtml, strXPlusLast4) Then 
      strDCStatus = Replace(Split(Split(varItem.innerhtml, "<TD>")(3), "</TD>")(0), "&nbsp;", "") 

使用IE對象導航到頁面時,它正在瀏覽所有的tr。在它發現的tr的內部,它正在查看是否存在字符串。

如果發現這個字符串,它會進入IF statement這是我卡住的地方。

一旦在這裏,我檢查varitem.innerHTML的值,它正在截取大約250個字符,正好在實際行數據的中間。

我想只是看看是否有任何限制爲什麼innerHTML值不完整HTML內容我希望看到我在看網頁被刮。

當我將varItem添加到我的手錶並查看對象的innerHTML時,此數據也被截斷。

任何人都可以擺脫一點點的代碼我能夠發佈這個問題?我的根本問題是,我沒有得到我期望的strDCStatus,因爲它沒有搜索整行數據,因爲某些東西正在被截斷。

更新

這裏是最好的我可以爲TR,這是內尋找:

<tr class=""> 
    <td> 
    &nbsp; 
    </td> 
    <td>2 Blah Blah &nbsp;</td> 
    <td class="AccountNumber"> 
    xxxxxxxxxxxx1234 &nbsp;&nbsp; 
    <a href="#" onclick="view(this, event,'12345', '45678');return false" class=""><img src="https://MySite" title="Click to Expand" alt="!"></a> 
    &nbsp; 
    </td> 
    <td>Closed&nbsp;</td> 
    <td>Jan 1, 2011&nbsp;</td> 
    <td>Nov 30, 2011&nbsp;</td> 
    <td>N/A&nbsp;</td> 
    <td> 
    xx/xxxx &nbsp;&nbsp; 
    <a href="#" onclick="view(this, event,'12345', '56789'); return false;" class=""><img src="https://MySite" title="Click to Expand"></a> 
    &nbsp; 
    </td> 
</tr> 

它使用<tr>標籤之間的innerHTML等等應有盡有。它會在onClick HTML數據周圍中斷。

我最終會嘗試得到的狀態在第4個td中處於「關閉」狀態,但由於我沒有看到完整的行HTML,因此我一直無法嘗試。

+0

這不是一個[MCVE]不同。至少,如果在執行該語句後給出一個字符串「varItem.innerhtml」的示例,該字符串將與「strDCStatus」的預期值一起「截斷」。 –

+0

如果我沒有弄錯字符串長度限制爲255個字符,但有辦法解決。只需搜索一下。 – mrbungle

+0

@mrbungle如果你指的是VBA字符串,你是錯誤的。在即時窗口輸入'?len(string(10^6,「*」))'立即打印'1000000'而不是拋出錯誤。 –

回答

6

Watches窗口只顯示一個長字符串的一部分(雖然,不像Locals窗口,它不表示終止...)。

例如,當我把手錶放在變量t

"0000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111222222222222222222222222222222222222222222222222223333333333333333333333333333333333333333333333333344444444444444444444444444444444444444444444444444 

即使字符串是明確:

Sub test() 
    Dim s As String, t As String 
    Dim i As Long 
    For i = 0 To 9 
     s = s & String(50, CStr(i)) 
    Next i 
    t = s 
End Sub 

,然後複製粘貼值到記事本中我看到更久,更長。

在代碼本身實錯誤可能是由於串中Split和的情況下,靈敏度得到的事實,即定界符<td>從定界符<TD>