我已经在Excel工作表中有一个脚本。我在下面提到过:
Sub Auto_Open()
'
' Auto_Open Macro
'
ActiveWorkbook.RefreshAll
'
End Sub
Private Sub Workbook_Open()
Worksheets("Sheet2").Range("A4:BX33").Copy
Worksheets("November").Range("C3").PasteSpecial Transpose:=True
Worksheets("Sheet2").Range("A34:BX64").Copy
Worksheets("December").Range("C3").PasteSpecial Transpose:=True
Worksheets("Sheet2").Range("A65:BX95").Copy
Worksheets("January").Range("C3").PasteSpecial Transpose:=True
Worksheets("Sheet2").Range("A96:BX123").Copy
Worksheets("February").Range("C3").PasteSpecial Transpose:=True
Worksheets("Sheet2").Range("A124:BX154").Copy
Worksheets("March").Range("C3").PasteSpecial Transpose:=True
Worksheets("Sheet3").Range("A2:BX100").Copy
Worksheets("Weekly").Range("C3").PasteSpecial Transpose:=True
Worksheets("Sheet4").Range("A2:DZ100").Copy
Worksheets("Monthly Figures").Range("C2").PasteSpecial Transpose:=True
Worksheets("Sheet5").Range("A2:BX100").Copy
Worksheets("All Time Figures").Range("C1").PasteSpecial Transpose:=True
Application.CutCopyMode = False
End Sub
感谢SO上的优秀人才,这段代码非常棒。现在我要添加的附加功能是:
a)在上午6点自动打开此表。每天。 b)在Excel中没有任何提示的情况下保存它。 c)关闭工作表。
我在网上搜索并提出了这些解决方案:
Private Sub Workbook_Open()
Application.OnTime TimeValue("15:00:00"), "mymacro"
End Sub
Workbooks.Open Filename:="C:\test.xls"
Workbooks("Test.xls").Close
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ThisWorkbook.Save
End Sub
请告知如何将上述给定的想法整合到我现有的脚本中以及如何优化脚本。
我正面对当前脚本的一个问题是,在数据刷新结束之前,会发生转置。无论如何也要解决这个问题。
提前感谢您的帮助。
关于, 马努斯
答案 0 :(得分:1)
你想要做一些事情:
以下是代码,将其放在工作簿中的新模块中
Option Explicit
Public Sub DoWork()
ThisWorkbook.RefreshAll
Worksheets("Sheet2").Range("A4:BX33").Copy
Worksheets("November").Range("C3").PasteSpecial Transpose:=True
Worksheets("Sheet2").Range("A34:BX64").Copy
Worksheets("December").Range("C3").PasteSpecial Transpose:=True
Worksheets("Sheet2").Range("A65:BX95").Copy
Worksheets("January").Range("C3").PasteSpecial Transpose:=True
Worksheets("Sheet2").Range("A96:BX123").Copy
Worksheets("February").Range("C3").PasteSpecial Transpose:=True
Worksheets("Sheet2").Range("A124:BX154").Copy
Worksheets("March").Range("C3").PasteSpecial Transpose:=True
Worksheets("Sheet3").Range("A2:BX100").Copy
Worksheets("Weekly").Range("C3").PasteSpecial Transpose:=True
Worksheets("Sheet4").Range("A2:DZ100").Copy
Worksheets("Monthly Figures").Range("C2").PasteSpecial Transpose:=True
Worksheets("Sheet5").Range("A2:BX100").Copy
Worksheets("All Time Figures").Range("C1").PasteSpecial Transpose:=True
Application.CutCopyMode = False
End Sub
然后你想要创建一个VBScript文件来打开你的工作簿(任务计划程序只有打开文件本身就会出现问题,事情可能会变得很糟糕)。
Dim objExcel
Set objExcel = CreateObject("Excel.Application")
objExcel.Workbooks.Open("path to your workbook here")
objExcel.Visible = False
objExcel.DisplayAlerts = False
objExcel.Run "DoWork"
objExcel.ActiveWorkbook.Save
objExcel.ActiveWorkbook.Close(0)
objExcel.Quit
保存在某处,无所谓,只记得它。现在您要创建一个将执行该VBScript文件的任务。
你很高兴,这个任务现在每天都会在你指定的那天开始运行。该任务将执行脚本,该脚本将在后台创建一个新的Excel实例(不干扰您正在做的任何事情),运行您的更新,保存并关闭。
答案 1 :(得分:0)
一块蛋糕,只需从第二个子调用第一个子。你可以通过将sub分成两个单独的subs来解决刷新之前的转置。我还建议您在子开头关闭更新并在结束时重新打开它们。像这样:
Private Sub updatetoggleoff()
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
Application.ScreenUpdating = False
Application.DisplayAlerts = False
End Sub
Private Sub updatetoggleon()
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
Private Sub Workbook_Open()
updatetoggleoff
Application.OnTime TimeValue("15:00:00"), "mymacro"
End Sub
Workbooks.Open Filename:="C:\test.xls"
Auto_Open
updatetoggleon
Workbooks("Test.xls").Close
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ThisWorkbook.Save
End Sub
答案 2 :(得分:0)
创建由任务计划程序触发的VBS脚本。
使用记事本将其粘贴到名为TEST.VBS
的文件中Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("C:\test.xlsx")
objworkbook.Application.DisplayAlerts = False
objExcel.Calculate
objexcel.Save
objexcel.quit
创建任务计划程序事件,每天早上6点运行TEST.VBS。
程序:wscript.exe
参数:c:\ test.vbs // B