掲題の通りなのですが、EXCEL2007で作成されたマクロ有効ファイル(XLSM形式)を
マクロ無効の状態で開く方法が分からず困っております。

マクロの内容は Workbook_Open 処理で、特定セルに入力されている
EXCELファイルを開き、自身は閉じるというものです。


Private Sub Workbook_Open()

Dim FileName As String

'1ファイル目
Range("A2").Select
FileName = ActiveCell.FormulaR1C1
Workbooks.Open FileName:=FileName
ThisWorkbook.Activate

'2ファイル目
Range("A3").Select
FileName = ActiveCell.FormulaR1C1
Workbooks.Open FileName:=FileName
ThisWorkbook.Activate

・・・・・・繰り返し

DoEvents
ThisWorkbook.Close

End Sub


上記の特定セルに設定してあるファイルパスを変更するためには
マクロを無効にして開かなければなりません。

マクロのセキュリティを変更して、「すべてのマクロを無効にする」を設定して
該当のファイルを開けば良い事は分かっているのですが、他に分かりやすい方法で
マクロ無効状態で開く方法があれば、ご教授頂ければと思います。

このQ&Aに関連する最新のQ&A

A 回答 (6件)

Win7、Excel2010、ダブルクリックでファイルを開く設定、の場合ですが、


Excelが開いていない状態で、
一旦、ファイル(またはショートカット)をクリックしてから、
Shiftキーを押し、そのまま、ダブルクリック、
以上の手順で、セーフモードでExcelとブックが開きます。
つまり、Private Sub Workbook_Open()は実行されません。
環境によって手順は異なると思いますけれども。

この回答への補足

昨日から他のOS・EXCEL環境にて同様の確認を
行ってみた所、Shift+ダブルクリックでマクロ無効と出来る端末もあれば
出来ない端末もあり、環境的な要因やEXCELの設定等も関係して
くるのでは無いかとの想定に至りました。

本来の用途目的は、サーバーのタスクマネージャーにマクロファイルを
設定して自動起動し、質問のマクロとは少々異なる幾つかの処理を
行っているのですが、今後他の者に該当ファイルの管理を引き継がなければならない為
自動起動せずに開く方法に、3重位の手順を作っておきたかったのですが
こちらの方法は環境に依存する可能性がありますので、手順に含める事を断念致しました。


ただ質問させて頂いた目的に対し、手法として出来る操作である事は間違いありませんので
度々の分かりやすい説明を踏まえた回答を頂いた点より、ベストアンサーとさせて頂きます。

また、他の方々におかれましても、ご回答・アドバイス本当にありがとうございました。

補足日時:2012/10/13 10:49
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。
当方の環境は、WindowsXP+EXCEL2010環境になります。

Shift キーを押しながらダブルクリックや
右クリックメニューの開く・編集・読み取り専用で開くを
試してみましたが、マクロ無効状態になりませんでした。

色々と試していた所、別途EXCELを起動しておいて
メニューよりファイルを開く際に、Shift+開く では
マクロが実行されずに開く事が出来ました。


直接、該当のファイルを開く場合は、Shift+ダブルクリック(開く)等では
Workbook_Open が実行されてしまいます。
EXCELの設定の問題でしょうか?

なお、マクロセキュリティは「すべてのマクロを有効」の設定環境となります。

お礼日時:2012/10/12 16:06

確認しました。



エクスプローラからでは、Shift + も、Ctrl+ も、どの方法も出来ませんでした。特に、エクスプローラ上からでは、Shift + は、多くのファイルが選択されてしまうので、ヒヤッとしました。

メニューから、Ctrl + で、Excelを選択する方法は、セーフモードで立ち上がるから、それは、それでもよいと思うのですが、それは目的とは違うようです。

今のところ、Excel 2010はないのですが、
私が行う場合(Auto_Openの自動実行をさせないために)は、

 最初に、Excelで、新規ワークブックが立ち上げます。
 次に、Excelのメニューから、ファイル名を選び、
 Shiftキーを押しながら、ファイル名を選び、クリックします。
 そうすれば、Auto_Openは実行されません。

ところで、話は別ですが、質問のマクロは、少し危ういような気がしますが。
今回のことで、ファイル名を別のブックにしたり、テキストにしたり、iniファイルにしたりする方法もあるのではないかと思います。

サンプルを作ってみました。
以下は、ブックと同じフォルダに、"FileNames.txt"を置いて使うものです。
FileNames.txt の中身は、

-------------
f120929.xls
f121002.xls
f121005.xls
f121008.xls
-------------
のようになっています。もし、自動実行を止めたい場合は、テキストファイルの先頭に、ありえないファイル名を書けば、エラーが出て止まります。fAr(10)は、現在9個ですが、この数を増やせば、もっとブックが開けます。常識的な範囲で入れれば良いです。

'//
Private Sub Workbook_Open()
 Dim Fno As Integer
 Dim f As String
 Dim mPath As String
 Dim fAr(10) As Variant 'ファイルリストは9個まで、最後は空ける
 Dim i As Long
 Dim j As Long
 'ファイルリストは、このブックと同じフォルダに置かなくてはなりません。"
 Const FILE_LIST As String = "FileNames.txt"
 On Error GoTo ErrHandler
 mPath = ThisWorkbook.Path & "\"
 Fno = FreeFile()
 If Dir(mPath & FILE_LIST) = "" Then
  MsgBox "file list が見つかりません。", 48
  Exit Sub
 End If
 Open mPath & FILE_LIST For Input As #Fno
 Do While Not EOF(Fno)
  Line Input #Fno, f
  fAr(i) = f
  i = i + 1
 Loop
 For j = 0 To UBound(fAr) - 1 '最後のIndex は、必ず開けます。
  Workbooks.Open fAr(j)
  If fAr(j + 1) = "" Then Exit For
 Next j
 ThisWorkbook.Close False
ErrHandler:
  MsgBox Err & Err.Description
End Sub
    • good
    • 1
この回答へのお礼

ご回答、アドバイスありがとうございます。
実際のマクロの内容は INIファイルの参照も含めて
様々な事をしており、普段はサーバーのタスクスケジュールで
設定して幾つかの処理を自動で行わせているのですが
質問として上げるのに辺り、短絡的に作った内容なのです。

他の者が今後管理する事になり、これまではINIファイルにマクロ自動起動の
フラグを持たせて管理をしていたのですが、それ以外にも2重3重の防衛手段
(フラグの書換を忘れていてもリカバー出来る様に)手順を考えていたので
そのうちの1つとして、質問させて頂きました。

あと、提示頂いたサンプルですがINIファイル内容より、ファイル名を取得してきたら
Dir関数等でファイルの存在チェックを掛けると、更に良いと思います。

お礼日時:2012/10/13 10:35

#2、3、cjです。


すみません。訂正だけ。
#2
(誤)
> 以上の手順で、セーフモードでExcelとブックが開きます。
(正)
以上の手順で、デザインモードでExcelとブックが開きます。

セーフモードはCtrl+でアプリケーション開くやつでしたね。
失礼しました。
    • good
    • 2
この回答へのお礼

度々ありがとうございます。
セーフモード、デザインモードの認識が
これまで無かったので勉強になります。

わざわざ、ありがとうございます。

お礼日時:2012/10/13 10:06

落ち着いてゆっくりいきましょう。




エクスプローラーなどで、シングルクリックでファイルを選択。
その後、Shift+Enterキーで開く動作、ファイルが開ききるまでShiftは押しっぱなし。



言ってみれば、ダブルクリックと同じ動作なんですけどね。
選択して、一呼吸おいて、開いてみませんか。
    • good
    • 0
この回答へのお礼

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

記載頂いた内容は、先の回答や私なりに調べた内容から
認識しておりますので、問題ございません。


ダブルクリック以外にも、該当ファイル選択してから
(1度クリックして選択されている状態)
右クリックメニューを開き、Shiftキーを押下しつつ「開く」や
Shiftキーを押下しつつ、右クリックメニューを開き
「編集」・「読み取り専用で開く」等 ※Shift+右クリック専用メニュー
Shiftキーを押下するタイミングや、押し続けているタイミング等も
色々と試してみても、マクロ無効状態で開けないので
環境的な問題なのかもと思ってきております。

該当ファイル以外にも、類似の WorkBook_Open で処理を行う
マクロを組んだXLSMファイルを作成して試してみておりますが
同じ状態であるため、ファイルの問題では無さそうなのです。


・・・あと自分の掲載した質問への追記的なものってどうやるんだろう・・・;

お礼日時:2012/10/12 18:19

こんにちは。

#2、cjです。
解決策は見つけたということのようですので、よかったです。

でもまぁ、できれば簡単な方が良いかな?色々方法があった方がよいかな?
ということもあって、一応、もう一度レスしてみます。

私の#2、
> 一旦、ファイル(またはショートカット)をクリックしてから、
これ↑伝わっていますでしょうか?
対象ファイルのアイコンがアクティブな状態にしてから
Shift + ダブルクリック、という意味ですので、
いきなり、Shift + ダブルクリック、ではうまくいかないです。

もっとも、Vista環境は私の方、確認しようがないので、OSの問題で違っていたとしても
不思議ではありませんが。
    • good
    • 0
この回答へのお礼

度々のご回答ありがとうございます。

> 一旦、ファイル(またはショートカット)をクリックしてから、

こちらの意味は重々理解しております。

ダブルクリック以外にも、該当ファイル選択してから
(1度クリックして選択されている状態)
右クリックメニューを開き、Shiftキーを押下しつつ「開く」や
Shiftキーを押下しつつ、右クリックメニューを開き
「編集」・「読み取り専用で開く」等 ※Shift+右クリック専用メニュー
Shiftキーを押下するタイミングや、押し続けているタイミング等も
色々と試してみても、マクロ無効状態で開けないので
環境的な問題なのかもと思ってきております。

該当ファイル以外にも、類似の WorkBook_Open で処理を行う
マクロを組んだXLSMファイルを作成して試してみておりますが
同じ状態であるため、ファイルの問題では無さそうなのです。

お礼日時:2012/10/12 18:06

Shiftキーを押しながらダブルクリックで開く・・・で行けたんじゃないかと。

    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。
当方の環境は、EXCEL2010環境になりますが
Shift キーを押しながらダブルクリックや
右クリックメニューの開く・編集・読み取り専用で開くを
試してみましたが、マクロ無効状態になりませんでした。

なお、Shiftキーはファイルが開かれるまで
ずっと押しっぱなしにしました。

EXCELの設定の問題でしょうか?

お礼日時:2012/10/12 14:12

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QWorksheets("Sheet1").ActivateのActivateの反対語は

ACCESSのVBAからの操作です
-----------------------------------------------

Set Xls = GetObject(myFile2)
Xls.Application.Windows(1).Visible = True
Xls.Application.worksheets("Sheet1").Activate<---
------------------------------------------------
上記でActivate、の反対にしたいとき、何ですか
最後のポイント↓を入れると
("Sheet1").<---
選択値が出てくる場合がありますが(この場合ではない)
この場合選択値がでないので、

よろしくお願いします

Aベストアンサー

通常、どれかのシートが Active 状態なので、
他のどれかのシートを Activate します。
すると前のシートはアクティブではなくなります。

英語上では Disactivate ですが、Excel VBA の Worksheet オブジェクトには Disactivate メソッドがありません。

QエクセルVBAでSheet1.ActivateとSheet(n).Activate

エクセル2000です。
VBAでの疑問点を教えてください。

Sub test1()
Sheet1.Activate
MsgBox ActiveSheet.Name
End Sub

これは問題なく作動します。

Sub test2()
x = ThisWorkbook.Worksheets.Count
For n = 1 To x
Sheet(n).Activate
MsgBox ActiveSheet.Name
Next
End Sub

これは「SubまたはFunctionがていぎされていません」というエラーになります。

もちろん、
Sub test3()
x = ThisWorkbook.Worksheets.Count
For n = 1 To x
Sheets(n).Activate
MsgBox ActiveSheet.Name
Next
End Sub
のように書けばOKなのは存じておりますが、これではSheet名に係らず、左から順番となってしまいます。

Sub test4()
x = ThisWorkbook.Worksheets.Count
For n = 1 To x
Sheets("Sheet" & n).Activate
MsgBox ActiveSheet.Name
Next
End Sub
のように明確にシート名として記述すればOKなのですが、それでは、Test1のSheet1.Activate が通って、Sheet(n).Activate が通らないのはなぜでしょう?
しょうもない質問でごめんさない。

エクセル2000です。
VBAでの疑問点を教えてください。

Sub test1()
Sheet1.Activate
MsgBox ActiveSheet.Name
End Sub

これは問題なく作動します。

Sub test2()
x = ThisWorkbook.Worksheets.Count
For n = 1 To x
Sheet(n).Activate
MsgBox ActiveSheet.Name
Next
End Sub

これは「SubまたはFunctionがていぎされていません」というエラーになります。

もちろん、
Sub test3()
x = ThisWorkbook.Worksheets.Count
For n = 1 To x
Sheets(n).Activate
MsgBox ActiveSheet.Name
Nex...続きを読む

Aベストアンサー

Sheet1 は Sheet1 という(Worksheet を継承した)オブジェクトなんです。

Sheets(n) や Sheets("Sheet" & n) は

Sheets コレクションのなかの n 番目、"Sheet" & n というシートということです。Sheets(index)プロパティで Worksheet オブジェクトを返します。

Sheet(n) はそもそも Sheet というオブジェクトがないのでエラーになってしまうというわけです。

Qエクセル2003 マクロのセキュリティを「低」にしても、マクロを無効にしてファイルを開く方法

http://oshiete1.goo.ne.jp/qa5101957.html
で質問したものなのですが、
アクセスでは教えていただいたとおり、Shiftキーを押しながら開くと無効にできるのですが、
エクセルに関しては、Shiftキーを押しても、ブックのオープンイベントが発生します。

エクセルでも場合によっては無効にして開きたい時はどうすればいいでしょう?

よろしくお願いします。

Aベストアンサー

こんにちは。

ふつう、「Shift を押しながら開く」ということは、エキスプローラ上ではなくて、一旦、Excelを開いて、「開く」のメニューから、ファイルを選択して「Shiftを押しながら開く」を実行します。

エキスプローラ上から、ファイルを選択して開こうとすると、アドイン等は解除されるのですが、実際の、目的のファイル(ブック)のOpenイベント・ドリブン型マクロは起動してしまいます。

ただし、逆に、メニューから、「Shift を押しながら開」いてみても、アドインなどの特殊なマクロに関しては動いています。

それでも気になるようなら、「スタート」から、Excelを選択して開くときに、Ctrl を押しながら立ち上げてください。「セーフモード」で、一切、マクロもアドインも動きません。

Qワードを開くとマクロの確認画面が開く

ワードの新規作成、その他の(例えばEメールに添付された)ワード文書などを開くとマクロの確認画面が開きます。マクロが設定されてないにも関わらず・・。
どこがおかしいのでしょうか。直したいのですが分かりません。
教えてください!よろしくお願いします!!

Aベストアンサー

同様の質問が…
http://okwave.jp/qa1745291.html

参考URL:http://okwave.jp/qa1745291.html

QExcel起動時にAuto_Openでマクロを動作させています。

Excel起動時にAuto_Openでマクロを動作させています。
1回目はマクロを行いたいのですが、
次回起動時はマクロを使用したくありません。
(初期にAuto_Openを使用しなければいいのですが、できれば使用したいです)

そこで下記はできますでしょうか?
・名前を付けて保存(時)後にマクロを削除するマクロ
・2回目以降起動時(該当のファイル名が違う場合に、Auto_Openが動作しない)マクロ

ほかでもよい案があれば教えてください。

Aベストアンサー

一例です

Sub auto_open()
If ThisWorkbook.Name = "Book1" Then
Call 処理
End If
End Sub

sub 処理()
auto_openにあった処理をこっちへ移動する
end sub

の様にして
If ThisWorkbook.Name = "Book1" Then
この行に、最初のファイル名を記入しておき判断させ
ファイル名が変わったら"処理"マクロは実行されない

参考まで


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報