【问题标题】:Trimming a string as it is retrieved in a for loop?在 for 循环中检索字符串时对其进行修剪?
【发布时间】:2016-08-22 23:49:22
【问题描述】:

我有这个 for 循环,它可以从企业的 Google 地图页面中检索电话号码。

               For Each a In Array("_Xbe _ZWk kno-fv")
                aa = ""
                aa = IE.Document.getElementsByClassName(a)(0).innerText
                If Len(bb) > 0 Then
                Wksht.Cells(LngRow, 10) = aa
                Exit For
              End If

           Next

效果很好,但电话号码的格式为 (xx) xxxx xxxx。我希望它是 xxxxxxxxxx。如何在 for 循环的中间进行修剪和连接?

【问题讨论】:

  • 您可能只使用Wksht.Cells(LngRow, 10) = Replace(Replace(Replace(aa,")",""),"(","")," ","")。 (我还假设 , 10 指的是 J 列,而不是您所追求的 10 个字符长的字符串。)
  • 这实际上工作得很好,除了它削减了 10 位电话号码的第一个数字
  • 代码在循环中执行是完全不相关的。您可能想更改标题。
  • 在替换功能前使用修剪

标签: vba excel


【解决方案1】:

您需要更改列的 NumberFormat 并使用替换来去掉括号和空格。

Wksht.Columns(10).NumberFormat = "0000000000"

For Each a In Array("_Xbe _ZWk kno-fv")
    aa = ""
    aa = IE.Document.getElementsByClassName(a)(0).innerText
    aa = Replace(aa, "(", "")
    aa = Replace(aa, ")", "")
    aa = Replace(aa, " ", "")

    If Len(bb) > 0 Then
        Wksht.Cells(LngRow, 10) = aa
        Exit For
    End If
Next

【讨论】:

  • 同样奇怪的问题,它切断了第一个数字,但其他一切都很好。
  • 此代码不会删除除括号和空格之外的任何内容。 Debug.Print aa 在修改之前看看你得到了什么。我可以获取实际标签 html 的样本吗?
  • 第一个数字总是 0 会是个问题吗?
  • @TummyTum - 它不是“切断”第一个数字 - Excel 不是 storing it as text
  • 谢谢 Excel,除了在它前面放一个 commo 或其他东西之外,还有其他方法吗?
【解决方案2】:

强制性正则表达式答案...

For Each a In Array("_Xbe _ZWk kno-fv")
    aa = vbNullString
    aa = IE.Document.getElementsByClassName(a)(0).innerText
    If Len(bb) > 0 Then
        With New RegExp
            .Pattern = "[^\d]"
            .Global = True
            Wksht.Cells(LngRow, 10) = .Replace(aa, vbNullString)
        End With
        Exit For
    End If
Next

注意:这需要引用 Microsoft VBScript 正则表达式,或者您可以通过使用 With CreateObject("VBScript.RegExp") 而不是 With New RegExp 来使用后期绑定。

【讨论】:

    【解决方案3】:

    试试下面的代码

     For Each a In Array("_Xbe _ZWk kno-fv")
                aa = ""
                aa = IE.Document.getElementsByClassName(a)(0).innerText
                If Len(aa) > 0 Then
                aa =trim(aa)
                aa = mid(aa, 2,2) & mid(aa,6,4)& right(aa,len(aa)-10)
    
                Wksht.Cells(LngRow, 10) = aa
                Exit For
              End If
    
           Next
    

    【讨论】:

    • 没用,但我也刚刚意识到我写了 If Len(bb),我不知道为什么我这样做它应该是 aa 但两者都没有区别:S
    • 不,它只是以原始数字格式正常运行代码。
    • 效果更好,去掉了括号,但空格仍然存在。
    • 由于某种原因仍然切断了第一个号码,例如号码是(02)1234 5678
    猜你喜欢
    • 1970-01-01
    • 2019-03-14
    • 2017-08-04
    • 2021-06-25
    • 2020-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多