エクセル2003 マクロについて

やりたいことが2つあります。

1)ファイル名を変更しても、マクロが作動するようにしたい。
  できればファイルの保管先を指定しないくても良い。
 (c:¥windows¥My Documentを指定しなくても、どこに保管してOKなようにしたいです)

2)数式バーを表示させない方法。
 ツール->オプション->表示の中の「数式バー」で、数式を表示しないようにしています。
 この方法ではなく、ファイルを開いた時点で既にオプションが触れないようにしたいのです。
 作業しているファイルはシートの保護はかけているのですが、ファイルを開いたときに
 この数式バーも触れないようにしたいのです。

素人なので、できればマクロのコードを「貼り付けるだけ」でできる方法を教えて下さい。
(貼り付ける場所も教えて下さい。ThisWorkBookにだとか今あるマクロのところに追加だけで良いとか)

すみませんが皆さん宜しくお願い致します。

回答の条件
  • 1人1回まで
  • 登録:2009/05/17 23:28:19
  • 終了:2009/05/18 12:32:46

ベストアンサー

id:Mook No.2

Mook回答回数1312ベストアンサー獲得回数3912009/05/18 07:34:26

ポイント60pt

ファイルを読み込んだり、ファイルを保存したりするのではない場合、マクロはファイルの名前や保存場所に

影響は受けませんので(1)は今回の場合気にする必要がありません。


(2)は、数式バーを隠したいのが対象ファイルだけであるように思えましたので、対象ファイルだけを

閉じるようにした例です。


マクロは ThisWorkbook の下に置いて、保存してください。

ファイルを選択すると数式バーが閉じます。ファイルを閉じると開く前の状態に戻るようになっているはずです。

(もともと閉じていれば変わりません。)



Public originalConfig As Boolean

'--- ファイルを開く前の状態を保存
Private Sub Workbook_Open()
    originalConfig = Application.DisplayFormulaBar
End Sub


'--- ファイルがアクティブになったときに設定を無効に変更
Private Sub Workbook_Activate()
    Application.DisplayFormulaBar = False
End Sub

'--- 他のファイルが選択されたとき、元の設定に戻す
Private Sub Workbook_Deactivate()
    Application.DisplayFormulaBar = originalConfig
End Sub
id:msvista

いつも回答ありがとうございます。

1)は下のコメント欄に記入しております。

2)は説明が足りず申し訳ありません。

オプション自体を触れなくしたいのです。教えていただいた内容ですと、

単に表示させない設定であり、ツール、オプション、数式バーをチェックすると表示されてしまいます。

この操作自体をできなくしたいのです。

宜しくお願い致します。

2009/05/18 09:24:30

その他の回答(2件)

id:taknt No.1

きゃづみぃ回答回数13537ベストアンサー獲得回数11982009/05/17 23:35:02

1)

http://pc.nikkeibp.co.jp/article/column/20081022/1008955/

「XLSTART」のフォルダにマクロが入ったエクセルファイルを 置いておけばいいです。

場所は

C:\Documents and Settings\ユーザー名\Application Data\Microsoft\Excel\XLSTART
id:Mook No.2

Mook回答回数1312ベストアンサー獲得回数3912009/05/18 07:34:26ここでベストアンサー

ポイント60pt

ファイルを読み込んだり、ファイルを保存したりするのではない場合、マクロはファイルの名前や保存場所に

影響は受けませんので(1)は今回の場合気にする必要がありません。


(2)は、数式バーを隠したいのが対象ファイルだけであるように思えましたので、対象ファイルだけを

閉じるようにした例です。


マクロは ThisWorkbook の下に置いて、保存してください。

ファイルを選択すると数式バーが閉じます。ファイルを閉じると開く前の状態に戻るようになっているはずです。

(もともと閉じていれば変わりません。)



Public originalConfig As Boolean

'--- ファイルを開く前の状態を保存
Private Sub Workbook_Open()
    originalConfig = Application.DisplayFormulaBar
End Sub


'--- ファイルがアクティブになったときに設定を無効に変更
Private Sub Workbook_Activate()
    Application.DisplayFormulaBar = False
End Sub

'--- 他のファイルが選択されたとき、元の設定に戻す
Private Sub Workbook_Deactivate()
    Application.DisplayFormulaBar = originalConfig
End Sub
id:msvista

いつも回答ありがとうございます。

1)は下のコメント欄に記入しております。

2)は説明が足りず申し訳ありません。

オプション自体を触れなくしたいのです。教えていただいた内容ですと、

単に表示させない設定であり、ツール、オプション、数式バーをチェックすると表示されてしまいます。

この操作自体をできなくしたいのです。

宜しくお願い致します。

2009/05/18 09:24:30
id:SALINGER No.3

SALINGER回答回数3454ベストアンサー獲得回数9692009/05/18 11:58:13

ポイント20pt

1) マクロ中に直接ファイル名やパスを指定する記述がある場合は、ファイル名を変更したり移動させたりした場合は当然エラーとなります。

このことはパスやファイル名に影響されないコードの書き方に変更することで解決します。

コード中のパスやファイル名のところを次のコードに置き換えることでエラーはなくなります。

ファイルのあるフォルダ:ThisWorkbook.Path
ファイル名:ThisWorkbook.Name
フルパス:ThisWorkbook.Path & "\" & ThisWorkbook.Name

2)別の人が数式を変更できなくすることが目的ならば、シートの保護でロックすれば変更はできません。

また、「ロック」の下の「表示しない」にチェックを入れると数式も表示されません。


オプションを使えなくする方法ですが、あまりお勧めしませんが以下の方法で可能です。

(利用者が元に戻せなくなる可能性もあるので)

ThisWorkbookに以下のコードをコピペしてください。

Private Sub Workbook_Open()
    Dim i As Integer
    With Application.CommandBars("Tools")
        For i = 1 To .Controls.Count
            If .Controls(i).ID = 522 Then
                .Controls(i).Enabled = False
            End If
        Next i
    End With
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim i As Integer
    With Application.CommandBars("Tools")
        For i = 1 To .Controls.Count
            If .Controls(i).ID = 522 Then
                .Controls(i).Enabled = True
            End If
        Next i
    End With
End Sub

コードではブックを開くとメニューのオプションを探して灰色にして、ブックを閉じるときに元に戻すコードです。

ただし、閉じるときに保存しますか?でキャンセルをするとオプションが使えるようになるという抜け道がありますが。

  • id:msvista
    なお、作業するファイルはシートの保護がしてあります。
    保護を外さずに1)2)の作業を行いたいです。
  • id:Mook
    回答にも書きましたが、今回の内容でしたらパスは関係しません。
    数式の表示もシートの保護には影響しないので、コメントの点は懸念する必要はありません。
  • id:msvista
    >ファイルを読み込んだり、ファイルを保存したりするのではない場合、マクロはファイルの名前や保存場所に
    影響は受けませんので(1)は今回の場合気にする必要がありません。

    少し意味が判らなかったのですが。
    今、使用しているエクセルのファイルは、名前を変更すると
    「実行時エラー 1004
     ○○○(ファイル名)が見つかりません。ファイル名及びファイル保管場所が正しいかどうかを確認して下さい・・・・・・・」
    と表示されマクロが走らないのです。

    ファイル名を****8月、*****9月と変更してもマクロが走らないのです。

  • id:Mook
    同じことの繰り返しですが、マクロ自体はマクロが書かれたファイル名がなんであろうと
    動作に影響は受けません(2007ではセキュリティ上フォルダが影響する可能性はあります)。

    「実行時エラー 1004
     ○○○(ファイル名)が見つかりません。ファイル名及びファイル保管場所が正しいかどうかを確認して下さい・・・・・・・」
    というのは、マクロが処理の中でファイルを保存しようとしている、あるいはファイルを
    読み込むという処理をしようとしているためです。
    フルパスで記載されていればそれでも影響は受けないと思いますが、相対パスや指定されて
    いるファイルが見つからないとそのようなエラーメッセージになります。

    すでにマクロが書かれているファイルに関しては、もともとのマクロを修正しない限りこの問題は
    解決できません。

    新規で作成するファイルに関しては、回答したマクロを使用する範囲で EXCEL のファイル名がどの
    ようなものであろうとも関係はありません。



    「表示⇒数式バー」を無効にするのは可能ですが、オプション⇒ツール⇒数式バーを無効にするのは
    難しそうですね(ツールを無効にするのはできますが)。

    データの変更をさせたくないのであれば、数式バーにこだわらずシート保護の段階でセル範囲の選択を
    許可しないようにしてしまってはどうでしょうか。

    対処的ですが、ThisWorkbook に下記を加えればセルを選択した段階で数式が再度無効になります。
    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    If Application.DisplayFormulaBar = True Then
    Application.DisplayFormulaBar = False
    End If
    End Sub
  • id:msvista
    >同じことの繰り返しですが、マクロ自体はマクロが書かれたファイル名がなんであろうと
    私の説明不足でしたので補足致します。

    1)作業ファイルの中にはシートが3枚あります。
    2)それぞれのシートに保護をかけています。
    3)保護をかけると、シートをまたがってのマクロ処理が上手く走らないので、
    4)マクロ1~5を作り、自動記録にて順番に走るようにしています

    そうするとコードの中に
    Application.Run "*********"ver2.1.XLS!Macro1"
    Application.Run "*********"ver2.1.XLS!Macro2"
    Application.Run "*********"ver2.1.XLS!Macro3"
    Application.Run "*********"ver2.1.XLS!Macro4"
    Application.Run "*********"ver2.1.XLS!Macro5"

    というのが各マクロのコードの中に出来てしまい、これが
    ファイル名と連動しているのです。

    どこをどうやっても、シートの保護をした状態で複数のシートに跨る処理ができるマクロができないのです。


  • id:SALINGER
    なるほど、マクロからマクロを実行してたわけですか。
    それならば私の回答の方法でうまくいきます。

    Application.Run ThisWorkbook.Name & "!Macro1"
    Application.Run ThisWorkbook.Name & "!Macro2"
    Application.Run ThisWorkbook.Name & "!Macro3"
    Application.Run ThisWorkbook.Name & "!Macro4"
    Application.Run ThisWorkbook.Name & "!Macro5"

    としてみてください。
  • id:SALINGER
    既にあるマクロの場合は、上記のようにThisWorkbook.Nameで置き換えることで動作しますが、
    もともとMacro1~Macro5を「個人用マクロ ブック」に作ることで、ファイル名に依存しないマクロになります。
    ただこの場合は、個人で使う分にはいいのですが、他のExcelで使う場合にマクロモジュールも移動しなければならない手間がかかることになります。
  • id:SALINGER
    更に、マクロでも保護されたシートを変更することはできないので、

    >>
    Dim sh As Worksheet

    For Each sh In Worksheets
    sh.Unprotect
    Next

    Application.Run ThisWorkbook.Name & "!Macro1"
    Application.Run ThisWorkbook.Name & "!Macro2"
    Application.Run ThisWorkbook.Name & "!Macro3"
    Application.Run ThisWorkbook.Name & "!Macro4"
    Application.Run ThisWorkbook.Name & "!Macro5"

    For Each sh In Worksheets
    sh.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    Next
    <<
    などのようにシートの保護を解除して、処理後に保護するコードを入れます。
  • id:Mook
    すでに御自身でコードに書かれているように、Protect のオプションに UserInterfaceOnly:=True
    を使用すればマクロの実行は制限されません(シートへの処理開始前にこの状態になっている必要があります)。

    ただし、これはファイルを終了すると無効になるので起動のたびに設定が必要ですから、
    次の質問のコメントにあるように、Workbook_Open 等で設定するようにすれば、他のマクロでは
    いちいち保護の解除と設定をあちこちでしないで済みますし、処理の途中で終って保護が解除されて
    しまうような心配もしなくてすみますので、その方がよいと思います。

    詳細の説明は下記の保護によるマクロの制限をお読みください。
    http://officetanaka.net/excel/vba/sheet/sheet07.htm
  • id:SALINGER
    シートの保護についてはどのレベルまで保護をしているのかは明示されていないので、
    先のコメントでは最終行で「など」と書いているように、Protectの引数は実際の環境に合わせてください。
    引数の種類はこちらを参考に。
    http://www.officepro.jp/excelvba/sheet_ope/index2.html
    また、当然マクロからも保護されている場合もあります。
    UserInterfaceOnlyでもいちいちプロテクトしなおさなければならないことには代わりませんので
    お好きなほうを使えばいいと思います。

    実際にファイル名を変更することで実行時エラー1004が出たのでわかるように、
    ファイル名がマクロに影響しないわけではありません。
    後から補足すると、私の回答でも逆にThisWorkbook.Nameを使うことで、
    以前ファイル名+バックアップという名前で保存したファイルが開けなく
    実行時エラー1004が出る場合も想定できます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません