关闭工作簿和 VBA 文件

3

我已经编写了一个小的VBA脚本,但是我在完全关闭工作簿方面遇到了困难。我可以关闭工作簿,但是注意到它仍然在VBA编辑器中显示。我已经看到其他表格上放置一些代码来完全关闭所有内容,但我无法使其正常工作。

有人能为我指点迷津吗?

Private Sub PNTXLXS_Click()

Application.DisplayAlerts = False
Application.EnableCancelKey = xlDisabled

RCD_PNT.Hide


 With Sheets("Clash List").UsedRange
      mr = .Rows.Count
      mc = .Columns.Count
     .Range(Cells(1, 26), Cells(mr,mc)).SpecialCells(xlCellTypeVisible).Copy
 End With

 Workbooks.Add

 Application.Visible = True

With ActiveSheet.Range("A1")
    .PasteSpecial Paste:=xlPasteValues
    .PasteSpecial Paste:=xlPasteFormats
End With

With Selection
    .WrapText = False
    .EntireColumn.AutoFit
    .WrapText = True
End With


InitialName = Range("A1") & " - " & Format(Now(), "DDMMYY")

filesavename = Application.GetSaveAsFilename(InitialFileName:=InitialName, 
fileFilter:="Excel Files (*.xlsx), *.xlsx")

ActiveWorkbook.SaveAs FileName:=filesavename

ActiveWorkbook.Close

我知道这是需要关闭VBA文件的位置,对吗?

Application.CutCopyMode = False

Application.DisplayAlerts = True

End Sub

这里输入图片描述

谢谢

马克


首先使用 Option Explicit! 什么是 RCD_PNT - Storax
RCD_PNT是用户窗体的名称。按钮被点击后,我将其隐藏。 - Mark Austin
你能提供用户窗体的调用代码吗? - Storax
我在其中一个工作表中有一个按钮,它与一个模块相关联。模块内的代码是“RCD_PNT.Show”。 - Mark Austin
3个回答

2

从您的代码中删除 Application.Visible = True,改为使用 Me.Hide 而不是 RCD_PNT.Hide

Private Sub PNTXLXS_Click()

Application.DisplayAlerts = False
Application.EnableCancelKey = xlDisabled

Me.Hide


 With Sheets("Clash List").UsedRange
      mr = .Rows.Count
      mc = .Columns.Count
     .Range(Cells(1, 26), Cells(mr,mc)).SpecialCells(xlCellTypeVisible).Copy
 End With

 Workbooks.Add

' Application.Visible = True

With ActiveSheet.Range("A1")
    .PasteSpecial Paste:=xlPasteValues
    .PasteSpecial Paste:=xlPasteFormats
End With

With Selection
    .WrapText = False
    .EntireColumn.AutoFit
    .WrapText = True
End With


InitialName = Range("A1") & " - " & Format(Now(), "DDMMYY")

filesavename = Application.GetSaveAsFilename(InitialFileName:=InitialName, 
fileFilter:="Excel Files (*.xlsx), *.xlsx")

Application.CutCopyMode = False
Application.DisplayAlerts = True

End Sub

阅读Userform.show绝对是一个好主意

更好的方法是像这样显示用户窗体

Sub Show_RCDPNT()

Dim frm As New RCD_PNT

    frm.Show
    Unload frm

End Sub

感谢提供更好的编写代码方式。即使在修改后,文件关闭后,工作簿仍然在 VBA 项目树中保持打开状态。 - Mark Austin
很难说原因是什么。谷歌告诉我们可能是由于Com AddIns引起的,但这只是一个猜测。 - Storax

1
我看到了一个"Workbooks.Add"命令,这样一个新的工作簿就被打开了:你有没有对它做任何操作?在那行代码之前,你使用了“Sheets”,所以你已经打开了一个工作簿,它是活动工作簿,不是那个新的工作簿。然后你让Excel可见,处理一些范围,并保存ActiveWorkbook的副本。但由于Excel应用程序对象仍然存在,那个新的工作簿仍然待在Workbooks集合中,是吗?也许这就是你看到的情况?

我对VBA还是很新,所以代码可能不够简洁或存在冗余。我有一个包含数据的工作表。我不想分享这个主文件,而是只想分享数据的副本。我根据特定参数进行筛选。一旦我将其筛选到特定内容,我就只复制可见单元格,然后打开一个新工作簿并将该数据复制到新文件中。然后我提示用户提供文件名/位置。然后关闭工作簿,但工作簿仍在VBA项目树中保持打开状态。 - Mark Austin
我只是注意到即使 Excel 文件已关闭,由于 VBA 中的项目没有被关闭,因此出现了“内存不足”的错误。我在原帖中更新了一张显示问题的图片。 - Mark Austin

0
在您的工作表中,转到“数据”选项卡,单击“连接”图标,查看是否仍然链接到已关闭的工作簿。如果是这样,您可能需要添加一行代码来断开链接(使用您的文件名)。例如:ActiveWorkbook.Connections("filename").Delete

我能够通过重新加载测试文件而不是关闭并重新打开它来复制这个问题。在那种情况下,ActiveWorkbook.Connections("filename").Delete方法将无法起作用。- 抱歉 - BlackWidowWeb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接