0

我正在使用 VBA Word 宏来创建个性化议程。这是通过以下步骤完成的:

  1. 从 VBA Word,打开 Excel 电子表格
  2. 将电子表格中的预定义范围复制到 Word 中的数组中
  3. 创建新的 Word 文档,将数组中的每一行插入到单独的页面上。

感谢我在这里和一些网站上找到的帮助,我编写了一段代码来执行这三个步骤。

运行代码甚至关闭 Word 后,每次在 Excel 中打开电子表格时都会收到一条消息。消息是:

File.xlsm is blocked for edition by 'User'; (我的用户)

我认为这可能与:

  1. 从 VBA Word 调用 Excel:我Excel通过创建ApplicationObject(app_Excel) 并使用CreateObject方法来调用;为了完成应用程序,我使用了Set app_Excel = Nothing,然后app_Excel.Quit,如代码所示;或者

  2. 从 VBA Word 打开电子表格:在我第一次尝试使用Excel.Workbooks.Open(,,,ReadOnly = False)时,我将其更改为True,结果相同。

Sub main()

    'Main procedure
    Word.Application.ScreenUpdating = False
    
    Dim app_Excel As Excel.Application
    Set app_Excel = CreateObject("Excel.Application")
        
    Dim wbk_srce As Workbook
    Set wbk_srce = app_Excel.Workbooks.Open("C:\0_portolon\Dias.xlsm", , True)
    
    Dim wsh_srce As Worksheet
    Set wsh_srce = wbk_srce.Worksheets(3)
    wsh_srce.Activate
    
    cell_1 = CStr("A1")
    cell_2 = CStr("D216")
    
    Dim header_range As Excel.Range
    wsh_srce.Range(cell_1, cell_2).Select
    Set header_range = Excel.Selection
    
    Dim header_array() As Variant
    header_array = header_range.Value
    
    Set header_range = Nothing
    Set wsh_srce = Nothing
    Set sbk_srce = Nothing
    app_Excel.Quit
    
    'Creates Word document
    Call create_agenda(header_array)

End Sub

将数据复制到 Word 后如何解锁电子表格?

提前致谢, 蒂亚戈

4

1 回答 1

0

按照评论中给出的建议,我Set wbk = Nothing改为wbk.Close; 代码现在可以正常工作。

谢谢。

Sub main()

    'Main procedure
    Word.Application.ScreenUpdating = False
    
    Dim app_Excel As Excel.Application
    Set app_Excel = CreateObject("Excel.Application")
        
    Dim wbk_srce As Workbook
    Set wbk_srce = app_Excel.Workbooks.Open("C:\0_portolon\Dias.xlsm", , True)
    
    Dim wsh_srce As Worksheet
    Set wsh_srce = wbk_srce.Worksheets(3)
    wsh_srce.Activate
    
    cell_1 = CStr("A1")
    cell_2 = CStr("D216")
    
    Dim header_range As Excel.Range
    wsh_srce.Range(cell_1, cell_2).Select
    Set header_range = Excel.Selection
    
    Dim header_array() As Variant
    header_array = header_range.Value
    
    Set header_range = Nothing
    Set wsh_srce = Nothing
    
    wbk_srce.Close 'change
    app_Excel.Quit
    
    'Creates Word document
    Call create_agenda(header_array)

End Sub

于 2022-02-22T16:33:48.327 回答