如何使用vba返回word中段落上方的第一个标题的值?

时间:2017-06-02 07:53:23

标签: vba header word-vba word-2016

我目前正在为一个单词写一个vba宏,它应该抓取文档中的所有注释并将它们返回到新创建的excel文件中。我几乎已经完成但是我遇到段落指示的问题。我想把段落中相应的标题放在excel中。为了做到这一点,我必须直接获取段落标题或找到段落上方的第一个与标题相关的格式。至少那些是我能想到的选择。知道如何最好地解决这个问题吗?

<?
$value="1,2,3,4";   
$arrlst =array();                      
$arrlst =explode(",",$value);  

foreach($arrlst as $relatedlst) {

    $arr_type_and_value=explode(":",$relatedlst);
    print_r($arr_type_and_value); // this got >> Array ( [0] => 1 ) Array ( [0] => 2 ) Array ( [0] => 3 ) Array ( [0] => 4 ); 

    $type= $arr_type_and_value [0]; 
    $value=$arr_type_and_value [1]; 

}        
?>

因此,我们的想法是将段落标题放在Headingrow 3.解决方案必须适应不同的标题格式,因为我使用的文档通常具有自制标题格式。我唯一可以依赖的是样式名称中包含单词标题的标题。任何帮助将不胜感激,当然我可以添加更多信息可能会丢失。

1 个答案:

答案 0 :(得分:1)

你正走在正确的轨道上并且似乎有能力写VBA所以这个答案比明确的更具建议性。

识别&#34;标题&#34;样式名称中的选项可以是一个选项,但前提是您可以依赖样式进行正确命名以适应此选项。在变量易变(可能会发生不可预测的变化)的情况下,有一个解决方案通常不会进行太多的开发:在运行宏时提示用户提供此信息!

在您的情况下,您提到标题通常具有自定义格式,您可以获取使用的格式并使用UserForm提示用户识别哪些格式用于段落标题。通过在文档中使用Styles,可以在VBA中更轻松地访问它们:

Sub getStyles()
    Dim UsedStyles As New Collection
    Dim pgf As Paragraph

    For Each pgf In ActiveDocument.Paragraphs
        UsedStyles.Add pgf.Style.NameLocal
    Next pgf
End Sub

这将循环遍历文档中的所有段落,并创建一个唯一列表(Collection),其中包含文档中使用的所有样式的名称。然后,您可以使用MultiSelect ListBox将其传递给UserForm,指示用户选择哪些样式用于标题。将用户选择返回到您的宏并将其用作比较以查找标题。