Word 2010 宏不起作用

Posted

技术标签:

【中文标题】Word 2010 宏不起作用【英文标题】:Word 2010 macro not working 【发布时间】:2018-04-05 14:53:11 【问题描述】:

我有一个从 Excel 电子表格导入数据的 Word 文档。两个文件都不是我的;我继承了这个问题。在 Excel 电子表格的先前版本中,数据位于 Q 到 T 列中。在新版本中,它位于 R 到 U 列中。使用的代码如下。当我运行文档的早期版本时,没有问题。一旦我使用新文档进行导入,它就会出现以下错误代码:

5941 - 请求的集合成员不存在

调试器将代码ElseIf cel.Value <> "" 突出显示为问题。新代码如下。 (工作的旧代码完全相同,但上述范围除外)。

有什么想法吗?

提前致谢。

Sub ImportComplianceResults()

    Dim fd As FileDialog, oApp As Excel.Application, oWb As Excel.Workbook, iWs As Integer, rData As Excel.Range

    Set fd = Application.FileDialog(msoFileDialogFilePicker)
    With fd
        'Open modal window
        .Title = "Select file to import:"
        .InitialFileName = "X:\Template\"
        .Filters.Clear
        .Filters.Add "Excel files", "*.xlsx"
        .InitialView = msoFileDialogViewList
        .AllowMultiSelect = False
        If .Show = -1 Then
            Set oApp = New Excel.Application
            Set oWb = oApp.Workbooks.Open(.SelectedItems(1), , True)
            'Check for worksheet in selected file
            For Each ws In oWb.Worksheets
                If ws.Name = "Compliance Results" Or ws.Name = "Résultats de conformité" Then iWs = ws.Index
            Next ws
            If iWs > 0 Then
                Set rData = oWb.Worksheets(iWs).Range("R10:T10,R13:U15,R17:U17,R19:U19,R21:U21,R23:U23,R25:U25,R27:U27,R29:U29,R32:U34,R37:U39")
                With ActiveDocument
                    For Each cel In rData
                        If IsError(cel.Value) Then
                            .SelectContentControlsByTag(cel.Address).Item(1).Range.Text = "#N/A"
                        ***ElseIf cel.Value <> "" Then
                            .SelectContentControlsByTag(cel.Address).Item(1).Range.Text = Format(cel.Value, cel.NumberFormat)***
                        Else
                            .SelectContentControlsByTag(cel.Address).Item(1).Range.Text = " "
                        End If
                    Next cel
                End With
                MsgBox "Data imported successfully.", vbInformation
            Else
                MsgBox "No data exists in selected file." & vbCr & "Import cancelled.", vbCritical
            End If
            oWb.Close False
            'Cleanup Resources
            Set rData = Nothing
            Set oWb = Nothing
            Set oApp = Nothing
        Else
            MsgBox "Import cancelled.", vbCritical
        End If
    End With

End Sub

【问题讨论】:

【参考方案1】:

尝试使用:

ElseIf Not cel.Value = "" Then
   .SelectContentControlsByTag(cel.Address).Item(1).Range.Text = Format(cel.Value, cel.NumberFormat)

【讨论】:

谢谢大卫!我已经尝试了您的建议,它不会破坏任何东西,这很好。但是,一旦我再次尝试使用正确的范围导入,它就不再起作用了。我在想在范围内我没有看到的东西。 word 文档中总共有 4 个宏,是否可能是其他 3 个宏中的一个导致问题并且它只是在这个特定位置中断的问题之一?【参考方案2】:

一旦您克服了错误控制,只需使用 .Text 属性而不是 .Value。

...
ElseIf cel.Text <> "" Then
    .SelectContentControlsByTag(cel.Address).Item(1).Range.Text = cel.Text
...

【讨论】:

感谢您的建议!当我这样做时,它会在那时中断。我所做的是将范围修改回旧方式并且它可以工作(请注意数据不在正确的位置)但是当我进行此修改时它不起作用:(

以上是关于Word 2010 宏不起作用的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的简单 C 宏不起作用?

为 UIFont 定义宏不起作用

为啥这个 Common Lisp 宏不起作用?书上的答题卡错了吗?

保存excel文件后运行宏不起作用

电子生成器自定义 NSIS 包含脚本宏不起作用

为啥这个在 Common Lisp 中漂亮地打印宏扩展的宏不起作用?都有哪些替代工具?