いつもお世話になっています。
エクセルVBAで別のワークブックを参照したいので
workbooks.open Filename:="C:my documents\***.xls"
とすると、そのオープンするワークブックのTisWorkbookのWorkbook_Open()で実行している(.show)メニュー(ユーザーフォーム)が開いてしまいます。
このとき、Workbook_Open()を実行させないでワークブックを開く方法って、
なにかありますか?
Shiftを押しながらファイルを開くとき、実行されませんよね?それをVBAでできるのですか?
よろしくお願いします。

A 回答 (2件)

ファイルを開く前に、


Application.EnableEvents = False
を記述してもだめでしょうか?

処理が終わったら、必ず"True"に戻してください。
    • good
    • 0
この回答へのお礼

ありがとうございました。できました。
この記述はshiftキーと同じ働きなのですか?
ほんとに助かりました。

お礼日時:2002/01/16 09:32

こういうことですか?



Open [ファイル名] For Random As [ファイル番号]
     :
Close [ファイル番号]
※ファイル番号はCloseするための任意の数字です

質問の意味と違っていたらすみません。

この回答への補足

さっそく有難うございます。
すいません、VBAで開いたエクセルワークブックのデータを代入するには開いていないとダメなんですよね?
その開いたワークブックのワークシートのセルの値を代入したいのですが、
WORKSHEETS_openでユーザーフォームが開いているので、邪魔なのです。
質問、わかりにくいですね。
すいません。お願いします。

補足日時:2002/01/15 16:22
    • good
    • 0

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

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

QWorkbook_openでマクロが実行されない

ExcelのVBAで起動時にマクロを実行させたいのですが、
「メソッドまたはデータメンバが見つかりません。」
とのエラーが出て実行出来なくて困っています。

プログラム内容は
*ThisWorkbook*
Private Sub Workbook_Open()
Module1.tasu
End Sub

*標準モジュール(Module1)*
Private Sub tasu()
Dim a As Byte
a = 3
Range("a1") = a
End Sub

使用しているソフトはExcell2003、VB6.5です。
よろしくお願いします。

Aベストアンサー

下記をやってみてください。うまくいくと思います。
Sub tasu()
Dim a As Byte
a = 3
Range("a1") = a
End Sub
--
Sub Workbook_Open()
Module1.tasu
End Sub
--
Private Sub tasu()
Dim a As Byte
a = 3
Range("a1") = a
End Sub
とするとエラーです。Privateが問題です。
http://oshiete1.goo.ne.jp/qa522928.html
のNO1回答を参照。
>省略して「Sub hogehoge()」とした場合は「Public」とみなされます。

QWorkbook_Openを起動時以外に呼び出す

標準モジュールに書いた、Sub Auto_Open()なら、ボタンにAuto_Openを登録するなどで、ブックの起動時以外でも呼び出せますが、ThisWorkbookに書いた、Private Sub Workbook_Open()は、ボタンにWorkbook_Openを登録しても作動しません。
どのようにすればよいのでしょうか?

Aベストアンサー

#1、cjです。

フォームコントロールのボタンへのマクロ登録に Workbook_Open を
ということでしたら、[マクロの登録][マクロ名]に
ThisWorkbook.Workbook_Open
です。

失礼しました。

QPrivate Sub Workbook_open()で、マクロが止まってしまいます

よろしくお願いします。昨年はgooの皆さんに大変お世話になりました
お陰様でマクロもエクセルも大いに進歩できました
今年もよろしくお願いします

質問です
Private Sub Workbook_open()で、マクロが止まってしまいます
原因は
'***********************

'***********************
で、はさまれた部分にあるようです(REM文にするとマクロは止まりません)
なぜマクロが止まってしまうのでしょうか?
どなたか教えてください

Private Sub Workbook_open()
'実行順序はWorkbook_open()がauto_openより先
With Sheets("T60012")
'エクセルopen時に前回close時のデータは全部クリアー(終わったことだから比較は意味がない)
.Range("AP42:AP62").ClearContents '管理上限オーバー 旧温度クリアー
.Range("BA42:BA62").ClearContents '管理下限アンダー 旧温度クリアー
.Range("CE42:CE62").ClearContents 'OK NOの文字 デフォルトは空白
'****************************
Application.EnableEvents = True
Application.Speech.Speak "ボリュームチェック、ボリュームチェック", True
Application.EnableEvents = False
'****************************

End With
End Sub

よろしくお願いします。昨年はgooの皆さんに大変お世話になりました
お陰様でマクロもエクセルも大いに進歩できました
今年もよろしくお願いします

質問です
Private Sub Workbook_open()で、マクロが止まってしまいます
原因は
'***********************

'***********************
で、はさまれた部分にあるようです(REM文にするとマクロは止まりません)
なぜマクロが止まってしまうのでしょうか?
どなたか教えてください

Private Sub Workbook_open()
'実行順序はWorkbook_open(...続きを読む

Aベストアンサー

こんにちは!

>Application.EnableEvents
のTRUEとFALSEが逆なのでは?

お示しのコードでは「イベントを止める」で終わっていますので
そこでマクロそのものが止まってしまうと思います。

あくまで個人的見解ですが
今回のコードでは
>Application.EnableEvents = False

>Application.EnableEvents = True
の2行は不要な気がします。
(検証はしていません)

一般的にはChangeイベントなどで無限ループに陥るのを防ぐ場合、
この使い方をすることが多いと思います。

※ 万一エラーでマクロが止まったのであれば
Application.EnableEvents = True
の1行だけの別マクロで戻してあげないと
お示しのプロシージャそのものがうんともすんとも言わなくなるのでは?
(これも未検証なので無意味だったらごめんなさい)m(_ _)m

QExcel VBAについて質問します Set wb = Workbooks.Open(myFdr &

Excel VBAについて質問します

Set wb = Workbooks.Open(myFdr & "\" & fname) '開き,wbとする。
cnt = Worksheets.Count
For n = 1 To cnt
i = i + 1 'カウント
wb.Sheets(n).Range("A2").Copy mb.Sheets("Sheet1").Cells(i, "A") 'コピー
wb.Sheets(n).Range("D2").Copy mb.Sheets("Sheet1").Cells(i, "B") 'コピー
Next

この内容を値のコピーにするにはどうすれば良いでしょうか
よろしくお願いします。

Aベストアンサー

Open メソッドの前に、
Set mb = ThisWorkbooks
が必要です。

cnt = Worksheets.Count
実害はないけれども、
これは、cnt = wb.Worksheets.Count とします。

>値のコピーにするにはどうすれば良いでしょうか
コードを逆さまにすればよいです。

mb.Sheets("Sheet1").Cells(i, "A").Value = wb.Sheets(n).Range("A2").Value

QEXCEL VBA Workbook_BeforeSaveについて

教えて下さい!
会社のホームページにある情報を公開していて、その中に更新時間も載せております。その公開している文章はEXCELを利用しHTMファイルで保存しております。ファイルは社内の共有ファイルサーバーに保存されており、複数にて共有しています。そのEXCEL HTMファイルを編集し、(上書き)保存をした際、その時の時間を更新日時としてあるセルに表示させております。自身でVBAを以下の組みました。
(保存前処理の他、開いた時の列幅処理+前回更新日時の表示も行っています)

Option Explicit
---------------------------------------------------------
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim KOUSHINBI As Date
KOUSHINBI = Now
Range("E2").Value = KOUSHINBI

End Sub
---------------------------------------------------------------
Private Sub Workbook_Open()
MSGDISP '前回更新時間の表示
Dim TODAY As Date, KOUSHIN As Date
KOUSHIN = DateValue(Range("E2").Value)
TODAY = Date

If KOUSHIN <> TODAY Then
Columns("B:D").ColumnWidth = 0
End If
End Sub
--------------------------------------------------------
'以下標準モジュールで

Sub MSGDISP()
Dim A As Date
A = Worksheets("DAILY").Range("E2").Value
MsgBox ("前回の更新日時は" & A & "です")

End Sub
---------------------------------------------
もちろん、 Workbook_BeforeSaveと Workbook_Openは「THIS WORKBOOK」モジュールに記載しております。
これを実行すると、BOOK OPENの処理は行われるのですが、保存時の更新日時の処理が全く起きてくれません。
新規でEXCELを作成し、Workbook_BeforeSaveのみの処理を記述すると上手く処理が行われます。何が原因なのでしょうか??

教えて下さい!
会社のホームページにある情報を公開していて、その中に更新時間も載せております。その公開している文章はEXCELを利用しHTMファイルで保存しております。ファイルは社内の共有ファイルサーバーに保存されており、複数にて共有しています。そのEXCEL HTMファイルを編集し、(上書き)保存をした際、その時の時間を更新日時としてあるセルに表示させております。自身でVBAを以下の組みました。
(保存前処理の他、開いた時の列幅処理+前回更新日時の表示も行っています)

Option Explicit
-------...続きを読む

Aベストアンサー

Excelでhtmファイルを編集している時の現象ですよね。こちらでは同現象が再現できません。
新規Book(.htm)にWorkbook_BeforeSaveと Workbook_Open だけ記載して『手動保存』してみてください。
それでもBeforeSaveイベントは発生しないのでしょうか?
.xlsファイルの場合はどうでしょう。
_BeforeSaveプロシージャにブレイクポイントを設定してもそこを通らないのでしょうか?

新規BookでもBeforeSaveイベントが起きない場合、
念のためExcelをセーフモードで起動して試してみてください。

#ウィンドウズメニューから[ファイル名を指定して実行]
excel /s

セーフモード、新規Bookで問題ないなら、
・他のイベントプロシージャが関係している。
・他のアドインやマクロブックが影響している。
・(これは無いと思いますがイベントプロシージャ名の記入ミス。コードペイン上部のドロップダウンリストから選択してます?)


人気Q&Aランキング

おすすめ情報