• ベストアンサー

エクセルVBAでのバージョン情報の取得

エクセル2000,2002の混在の職場にいます。 マクロで文字色の変更を試みましたが、エクセル2002のシート保護の機能が高くなっている為、2000と20002とでシート保護命令を変える必要が生じました。 (2002ではProtect DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFormattingCells:=Trueは有効ですが、2000ではマクロがバグってしまいます) そこで、IF ○○とエクセルのバージョン情報を参照する手段をご存じの方、教示願います。

質問者が選んだベストアンサー

  • ベストアンサー
  • hakone
  • ベストアンサー率54% (40/73)
回答No.2

こんにちは。 基本的には、 Application.Version でバージョンが取得できます。 が、パッチの状態によっては、9.0eのように文字付き だったりしますので、Valで数値に直した方が扱い易い と思います。 Sub test()  Select Case Val(Application.Version)   Case 8    MsgBox "Excel97"   Case 9    MsgBox "Excel2000"   Case 10    MsgBox "Excel2002"   Case 11    MsgBox "Excel2003"  End Select End Sub

kmasumi
質問者

お礼

ありがとうございました。 早速 AUTO open に設定し機能しました。

その他の回答 (1)

回答No.1

application.Version を参照すればよいかと。 ただ、2000とか2002とかいう表記じゃないです。 いま、手元にある2000だと9.0という値を 返します。

kmasumi
質問者

お礼

早速の回答ありがとうございました。

関連するQ&A

  • EXCEL VBA シート保護のエラー

    こんにちは。 ここでいろいろ質問をさせていただき、なんとかマクロを完成させましたが・・・ 自分のPCで動かす分には、なにも問題なくうごくのですが、他のPCで動かしたところ”1004”のエラーが出てしまい動かなくなりました(”1004”は、アプリケーション定義がなんとかいうものです) Private Sub CommandButton1_Click() Worksheets("A").Unprotect Password:="○○○" Worksheets("B").Unprotect Password:="○○○" Worksheets("B").Range("B50:L100").ClearContents Worksheets("A").Range("B50:L100").AutoFilter field:=1, Criteria1:="=" Worksheets("A").Range("B50:L100").Copy Worksheets("B").Range("B50") Worksheets("B").Range("B36:L100").Interior.ColorIndex = xlNone Worksheets("A").AutoFilterMode = False Worksheets("A").Protect Password:="○○○", DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowFormattingCells:=True Worksheets("B").Protect Password:="○○○", DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowFormattingCells:=True End Sub 黄色くなるところは、 Worksheets("A").Protect Password:="○○○", DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowFormattingCells:=True の部分です。そして画面には10枚あるすべてのシートのエラーが・・・。 Worksheets("A")と指定しているのに、10枚全てのエラーがでるのも?だし、自分のPCではうまくいくのに他ではダメというところが分かりません。よろしくお願いします。

  • エクセル:常に保護をかけるがマクロは有効

    シートに、マクロ実行時以外保護をかけておきたいです。 (マクロで、ロックをかけたセルを操作したいので) 「マクロを記録する」で保護をかける操作を記録してもらったところ、 「許可する操作」は以下の記述で実行されるようです。 ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, _ AllowInsertingColumns:=True, AllowInsertingRows:=True, _ AllowDeletingColumns:=True, AllowDeletingRows:=True ここに「マクロからの変更は有効」の UserInterfaceOnly:=True を加えた以下のコードは、 ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, _ AllowInsertingColumns:=True, AllowInsertingRows:=True, _ AllowDeletingColumns:=True, AllowDeletingRows:=True, UserInterfaceOnly:=True どのSubに記述すればよいでしょうか。 ワークシートに直接書込むんですよね? Private Sub Worksheet_SelectionChange(ByVal Target As Range) End Sub に書いてみたら一時期正常に動いていたと思うのですが、どうやら勘違いだったみたいです。 ActiveもChangeも違うようなのですが(なぜかどちらも一時は動いたような…)。

  • エクセル2000でのVBAについて

    下記のVBAを書いているのですが、3つのIF文を1つに まとめたいのですが教えてください。 If Range("E16") = "申請者" Then Sheets("ログイン").Select Sheets("報告票").Select ActiveSheet.Unprotect Range("M3:U7").Select Selection.Locked = False Selection.FormulaHidden = False ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True '数式バー表示 Application.DisplayFormulaBar = True Range("H9").Select Else: Sheets("ログイン").Select If Range("E16") = "所属長承認" Then Sheets("報告票").Select ActiveSheet.Unprotect Range("D3:L7").Select Selection.Locked = False Selection.FormulaHidden = False ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True '数式バー表示 Application.DisplayFormulaBar = True Range("H9").Select Else: Sheets("ログイン").Select If Range("F16") = "所属長承認" Then Sheets("報告票").Select ActiveSheet.Unprotect Range("BS3:CA7").Select Selection.Locked = False Selection.FormulaHidden = False ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True '数式バー表示 Application.DisplayFormulaBar = True Range("H9").Select Else: Sheets("ログイン").Select end if end if end if

  • シートの保護につきまして

    行・列の追加削除だけ、無効にする方法は ありますか? 単にシートを保護するだけなら下記で行っております。 ActiveSheet.Protect Password:="", DrawingObjects:=True, Contents:=True, Scenarios:=True ご回答のほど、よろしくお願いいたします。

  • エクセルのマクロ実行後にカーソルが見えなくなった

    ThisWorkbook内に以下のコードを記述し、Sheet1に保護をかけています。 Worksheets("Sheet1").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, UserInterfaceOnly:=True Worksheets("Sheet1").EnableSelection = xlUnlockedCells マクロで、 1.保護しているSheet1をコピーし、シートを新たに作成。 2.そのシートを「Sheet2」にリネーム。 3.Sheet2を保護。 という操作をしています。 Sheet2への保護に使っている記述は上に挙げたコードと同じです。 このマクロを実行すると、 作成したSheet2においてセルに載るカーソル(黒枠)が見えなくなっていまいます。 クリック後にキー入力をすると文字は入るので見えなくなっているだけのようです。 同じ記述で保護しているSheet1は普通にカーソルは見えています。 マクロの「3.Sheet2を保護」をコメントアウトすると、普通にカーソルが見えるようになります。 何故カーソルが見えなくなってしまうのでしょうか。

  • エクセルVBA/原因不明の保護解除?!

    下記のコードを実行すると、終了後次回立ち上げたとき、シートの保護が解除されています。 コードではオブジェクトを含めてシートを保護し、終了時には「保存」をしているのですが、なぜか次の立ち上げでは保護が解除されています。 原因がわかりません。お助けください。 Sub Test01() Dim s, i, cr With ActiveSheet .Protect Password:="aaa", DrawingObjects:=False, Contents:=True, Scenarios:= _ True, UserInterfaceonly:=True 'オブジェクトのみ保護解除 Cells.Interior.ColorIndex = 1 'シートを黒色に Set s = .Shapes.AddShape(msoShape4pointStar, 100#, 125#, 200#, 200#) '星を配置 s.Fill.Visible = msoTrue s.Fill.Solid Randomize cr = Int((30 * Rnd) + 1) s.Fill.ForeColor.SchemeColor = cr '色をランダムに For i = 1 To 300 '点滅 s.Visible = False DoEvents s.Visible = True DoEvents Next s.Delete '星を削除 .Protect Password:="aaa", DrawingObjects:=True, Contents:=True, Scenarios:= _ True, UserInterfaceonly:=True 'オブジェクトも保護 Cells.Interior.ColorIndex = 0 'シートをもとにもどす End With ActiveWorkbook.Close '終了する End Sub

  • エクセル マクロ picture

    教えてもらいながら以下のような画像貼り付けマクロを組んだのですが,以下の点に引っかかり前進することができません. 教えて頂きたいと思い投稿しました. 躓いている点  シート内でボタンを利用して貼り付け及び削除をしているのですが,エクセルシート内でコピペするたびに「Selection.Name」と貼り付け先を修正しています. →これをコピペしても修正をしなくてもよいマクロはないでしょうか? 自作作成マクロ Sub 写真貼付1_Click() Dim AA As String, BB As String, CC As String 10 AA = InputBox("参照先を指定して下さい。例:D:\Photo001.jpg", "場所指定", AA) If (AA = "") Then AA = Application.GetOpenFilename(Title:="写真ファイルの場所はどこですか?") GoTo 10 End If ActiveSheet.Unprotect Range("m29").Select ActiveSheet.Pictures.Insert(AA).Select Selection.Name = "写真1" Selection.ShapeRange.LockAspectRatio = msoTrue Selection.ShapeRange.Height = 310 Selection.ShapeRange.Width = 310# Selection.ShapeRange.IncrementLeft 1 Selection.ShapeRange.IncrementTop 1 ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowFormattingCells:=True End Sub -------------------------------------------------- Sub 写真削除1_Click() ActiveSheet.Shapes("写真1").Select Selection.Delete ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowFormattingCells:=True End Sub ところどころ端折ってますが,以上のようなマクロです. よろしくお願いします.

  • Excelファイルを開いた時に、特定のシートに保護をかけたいです。

    Excelファイルを開いた時に、特定のシートに保護をかけたいです。 http://okwave.jp/qa/q6067314.html 本日質問しましたカーソルの変な動作の原因というか引き金がわかりましたので、 再度質問致します。 Sheet1, Sheet2, Sheet3の3シートがあるExcelファイルを開いた時に、Sheet2に保護をかけたいです。 そこで、 ThisWorkbookの中に、以下のように記述しました。 Private Sub Workbook_Open()  Worksheets("Sheet2").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, UserInterfaceOnly:=True  Worksheets("Sheet2").EnableSelection = xlUnlockedCells  'マクロ使用時には保護を無視したい End Sub このように記述し、Excelファイルを開くと、Sheet2に保護がかかります。 ただし、 (Excelファイルを開く際は、「前回保存時に開いていたシートで開く」と思うのですが、) このExcelファイルをSheet1またはSheet3を表示させた状態で保存すると、 次にこのExcelファイルを開いた時になぜかSheet1または3にも保護がかかってしまいます。 この「Sheet1または3にかかった保護」は、一度別のシートに切り替えることで解除される一時的なものなのですが、 なぜ指定していないSheet1または3にも保護がかかってしまうのでしょうか。 ThisWorkbookへの書き方がまずいでしょうか。 以上、知っている方いましたらよろしくお願いいたします。

  • VBScriptでEXCELシートに保護をかけたい

    いつも参考にしています VBAですと下記コードですが ActiveSheet.Protect Password:=11111, DrawingObjects:=True, Contents:=True, Scenarios:=True VBScriptのコーデイングが分かりません Set EXCELAPP = CreateObject("Excel.Application") Set BOOK = EXCELAPP.Workbooks.Open("@.xls") Set SHEET = EXCELAPP.Sheets(0) この後にシート保護のコーディングをしたいのですが。。。 ヒントをお願いします

  • Excel VBA 超初心者 困っています。

     Excelで見積書を作成しています。  マクロでページを追加できるようにしたいのですが、貼り付け先のセルを指定する方法をインターネットで探しながら作ってみると  実行時エラー1004 Range クラスの PasteSpecial メソッドが失敗しました。 となります。  ワークシートを指定すればいいのかなと思いますが、どういう風に指定するのかがわかりません。    どうか、教えてくださいませんでしょうか。宜しくお願いします。 Sub 頁追加() ActiveSheet.Unprotect ActiveSheet.Range("A42:AZ84").Copy Dim a As Range Set a = Application.InputBox( _ Prompt:="セル範囲を選択してください", _ Title:="セル選択ダイアログ", _ Type:=8) a.PasteSpecial Application.CutCopyMode = False EndSec: Set Rng = Nothing ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End Sub

専門家に質問してみよう