我有一个脚本,它打开一个外部文件来执行一个脚本,完成脚本后,它保存为一个 xlsb 文件。该代码非常适合从 xlsb 文件保存到 xlsb 文件。但是因为我想对原始文件有一些安全性,所以我希望原始的 xlsb 文件是 xltm 文件。我对其进行了另存为脚本的调整,并将其作为文件本身的单独例程进行了测试。它完美地工作。
现在我将例程添加到外部脚本文件中,但是当我执行脚本时,Excel 冻结并且根本没有出现“另存为”屏幕。我希望外部脚本有一些其他外部引用才能正常工作,但我不知道如何调整我的脚本。
这是原始文件的代码:
Option Explicit
Sub vernieuwalles()
Dim myTemplate As String: myTemplate = ActiveWorkbook.Name
Dim myTool As String: myTool = "refresh_segment_template.xlsm"
Application.ScreenUpdating = False
Workbooks.Open GetPath & myTool
Application.Run myTool & "!vernieuwalles", myTemplate
Call Windows(myTool).Close(False)
Application.ScreenUpdating = True
End Sub
Private Function GetPath() As String
Dim myPosition As Integer
Dim myPath As String: myPath = ActiveWorkbook.Path
myPosition = InStr(StrReverse(myPath), "\") - 1
myPosition = Len(myPath) - myPosition
GetPath = Mid(myPath, 1, myPosition - 1) & "\XLAM\"
End Function
它是指要打开和执行的外部脚本文件。
外部文件有这个脚本(我只将保存粘贴为脚本的一部分):
Option Explicit
Dim aantalrijen As Long
Const SheetSchaduwblad As String = "schaduwblad"
Sub vernieuwalles(mytemplate As String)
Windows(mytemplate).Activate
On Error GoTo Err_
Application.StatusBar = "Bezig met vernieuwen"
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
' Call SheetOpschonen
Call datawissen
Call dataplaatsen
Call kolomtitels
Call toevoegen
Call maaktabel
Call refreshpivots
Exit_:
Application.StatusBar = ""
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Exit Sub
Err_:
Call MsgBox(Err.Number & vbCrLf & Err.Description)
Resume Exit_
Application.Calculation = xlCalculationAutomatic
End Sub
Sub refreshpivots()
Dim workbook_Name As Variant
Dim location As String
Dim workbookdirectory As String
Dim activewb As String
ActiveWorkbook.RefreshAll
activewb = Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 5)
workbookdirectory = "M:\Commercie\Marktdata\IRi\Segment Ontwikkeling\"
workbook_Name = Application.GetSaveAsFilename(fileFilter:="Excel binary sheet (*.xlsb), *.xlsb", InitialFileName:=workbookdirectory & activewb)
If workbook_Name = False Then
ActiveWorkbook.SaveAs filename:=activewb, FileFormat:=50
End If
但是当我从原始文件执行脚本时,excel 会冻结,正如所指出的那样。应该更改此代码以使用外部文件以及从 xltm 保存到 xlsb 脚本?
正如所指出的:另存为脚本是脚本中唯一更改的内容,而 xlsb 到 xltm 扩展名更改是原始文件 中唯一更改的内容。