尝试每30分钟运行一个宏



我上下搜索了一下,似乎找不到问题的答案。

我试着每30分钟运行一次宏。该工作簿可以保持开放,但不需要。我有3个其他excel工作簿必须全天开放,因为这是针对对冲基金的,它们使用bloomberg API提供实时数据。我试图运行的宏发送了一封电子邮件,其中包含我们全天投资组合的PnL更新。单独运行宏效果很好。宏在这里:

Public Sub PnLUpdate()
Dim OutApp As Object
Dim OutMail As Object
Dim rng As Range, cell As Range, HtmlContent As String, i As Long, j As Long
Set rng = Range("A1:M300")
HtmlContent = "<table>"
For i = 1 To rng.Rows.Count + 1
HtmlContent = HtmlContent & "<tr>"
For j = 1 To rng.Columns.Count + 1
HtmlContent = HtmlContent & "<td>" & Cells(i, j).Value & "</td>"
Next
HtmlContent = HtmlContent & "</tr>"
Next
HtmlContent = HtmlContent & "</table>"

Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
On Error Resume Next
With OutMail
.To = "xx"
.CC = "xx"
.Subject = "PnL Update // " & Format(Now, "mm-dd-yy // hh:mm AM/PM")
.HTMLBody = HtmlContent
.Send
End With
On Error GoTo 0
Set OutMail = Nothing
End Sub

我试着插入

Application.OnTime Now + TimeValue("00:00:30"), "PnLUpdate"

进入说宏观。它工作正常,每30分钟发送一次电子邮件。问题是,它发送的是当时活动的工作表,而不是我需要它发送的工作表。

我试着写一个模块,看起来像这样:

Sub callPnLUpdate()
With Sheet10
Call .PnLUpdate
Application.OnTime Now + TimeValue("00:00:30"), "PnLUpdate"
End With
End Sub

这给了我错误"无法运行宏'worksheetname.Xlsx!PnLUpdate'。该宏可能在此工作簿中不可用,或者所有宏都被禁用。

我试着寻找这个问题的解决方案,但所有的解决方案都说要启用程序访问,我已经做了,但这也不起作用。

需要明确的是:这个问题的解决方案不一定是使用我的宏。我会接受任何可以每30分钟发送一次特定电子表格的解决方案(最好从上午9点31分开始,下午4点05分结束,但这比每30分钟让这种自动化工作更重要(。

非常感谢您的帮助。

谢谢!

关键是在任何RangeCells调用中完全限定WorkbookWorksheet,否则,存在隐含的ActiveWorkbookActiveSheet

例如:

  • Set rng = Range("A1:M300")应该类似于Set rng = ThisWorkbook.Sheets("PnL").Range("A1:M300")。或者,如果您更喜欢使用图纸代号,例如Set rng = Sheet10.Range("A1:M300")
  • 同样,HtmlContent = HtmlContent & "<td>" & Cells(i, j).Value & "</td>"应该是HtmlContent = HtmlContent & "<td>" & rng.Cells(i, j).Value & "</td>"。否则,Cells(i, j)是指活动页上的单元格

我不知道这是否适用于您的特定情况,但每当我需要以特定的时间间隔运行宏时,我都会在Workbooks_Open子系统上设置宏,然后从批处理文件中调用该文件,并使用PC上的Task Scheduler应用程序调度该批处理文件。

因此,创建需要运行的宏,并将其放置在Workbooks部分(而不是模块(中,格式如下:

Sub Workbook_Open()
'your macro goes here
End sub

然后制作一个批处理文件,打开Excel文档。打开记事本并输入以下代码。对于代码的第一部分,请输入Excel.exe文件的路径。对于代码的第二部分,输入excel文件的路径。如果你的Excel文件在网络驱动器上,你需要用不同的路径。

"C:Program FilesMicrosoft Office 15rootoffice15EXCEL.EXE" "C:UserscurtisDropboxNational Accounts Customer DatabaseMakeNewLog.xlsm"

然后用.bat文件扩展名保存Notepad文档。我记不清了,但你可能必须更改文件资源管理器中的切换才能做到这一点(切换会向你显示所有图标的文件扩展名(。

有了批处理文件后,双击它以验证它是否工作。如果所有操作都正确,批处理文件将打开一个CMD窗口,该窗口将调用Excel文件。Excel文件将打开,您的宏将在Workbooks_open命令下自动启动。

现在只需安排批处理文件在任务调度器上运行即可。转到开始栏,搜索"任务调度器"并打开它。创建一个基本任务,命名它,选择"每日",设置时间,选择"启动程序"选项,浏览并选择批处理文件,然后完成。

这就是它变得有点不优雅的地方。您需要一次又一次地安排批处理文件,使其每30分钟运行一次。可能有更好的方法来配置任务调度器,但我只需要每天运行一个批处理文件,所以这是我所知道的范围。

如果没有别的,希望这能让你走上正确的道路!

最新更新