2017-04-21 1 views
-4

excel 2010のExcelドキュメントでExcel 2016のドキュメントを実行するのに問題があります。 背景: これは複雑なワークシートで、個々の化学物質に関連する危険性。著者には時代がかかっていましたが、2010年にはうまくいきますが、最初のスクリプトは2016年に幕を閉じました。私の推測では、それは単なる問題ではないということです。excel 2016でExcel 2010 VBAスクリプトを実行するとエラーが発生する

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 

問題で始まる「コンパイルエラー:予想配列」とLBOUNDが強調表示

スクリプトが行う最初のことは、ファイル名に化学物質の名称を含む文書を保存しています。 ここで、いくつかのgoogelingで、新しいバージョンのexcel(またはVBA?)にOption Explicitを設定する必要があることがわかりましたので、これを行い、変数を宣言しました(または私は思った)。実際の問題ではありませんか?そしてもう一度、ここではおそらく単なる1つの問題以上のものです。

私は迷っています。

+1

私はExcel 2010を使用していますが、そのバージョンにも問題が存在することをお伝えします。 'illegal'を配列にしないと宣言しているので、' LBound(違法) 'を行うことはできません。新しいバージョンのExcelでは、** Option Explicitが必要ではありませんが、以前のバージョンで使用するのと同じように、使用することをお勧めします。おそらく、(間違った)宣言を追加してから、**あなたの問題を解決し始めましたか? 'Do'' Loop Until fname <> False'のようなものは、新しいバージョンと同様、2010年に無限ループを引き起こす可能性があります。 – YowE3K

+2

*新しいバージョンのExcel(またはVBA?)では、Option Explicitを設定する必要があります* - ああ、どうしたらいいのですか! –

+0

@ Mat'sMug SOのexcel-vbaタグは、 'Option Explicit'が必須であればほぼ冗長になります! – YowE3K

答えて

2

コードに必要な修正は以下に含まれていますが、これらの変更は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 
+0

ありがとうYowE3K、それは働いたこれは迷惑な "しかし、それは "問題でした。残ったスプレッドシートのために私のコードにもっとたくさんのものがあると確信しています... –

関連する問題