以前、下記質問をしてご回答いただいて無事解決したのですが
今回、共有サーバー上ではなくメール等で送付する際、デバッグエラーが出てしまいます。

https://oshiete.goo.ne.jp/qa/9556384.html

もちろん、私のPCで開くとエラーはでませんが、他の人にメールで送信すると
参照先は合っているのですが下記部分がエラーになります。

この部分:Workbooks.Open myPath & fN
-------------------------------------------------------------------------------------
Dim myPath As String, fN As String 'この行から//
Private Sub Workbook_Open()
myPath = "保存場所のパス" & "\"
fN = "ファイル名.xlsx"
Workbooks.Open myPath & fN
ThisWorkbook.Activate
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
fN = "ファイル名.xlsx"
On Error Resume Next
Workbooks(fN).Close
If Workbooks.Count = 1 Then
Application.Quit
ThisWorkbook.Close
End If
End Sub 'この行まで//
---------------------------------------------------------------------------------------
何が原因なのかわからず、質問させていただきました。
何卒、ご教授頂ければ幸いです。

質問者からの補足コメント

  • ご返信ありがとうございます。

    恐らくおっしゃる通りの基本的エラーだと思われます。
    知識不足で基本的な質問をしてしまい申し訳ありません。

    全員が共有サーバーを使用できる環境ではないorアクセス権がない人もいる為
    このエラーを回避することはできないということですね?

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/04/14 16:13

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

A 回答 (1件)

念のため…


"保存場所のパス" や ”ファイル名.xlsx” へのアクセス権がないとか、
ローカルドライブを示しているため他のパソコンにはそんなファイルやパスは存在しないなんて、
そんな基本的なエラーではありませんよね。

・・・本題・・・
エラーの内容が分かりませんので、原因の特定は無理。
現状では推論でしか語れないと思います。
この回答への補足あり
    • good
    • 1

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

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

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

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

QPrivate Sub Workbook_BeforeSaveについて

エクセル2000です。
腑に落ちない現象が起きているので質問させてください。
Sheet1にテキストボックス(OLEオブジェクトのTextboxではありません)とボタンが貼ってあり、Visble=Falseで非表示にしています。それを保存する際には表示させたいので、BeforeSaveイベントで

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Sheet1.TextBoxes("テキスト").Visible = True
Sheet1.Buttons("ボタン").Visible = True
MsgBox "保存されちゃった!"
End Sub

と書いてみました。
手動で保存する場合には正しく、テクストボックスやボタンは正しく表示されます。もちろんMsgboxも出ます。

ところが、標準モジュールに書いた以下のコード、

Sub 保存()
ActiveWorkbook.Save
End Sub

を走らせてみても、"保存されちゃった!"と、Msgboxは出ますが、肝心のテクストボックスやボタンが表示されません。
試行錯誤の結果、
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Sheet1.Shapes("テキスト").Visible = True
Sheet1.Shapes("ボタン").Visible = True
MsgBox "保存されちゃった!"
End Sub

と書くと、標準モジュールから、ActiveWorkbook.Saveでも表示されることがわかりました。
どうしてでしょうか?

エクセル2000です。
腑に落ちない現象が起きているので質問させてください。
Sheet1にテキストボックス(OLEオブジェクトのTextboxではありません)とボタンが貼ってあり、Visble=Falseで非表示にしています。それを保存する際には表示させたいので、BeforeSaveイベントで

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Sheet1.TextBoxes("テキスト").Visible = True
Sheet1.Buttons("ボタン").Visible = True
MsgBox "保存されちゃった!"
End Sub

と...続きを読む

Aベストアンサー

>を走らせてみても、"保存されちゃった!"と、Msgboxは出ますが、肝心のテクストボックスやボタンが表示されません。

ユーザー関数を抜けて「シートが待ち状態になるまで」は、シート上の子コントロールのVisibleプロパティの変化は反映されません。

ところが「セーブしちゃうと、Visibleプロパティが変化したのを忘れてしまう」ので「Sub 保存()を抜け、Visibleプロパティの変化が反映されるタイミング」には、もう「Visibleプロパティが変化したのを忘れている」のです。

つまり、Sub 保存()を抜けるまで、Visibleプロパティを変化させても反映されません。

しかし、ShapesのVisibleプロパティは「見た目だけを即座に画面に反映する」ので、Visibleプロパティを変更した瞬間に画面に反映されます(但し、反映されるのは「見た目だけ」なので、そのコントロールがクリック可能とは限りません)

QPrivate Sub Worksheet_Calculate()のことでお聞きします

いつもgooの皆さんに大変お世話になっております
マクロの勉強を初めて2ヶ月の者です

Private Sub Worksheet_Change(ByVal Target As Range)にマクロを書いているのですが
「特定のセル範囲が変更されたときに処理を実行する」は分かるのですが
特定のセル範囲が変更されなくても、例えば、セルの値がインストールされているアドインで
変化した時の処理はどこに書いたらいいのでしょうか?

今現在、H列のTarget.RowとJ列のTarget.Rowにはアドインで、機器の温度が表示されていますが
この2点の温度変化で
Application.Speech.Speak "温度接近", True
などどやりたいのですが、Private Sub Worksheet_Calculate()に書けばいいのでしょうか
その場合、Private Sub Worksheet_Change(ByVal Target As Range)内の
Target.Row等の値はどうやったらPrivate Sub Worksheet_Calculate()で使えますか?
それとも、もしかしたら標準モジュールに書くのでしょうか?

うまく説明できていませんが、どなたか教えてください

いつもgooの皆さんに大変お世話になっております
マクロの勉強を初めて2ヶ月の者です

Private Sub Worksheet_Change(ByVal Target As Range)にマクロを書いているのですが
「特定のセル範囲が変更されたときに処理を実行する」は分かるのですが
特定のセル範囲が変更されなくても、例えば、セルの値がインストールされているアドインで
変化した時の処理はどこに書いたらいいのでしょうか?

今現在、H列のTarget.RowとJ列のTarget.Rowにはアドインで、機器の温度が表示されていますが
この2点の...続きを読む

Aベストアンサー

こんばんは。

今回の質問は、ご質問者さんには、別のイベントというか、紹介しましたね。その中に含まれていたかもしれません。

今回の件は、マクロを勉強して2ヶ月の人の話ではなく、3年やっても、5年やっても知らない人は知らないことで、かなりハイレベルというか、古めかしいというか、ほとんど知られていない技術だと思います。こういう話は、1冊の本にもなっています。本来、計測メーカー側の専門業者に頼んでしまったほうが早い気もします。たぶん、彼らは、公表はしていませんが、それ専用のVBA用のマクロを持っているはずです。

>特定のセル範囲が変更されなくても、例えば、セルの値がインストールされているアドインで
>変化した時の処理はどこに書いたらいいのでしょうか?

ふつうは、どこでもよいので、
=Now()
という式を書いて、
Private Sub Worksheet_Calculate()
に、イベントを拾わせるわけです。
しかし、少し、工夫が必要で、時々、これが困った動きをします。

Calculate のイベントが、ワークブック全体に働いてしまい、どこのシートを使っても、Calculateイベントが動いてしまいます。この方針で話が本格的になった時に、この対処法は、あらためて紹介します。

>(Worksheet_Change)のTarget.Row等の値はどうやったらPrivate Sub Worksheet_Calculate()で使えますか?

単に、モジュール変数を使って橋渡しするのか、それとも、同時で働くということなら、 Worksheet_Calculateのイベントでなくてもよいはずです。どのように使うのか、こちらではわかりかねます。本来、別の働きをするものです。もちろん、キーで入力した際は、Worksheet_Calculateのイベントは、起動します。

>Application.Speech.Speak "温度接近", True
>などどやりたいのですが、Private Sub Worksheet_Calculate()に書けばいいのでしょうか

ActiveX コントロールで入ってきた値が、どのように加わっていくのかにもよりますが、セルの位置は、Worksheet_Changeイベントのようにセルの位置は感知しませんから、インプットの場所が動いていくのでしたら、マクロで最後尾を探さなくてはなりません。

>それとも、もしかしたら標準モジュールに書くのでしょうか?
同様のコマンドで、標準モジュールに書く方法もあります。とても古い方法で、オブジェクト・ウィンドウにも出てこないはずです。しかし、まだ、同様の働きはしますが、今は、シートモジュールが主流になっています。

こんばんは。

今回の質問は、ご質問者さんには、別のイベントというか、紹介しましたね。その中に含まれていたかもしれません。

今回の件は、マクロを勉強して2ヶ月の人の話ではなく、3年やっても、5年やっても知らない人は知らないことで、かなりハイレベルというか、古めかしいというか、ほとんど知られていない技術だと思います。こういう話は、1冊の本にもなっています。本来、計測メーカー側の専門業者に頼んでしまったほうが早い気もします。たぶん、彼らは、公表はしていませんが、それ専用のVBA用の...続きを読む

QエクセルのPrivate Sub Worksheet_Change

エクセルのPrivate Sub Worksheet_Change

すいません。どうやっても動作しません。
シート1のB5のセルに英数字を入力しエンターを押して確定すると
シート2のC列から同レコードを検出し、その検出された行のB~E列の値を
シート1のH4、H5、H6、J7に値をかえします。
またB5の値はH8にも表示されます。
データがあった場合には、シート1のH4、H5、H6、J7に値が表示されています。
シート2にデータが無い場合はシート1のH4、H5、H6、J7には「#N/A」と表示されます。
ここまでは関数と計算式なのでマクロではありません。

ここでフォームで作成した「印刷ボタン」をクリックします。
すると「印刷ボタン」に登録したマクロが起動します。
シート1のセルG4~J11までが印刷されます。

マクロの内容は

シート1のH4に「#N/A」が表示されている場合はメッセージボックスで
「データがありません」と出ます。印刷は実行されません。

H4が「#N/A」以外の場合は印刷が実行されますがその前に
シート3のセルA1の数値をプラス1してシート3のB2に、セルA1の値の先頭にAを付けて
表示します。(セルA1が0002ならB1はA0002)
それがシート1のH12に表示されます。(H12への表示は計算式で対応)
印刷ボタンを押すごとにシート3のセルA1は1づつ繰り上がります。
シート1のH12の値が変わってから印刷がされます。
と同時に
シート1のセルB5がDELETEされセルB5がアクティブになります。
結果シート1のH4、H5、H6、J7、H8は「#N/A」が表示されます。
H12はクリアされません。
印刷終了後にもセルの値が変化する事になります。

もう一つフォームで作成した「初期化」というボタンがあります。
これをクリックするとマクロが起動して
シート1のセルB5がDELETEされセルB5がアクティブになります。
よってシート1のセルH4、H5、H6、J7、H8も「#N/A」に値が変わります。

ここまでは完璧に動作しています。
でこの「印刷ボタン」を押してマクロが起動ではなく
セルB5に入力しエンターを押したらマクロを起動させたいです。

Private Sub Worksheet_Change(ByVal Target As Range)
を利用しましたが動作しません。

シート1のB5のセルに入力しエンターを押すと
シート1の一部のセルの値が変化。
印刷ボタンを押すと、シート3の一部のセルの値が変化し
その後再びシート1のセルの一部が変化し印刷が開始され
その後シート1のセルB5がDELETEされアクティブに。
それに伴いシート1の一部のセルの値が変化する。
マクロが起動すると、シート1とシート3のセルの値が数回変化します。

このような場合はPrivate Sub Worksheet_Change(ByVal Target As Range)で
セルB5の入力後エンターで確定しての上記のマクロ起動は無理なのでしょうか?

エクセルのPrivate Sub Worksheet_Change

すいません。どうやっても動作しません。
シート1のB5のセルに英数字を入力しエンターを押して確定すると
シート2のC列から同レコードを検出し、その検出された行のB~E列の値を
シート1のH4、H5、H6、J7に値をかえします。
またB5の値はH8にも表示されます。
データがあった場合には、シート1のH4、H5、H6、J7に値が表示されています。
シート2にデータが無い場合はシート1のH4、H5、H6、J7には「#N/A」と表示されます。
こ...続きを読む

Aベストアンサー

application.EnableEvents = False
処理
application.EnableEvents = True
ちゃんと上記の様にしていますか?

EnableEvents入れてなかったらシート1の値変えた時点で
再度Changeイベントが頭から始まりますよ。
処理中にエラーになるとEnableEventsがFalseのままになり
イベントが発生しなくなるのでOn error gotoとか書いた方がいいですよ。
あとデバッグは覚えた方が良いと思います。

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

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

Aベストアンサー

#1、cjです。

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

失礼しました。


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

人気Q&Aランキング

おすすめ情報