Vba 两个问题-在实例化工作簿中保存更改和激活其他工作簿

Vba 两个问题-在实例化工作簿中保存更改和激活其他工作簿,vba,excel,Vba,Excel,我有两张电子表格;我叫他们电子表格1和电子表格2。电子表格1有一个函数,可以生成一个月的天数,如果是在月末,它将尝试调用电子表格2中的模块/子模块。这是为了生成“每日”报告和“每月”报告 此时,有两个错误:第一个错误是当我试图保存我创建的电子表格2的新实例时。错误在于它要求以无宏格式保存工作簿。我只是想保存它!不要对格式进行任何更改。我甚至不确定它是否试图保存对实例化book对象的更改 第二个是在电子表格2中,即使我将其设置为活动工作表(我想),活动工作表仍然作为电子表格1上的工作表显示,该工作

我有两张电子表格;我叫他们电子表格1和电子表格2。电子表格1有一个函数,可以生成一个月的天数,如果是在月末,它将尝试调用电子表格2中的模块/子模块。这是为了生成“每日”报告和“每月”报告

此时,有两个错误:第一个错误是当我试图保存我创建的电子表格2的新实例时。错误在于它要求以无宏格式保存工作簿。我只是想保存它!不要对格式进行任何更改。我甚至不确定它是否试图保存对实例化book对象的更改

第二个是在电子表格2中,即使我将其设置为活动工作表(我想),活动工作表仍然作为电子表格1上的工作表显示,该工作表首先运行宏

感谢您的帮助

    Option Explicit
Public Function LastWeekOfMonth() As Boolean

'finds the current date
    Dim CurrentDate As Date
    CurrentDate = CDate(ActiveSheet.Cells(FIRST_DATA_ROW, 1))

'find filepath and filename of the monthly documentation file
    Dim mFilePath As String
    Dim mFileName As String

    mFilePath = "F:\Project Sweep\Kim Checklist\Barry Polinsky\Brathwaite, Tamika\"
    mFileName = Cells(3, 4) & ".m_d.xlsm"

     'if it is the last week of the month, write a monthly report, and return true to continue with the face to face paperwork
     If (31 - Day(CurrentDate)) <= 7 Then
        'write a monthly report
        Dim app As New Excel.Application
        Dim book As Excel.Workbook

      '  app.Visible = False 'Visible is False by default, so this isn't necessary
        Set book = app.Workbooks.Add(mFilePath & mFileName)

        'run the subroutine CheckSpreadsheet in module WriteReport in target book
        app.Run "'" & mFilePath & mFileName & "'!" & "WriteReport" & ".CheckSpreadsheet", book
      '  CheckSpreadsheet (book)




        'error next line
        book.Save
        book.Close

        app.Quit
        Set app = Nothing
        LastWeekOfMonth = True

    'if it is not, simply continue with the face to face paperwork
     Else
        LastWeekOfMonth = False
     End If

End Function

不需要另一个Excel实例,隐藏工作簿的属性是
Windows
,以便隐藏工作簿使用的Excel窗口。还要记住,工作簿可以有多个窗口

如果确定要隐藏的工作簿只有一个窗口,请使用此行:

Workbooks("WbkName").Windows(1).Visible = False
如果工作簿有多个窗口,请使用以下步骤:

Sub Wbk_Hide()
Dim wbk As Workbook, wdw As Window
    Set wbk = Workbooks("WbkName")   'Update as required
    For Each wdw In wbk.Windows
        wdw.Visible = False
    Next
End Sub

我相信这会改变您的过程的范围,否则请告诉我。

是否有特定的原因让您打开第二个
Excel应用程序实例
如果您正在运行的代码是Excel VBA?希望能够打开工作簿2,而不让它变为可见。stackoverflow上的其他帖子建议我,这样做的方法是打开一个新的应用程序,因为工作簿对象没有.visible属性可以足够公平。问题可能在于您正在使用
应用程序。运行
调用将从第一个Excel实例启动的
检查电子表格
子例程,然后传递在第二个Excel实例中打开的
Excel.工作簿
变量。尝试将
Application.Run
替换为
app.Run
,以便它从您的第二个Excel实例中运行子例程<代码>wbook.Activate正在尝试激活另一个Excel实例中的工作簿。。。但是你为什么要激活任何东西呢?另外,在
MsgBox
参数周围放上括号:
MsgBox ActiveSheet.Name
。感谢您的评论。剩下的唯一问题是电子表格2中的宏似乎什么都没做;Cells(5,5)=“Hello world!”-请参阅更新的代码谢谢您的所有评论,以及您迄今为止在这方面的帮助。你的方法行得通,我只是很难确保我可以关闭我打开的所有工作簿和应用程序,所以我现在不打算这么做。剩下的问题是电子表格2中的宏似乎什么都没做;单元格(5,5)=“Hello world!”-请参阅更新的代码
Sub Wbk_Hide()
Dim wbk As Workbook, wdw As Window
    Set wbk = Workbooks("WbkName")   'Update as required
    For Each wdw In wbk.Windows
        wdw.Visible = False
    Next
End Sub