【问题标题】:VBA other Workbook Doesnt close ProperlyVBA 其他工作簿未正确关闭
【发布时间】:2025-12-24 20:35: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 窗口

【问题讨论】:

    标签: vba excel save


    【解决方案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