VBA 其他工作簿未正确关闭

Posted

技术标签:

【中文标题】VBA 其他工作簿未正确关闭【英文标题】:VBA other Workbook Doesnt close Properly 【发布时间】:2017-10-24 13:30:15 【问题描述】:

您好,我的 VBA 代码不想正确关闭我的原始数据文件。 然后我有一个数据捕获表单,当我点击提交时,打开另一个 Excel 文件,将所有数据复制到其中,应该保存并关闭工作簿。 我的代码如下:

Private Sub submit_Click()

'Open Workbook
If MsgBox("You are about to Submit, Are you sure?" & vbCr & "Please make sure that the OUTCOME box is complete", vbYesNo) = vbNo Then Exit Sub


Dim wb As Workbook, sh As Worksheet
Set wkb = Workbooks.Open("\\ServerName\Reports Folder\Team Name\Manager Name\RAW\RAW QC data.xlsx")

'Make Daily_Tracking_Dataset active
'Determine emptyRow
'Transfer Information

Set wb = Workbooks("RAW QC data.xlsx")

Set sh = wb.Sheets(1)
cAry = Array(Me.QCBX, Me.CallBX, Me.INBX, Me.AgntBX, Me.VoxBX, Me.ClntBX, Me.PolBX, Me.DateBX1, Me.AuditBX1, Me.TextBox7, Me.TextBox8, Me.OUTBX1, Me.Cbx1_1, Me.Cbx1_2, Me.Cbx1_3, Me.Cbx1_4, Me.OUTBX2, Me.Cbx2_1, Me.Cbx2_2, Me.Cbx2_3, Me.OUTBX3, Me.Cbx3_1, Me.Cbx3_2, Me.OUTBX4, Me.Cbx4_1, Me.Cbx4_2, Me.Cbx4_3, Me.OUTBX5, Me.Cbx5_1, Me.Cbx5_2, Me.Cbx5_3, Me.Cbx5_4, Me.Cbx5_5, Me.Cbx5_6, Me.Cbx5_7, Me.Cbx5_8, Me.ACBX, Me.QTBX, Me.QFBX)
    With sh
        For i = 1 To 39
            .Cells(Rows.Count, i).End(xlUp)(2) = cAry(i - 1).Value
        Next
    End With

'Save the Raw data
wb.Close SaveChanges:=True

End Sub

发生的事情是它看起来正在工作,但是当我尝试提交下一个时,它给了我SAVE AS 窗口

【问题讨论】:

【参考方案1】:

您的代码中有wkbwb。可能这不是您想要的。只需尝试在您的代码中将wkb 更改为wb。这是开始使用 Option Explicit - What do Option Strict and Option Explicit do? 的好理由


一般来说,像这样简单的事情应该可以工作:

Public Sub TestMe()

    'Dim wb      As Workbook
    Dim wkb     As Workbook
    Dim sh      As Worksheet

    Set wkb = Workbooks.Open(ThisWorkbook.Path & "\Testing.xlsx")
    'Set wb = Workbooks("Testing.xlsx")

    'Put your loop instead of the TEST later:
    wb.Worksheets(1).Cells(1, 1) = "TEST"

    Application.DisplayAlerts = False
    wkb.Save
    Application.DisplayAlerts = True
    wkb.Close

End Sub

【讨论】:

Set wkb = Workbooks.Open(".....这行不是打开文件吗?是的,之后使用wbk 而不是将wb 引用为wbk 会更容易。但它应该可以正常工作,不是吗? wkbwb 完全不同。修改它:) 你没有对wkb 做任何事情。 @Ralph - 没有注意到你不是 OP。 我刚刚对Dim x As WorkbookDim y As Workbook 使用Set x = Workbooks.Open(... 进行了测试,然后使用Set y = xy.close。惊喜:它有效。如果我现在将Set y = x 换成Set y = Workbooks(x.Name) 或明确写Set y = Workbooks("RAW QC data.xlsx") 它仍然有效。显然,xy 都成为对同一个 open 文件的引用,因此两者都可以关闭文件(可互换)。因此,我不确定您的代码在哪里提供了任何额外的见解/解决方案。还是我错过了什么? (顺便说一句:只是想在这里了解和学习自己!) 感谢我所做的只是将wbk 更改为wb 删除了wb.Close SaveChanges:=True 并添加了Application.DisplayAlerts = False wkb.Save Application.DisplayAlerts = True wkb.Close

以上是关于VBA 其他工作簿未正确关闭的主要内容,如果未能解决你的问题,请参考以下文章

在模拟器上工作,而不是在设备或其他模拟器上工作。设定的目标是正确的[关闭]

VBA 函数调用不正确

如何将工作簿中的某些工作表导入文件夹中的其他工作簿? (VBA)

用VBA代码打开其他excel工作簿(有打开密码的)???

VBA编程中如何调用其他文件夹下工作簿里的数据

在 Mac 上的个人宏工作簿中运行宏