2016-12-13 85 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>