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