在excel 2016中运行excel 2010 VBA脚本-一连串错误
我在excel 2016上运行excel 2010文档中的脚本时遇到问题。 一些背景: 这是一套复杂的工作表,用于记录与单个化学品相关的风险和危害。它花了很长时间才创作出来,但现在在2010年可以正常工作,但第一个脚本在excel 2016中出现了中断,我猜这不仅仅是一个问题 脚本要做的第一件事是保存文档,包括文件名中的化学品名称:在excel 2016中运行excel 2010 VBA脚本-一连串错误,vba,excel,excel-2010,excel-2016,Vba,Excel,Excel 2010,Excel 2016,我在excel 2016上运行excel 2010文档中的脚本时遇到问题。 一些背景: 这是一套复杂的工作表,用于记录与单个化学品相关的风险和危害。它花了很长时间才创作出来,但现在在2010年可以正常工作,但第一个脚本在excel 2016中出现了中断,我猜这不仅仅是一个问题 脚本要做的第一件事是保存文档,包括文件名中的化学品名称: Private Sub CommandButton1_Click() Dim chemical As String, illegal As String,
Private Sub CommandButton1_Click()
Dim chemical As String, illegal As String, fname As String
Dim X as Integer
On Error Resume Next
chemical = Range("Q13") 'this will be used as part of the filename
If chemical <> "" Then
Application.ScreenUpdating = False
illegal = Array("<", ">", "|", "/", "*", "\", "?", "[", "]", ":")
For X = LBound(illegal) To UBound(illegal)
chemical = Replace(chemical, illegal(X), "-", 1) 'replaces illegal characters for file name
Next X
fname = Application.GetSaveAsFilename(InitialFileName:="Draft PAC " & chemical & ".xlsm")
Do
Loop Until fname <> False
ActiveWorkbook.SaveAs Filename:=fname
Application.ScreenUpdating = True
Else: MsgBox "Please enter the name of the chemical into the orange shaded cell"
End If
End Sub
Private子命令按钮1\u单击()
Dim化学品作为字符串,非法作为字符串,fname作为字符串
作为整数的Dim X
出错时继续下一步
chemical=范围(“Q13”)'这将用作文件名的一部分
如果是化学的,那么
Application.ScreenUpdating=False
非法=数组(“”、“|”、“/”、“*”、“\”、“?”、“[”、“]”、“:”)
对于X=LBound(非法)到UBound(非法)
chemical=Replace(chemical,非法(X),“-”,1)”替换文件名的非法字符
下一个X
fname=Application.GetSaveAsFilename(初始文件名:=“草稿PAC”&chemical&“.xlsm”)
做
循环直到fname为False
ActiveWorkbook.SaveAs文件名:=fname
Application.ScreenUpdating=True
其他:MsgBox“请在橙色阴影单元格中输入化学品名称”
如果结束
端接头
问题以“编译错误:预期数组”开始,并突出显示LBound。
现在,我通过谷歌搜索发现,新版本的excel(或VBA?)需要设置Option Explicit,所以我已经这样做了,并且声明了我的变量(或者我认为是这样),但这可能不是实际问题?再说一次,这里可能不止一个问题
我迷路了。下面列出了您需要对代码进行的更正,但这些更改都不是由于从Excel 2010升级到更高版本而引起的,它们在早期版本的Excel中也是必需的
Private Sub CommandButton1_Click()
'Declare illegal as a Variant array
Dim chemical As String, illegal() As Variant, fname As String
Dim X As Integer
'Get rid of the On Error so that you know when something doesn't work
'On Error Resume Next
chemical = Range("Q13").Value 'this will be used as part of the filename
If chemical <> "" Then
Application.ScreenUpdating = False
illegal = Array("<", ">", "|", "/", "*", "\", "?", "[", "]", ":")
For X = LBound(illegal) To UBound(illegal)
chemical = Replace(chemical, illegal(X), "-", 1) 'replaces illegal characters for file name
Next X
'Put "fname = " within the loop so that it isn't an infinite loop
'if the user does not select a filename
Do
fname = Application.GetSaveAsFilename(InitialFileName:="Draft PAC " & chemical & ".xlsm")
Loop Until fname <> False
ActiveWorkbook.SaveAs Filename:=fname
Application.ScreenUpdating = True
Else
MsgBox "Please enter the name of the chemical into the orange shaded cell"
End If
End Sub
Private子命令按钮1\u单击()
'将非法声明为变量数组
Dim chemical作为字符串,非法()作为变量,fname作为字符串
作为整数的Dim X
“摆脱错误,这样你就知道什么时候出了问题
'出现错误时,请继续下一步
化学品=范围(“Q13”)。值“这将用作文件名的一部分
如果是化学的,那么
Application.ScreenUpdating=False
非法=数组(“”、“|”、“/”、“*”、“\”、“?”、“[”、“]”、“:”)
对于X=LBound(非法)到UBound(非法)
chemical=Replace(chemical,非法(X),“-”,1)”替换文件名的非法字符
下一个X
将“fname=”放入循环中,使其不是无限循环
'如果用户未选择文件名
做
fname=Application.GetSaveAsFilename(初始文件名:=“草稿PAC”&chemical&“.xlsm”)
循环直到fname为False
ActiveWorkbook.SaveAs文件名:=fname
Application.ScreenUpdating=True
其他的
MsgBox“请在橙色阴影单元格中输入化学品名称”
如果结束
端接头
我正在使用Excel 2010,我向您保证该版本中也存在问题。您不能执行LBound(非法)
,因为您已声明非法
不是数组。较新版本的Excel不需要Option Explicit
,但使用它是一个好主意,就像在早期版本中使用它一样。也许您添加了(不正确的)声明,然后开始出现问题?像Do
循环直到fname False
这样的事情可能会在2010年导致无限循环,就像在较新版本中一样。较新版本的excel(或VBA?)需要设置显式选项-哦,我多么希望如此@如果Option Explicit
是强制性的,Mat'sMug SO的excel vba标记将变得几乎多余!即使是更新版本的RubberDuck也不需要:P@A.S.H嘿,;-)感谢YowE3K,它成功了。这看起来像是一个恼人的“本来不应该成功,但成功了”问题。我确信在剩下的电子表格中,我的代码中还有很多。。。