用于导出XML的VBA宏,如果某个单元格为“OFF”值,则避免一行

时间:2016-07-28 20:49:44

标签: excel vba excel-vba

我有一个VBA宏,可以将数据作为XML打印出来。我试图找出一种方法来编辑我的宏,以便在循环期间跳过一行,如果某个单元格值为“OFF”。由于我不擅长编写VBA代码,我想保持这个简单,所以我查找vba宏并调整它们,直到我得到所需的结果,所以对我提供的代码中的任何错误表示道歉。这是我现在的宏,但我一直遇到不匹配类型错误。对于XML的每一行,我旁边有一个单元格,可以设置为“ON”或“OFF”值。感谢大家的帮助!

Sub Export_tvXML()

Dim XMLFileName As String

Dim MetaFileName1 As String
Dim MetaFileName2 As String

Dim output1 As String
Dim output2 As String

Dim range1 As Range
Dim range2 As Range

Set range1 = Sheets("XML").Range("A2:E84")
Set range2 = Sheets("XML").Range("A86:E168")

MetaFileName1 = Sheets("TV_Info").Range("G5")
MetaFileName2 = Sheets("TV_Info").Range("G6")


XMLFileName = MetaFileName1 & ".xml"

For Each r In range1.Rows
    If Cells(r, 6).Value = 1 Then
        For Each c In r.Cells
            output1 = output1 & c.Value
        Next c
        output1 = output1 & vbNewLine
    End If
Next r

Open XMLFileName For Output As #1
Print #1, output1
Close #1


XMLFileName = MetaFileName2 & ".xml"

For Each r In range2.Rows
    For Each c In r.Cells
        output2 = output2 & c.Value
    Next c
    output2 = output2 & vbNewLine
Next r

Open XMLFileName For Output As #2
Print #2, output2
Close #2


End Sub

至于电子表格方面,我已经模拟了XML,宏只会在格式化时输出值。这是一个参考截图。因此,任何设置为关闭的行,我希望宏跳过该行并移动到下一行以输出它。

XML Mockup

1 个答案:

答案 0 :(得分:0)

我认为你的问题在以下几行:

If Cells(r, 6).Value = 1 Then

您正在针对数字(1)测试单元格值,但您的意思是针对字符串值进行测试,这就是您遇到类型不匹配的原因。

尝试将其更改为以下内容:

If StrComp(Cells(r, 6).Value,"ON")=0 Then

StrComp是比较两个字符串的有用函数,其中包括使比较不区分大小写的选项。在这种情况下,两个字符串是第6列中连续单元格的内容,字符串为" ON"。