在excel 2016中运行excel 2010 VBA脚本-一连串错误

在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,

我在excel 2016上运行excel 2010文档中的脚本时遇到问题。 一些背景: 这是一套复杂的工作表,用于记录与单个化学品相关的风险和危害。它花了很长时间才创作出来,但现在在2010年可以正常工作,但第一个脚本在excel 2016中出现了中断,我猜这不仅仅是一个问题

脚本要做的第一件事是保存文档,包括文件名中的化学品名称:

    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,它成功了。这看起来像是一个恼人的“本来不应该成功,但成功了”问题。我确信在剩下的电子表格中,我的代码中还有很多。。。