Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 使用oXMLFile.SelectNodes的唯一节点值_Excel_Vba - Fatal编程技术网

Excel 使用oXMLFile.SelectNodes的唯一节点值

Excel 使用oXMLFile.SelectNodes的唯一节点值,excel,vba,Excel,Vba,因此,我通过读取XML文件,使用以下代码动态生成工作表名称: Set GenreNodes = oXMLFile.SelectNodes("/catalog/query/genre/text()") . . Private Sub CreateSheet(sheetName) Dim ws As Worksheet Set ws = ThisWorkbook.Sheets.Add(after:= _ ThisWorkbook.Sheets(ThisWor

因此,我通过读取XML文件,使用以下代码动态生成工作表名称:

Set GenreNodes = oXMLFile.SelectNodes("/catalog/query/genre/text()")
.
.
Private Sub CreateSheet(sheetName)
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets.Add(after:= _
             ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
    ws.Name = sheetName
End Sub
使用XML时,无需重复类似的类型标记即可完美工作,如:

<?xml version="1.0"?>
<catalog>
   <query id="bk101">
      <question>Do we have cloud security</question>
      <answer>Yes</answer>
      <genre>Cloud</genre>
   </query>
   <query id="bk102">
      <question>Do we have locks on the door</question>
      <answer>No</answer>
      <comment>We have fingerprint access.</comment>
      <genre>Physical Security</genre>
   </query>
</catalog>

我们有云安全吗
对
云
门上有锁吗
不
我们有指纹识别。
人身安全
问题是,在本例中,当我有重复类型(SDLC)时,比如:

<?xml version="1.0"?>
<catalog>
   <query id="bk101">
      <question>Do we have cloud security</question>
      <answer>Yes</answer>
      <genre>Cloud</genre>
   </query>
   <query id="bk103">
      <question>What SDLC Priciple is follwed?</question>
      <answer>None</answer>
      <comment>We have code ninjas.</comment>
      <genre>SDLC</genre>
   </query>
   <query id="bk104">
      <question>Do you have OSWP status?</question>
      <answer>None</answer>
      <comment>We plan to do next year.</comment>
      <genre>SDLC</genre>
   </query>
</catalog>

我们有云安全吗
对
云
遵循什么样的SDLC原则?
没有一个
我们有密码忍者。
SDLC
你有OSWP状态吗?
没有一个
我们计划明年做。
SDLC
Excel给我的
名称已存在
错误。如何提取没有此错误的唯一节点名


谢谢。

更新您的工作表创建代码,这样它就不会试图创建重复的工作表:

Private Sub CreateSheet(sheetName)
    Dim ws As Worksheet

    On Error Resume Next '<< ignore error if sheet doesn't exist
    Set ws = ThisWorkbook.Sheets(sheetName)
    On Error Goto 0      '<< stop ignoring errors

    If ws Is Nothing Then 
        'sheet doesn't exist, so create it.
        Set ws = ThisWorkbook.Sheets.Add(after:= _
                 ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
        ws.Name = sheetName

    End If
End Sub
Private子创建页(sheetName)
将ws设置为工作表

在示例中,您将使用什么工作表名称来代替SDLC?简单的解决方案是:每次添加工作表时,将名称添加到
字典中。然后,在尝试添加工作表之前,检查
字典中的名称,如果名称存在,则不要添加it@Daniel事实上,我会有重复的风格,所以让它们独一无二是没有意义的。我想需要更多的信息。您只能对工作表名称使用流派吗?是否要将所有条目添加为工作表,还是要避免重复?你能不能不把查询id加在类型后面?@Absince我想避免重复,我只能用类型作为工作表名。