excel - 帮助嵌套 if/Loop VBA

标签 excel vba nested-loops

我正在循环遍历 Excel 电子表格并将所有单元格组合成一个字符串,我就是这样做的。现在,在发送字符串进行上传之前,我需要使用 XML 标记来格式化该字符串,但在正确地将标记添加到循环中时遇到了一些困难。看起来它几乎可以工作了,但是一些标签没有放置在正确的位置。任何帮助将不胜感激。

代码:

Public file As String

Sub locate_file()

Dim sheet1_95 As String
Dim theRange As Range
Dim strVal As String
Dim wb As Workbook
Dim counterDT As Integer
Dim counterSVR As Integer
Dim counterMB As Integer

Dim outputStr As String


'prompt user for location of other excel sheet'
file = Application.GetOpenFilename("Excel Files (*.xlsx), *.xlsx")

Set wb = Workbooks.Open(file)

Dim cell As Range

'initializing the xml string'
strVal = "<root>"

Sheets("DT").Activate

counterDT = 1

For Each cell In ActiveSheet.UsedRange.Cells
'this first if-block is just excluding the few header cells from the data collection'
  If cell.Value <> "SKU" And cell.Value <> "P Number" And cell.Value <> "Month" _
     And cell.Value <> "DP Dmd" And cell.Value <> "Vertical" Then
    If cell.Column = "1" Then
      strVal = strVal & "<item><sku>" & cell.Value & "</sku>"
    ElseIf cell.Column = "2" Then strVal = strVal & "<pnum>" & cell.Value & "</pnum>"
    ElseIf cell.Column = "3" Then strVal = strVal & "<month>" & cell.Value & "</month>"
    ElseIf cell.Column = "4" Then strVal = strVal & "<forecast>" & cell.Value & "</forecast>"
    Else: strVal = strVal & "<vertical>" & cell.Value & "</vertical>"
    End If

    counterDT = counterDT + 1

    If cell.Row <> 1 Then
      If counterDT Mod 6 = 0 Then
        strVal = "<item>" & strVal & "<percent>" & category.percent(cell, "DT") & "</percent>"
       Else: End If
    Else: End If
  End If
Next

strVal = strVal & "</root>"

所以基本上问题是,这个循环/嵌套 if 在字符串的开头打印了 30 个“item”标签,我不知道为什么。

对于一些其他信息,Excel 工作表有 6 列,并且始终为 6。

最佳答案

当我创建 xml 标记时,我喜欢将实际标记移至单独的函数中。好处是它可以确保我的标签匹配。缺点是您直到最后才“应用”标签。像 item 和 root 这样的标签是在它们里面的所有标签都完成之后才完成的。这是一个例子:

Sub locate_file()

    Dim sVal As String
    Dim sRow As String
    Dim wb As Workbook
    Dim sh As Worksheet
    Dim lCntDT As Long
    Dim rCell As Range
    Dim rRow As Range
    Dim vaTags As Variant

    gsFile = Application.GetOpenFilename("Excel Files (*.xlsx), *.xlsx")

    If gsFile <> "False" Then
        Set wb = Workbooks.Open(gsFile)
        Set sh = wb.Sheets("DT")
        vaTags = Array("sku", "pnum", "month", "forecast", "vertical")

        lCntDT = 1

        For Each rRow In sh.UsedRange.EntireRow
            sRow = ""
            If rRow.Cells(1) <> "SKU" Then
                For Each rCell In Intersect(sh.UsedRange, rRow).Cells
                    If rCell.Column <= 4 Then
                        sRow = sRow & TagValue(rCell.Value, vaTags(rCell.Column - 1))
                    Else
                        sRow = sRow & TagValue(rCell.Value, vaTags(UBound(vaTags)))
                    End If
                Next rCell

                lCntDT = lCntDT + 1
                If rRow.Row <> 1 And lCntDT Mod 6 = 0 Then
                    sVal = sVal & TagValue("CatPct", "percent")
                End If
                sRow = TagValue(sRow, "item")
                sVal = sVal & sRow & vbNewLine
            End If
        Next rRow
        sVal = TagValue(sVal, "root")
    End If

    Debug.Print sVal

End Sub

Function TagValue(ByVal sValue As String, ByVal sTag As String) As String

    TagValue = "<" & sTag & ">" & sValue & "</" & sTag & ">"

End Function

关于excel - 帮助嵌套 if/Loop VBA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6599776/

相关文章:

java - Apache POI 无法替换空白 Excel 单元格

excel - 如何在 Excel 中将 SUMIFS 放在一起以包含 OR?

VBA Windows 7 样式按钮

file-io - VBA 线路输入与输入

java - 我不知道如何重置循环(请参见示例)

java - 使用 Java 打印菱形

c# - 打开Excel文件一直提示 "Read Only"

Excel VBA 文件名更改

excel - 以编程方式更改工作簿中的链接

PHP MySQL 循环遍历?我是 "overlooped"