Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1319 / 13645 ツリー ←次へ | 前へ→

【75089】エクセルファイルのデスクトップへの移動 ggg 13/12/10(火) 15:28 質問[未読]
【75095】Re:エクセルファイルのデスクトップへの移動 γ 13/12/10(火) 19:48 発言[未読]
【75098】Re:エクセルファイルのデスクトップへの移動 ggg 13/12/11(水) 7:01 質問[未読]
【75104】Re:エクセルファイルのデスクトップへの移動 γ 13/12/11(水) 20:28 発言[未読]
【75105】Re:エクセルファイルのデスクトップへの移動 ggg 13/12/11(水) 22:55 質問[未読]
【75106】Re:エクセルファイルのデスクトップへの移動 γ 13/12/11(水) 23:10 発言[未読]
【75108】Re:エクセルファイルのデスクトップへの移動 ggg 13/12/12(木) 7:33 質問[未読]
【75109】Re:エクセルファイルのデスクトップへの移動 γ 13/12/12(木) 7:51 発言[未読]
【75110】Re:エクセルファイルのデスクトップへの移動 ggg 13/12/12(木) 9:03 質問[未読]
【75113】Re:エクセルファイルのデスクトップへの移動 γ 13/12/12(木) 20:02 発言[未読]
【75114】Re:エクセルファイルのデスクトップへの移動 ggg 13/12/12(木) 20:09 質問[未読]
【75115】Re:エクセルファイルのデスクトップへの移動 γ 13/12/12(木) 20:17 発言[未読]
【75118】Re:エクセルファイルのデスクトップへの移動 ggg 13/12/12(木) 21:09 質問[未読]
【75119】Re:エクセルファイルのデスクトップへの移動 γ 13/12/12(木) 21:53 発言[未読]
【75120】Re:エクセルファイルのデスクトップへの移動 ggg 13/12/12(木) 22:06 質問[未読]
【75121】Re:エクセルファイルのデスクトップへの移動 γ 13/12/12(木) 22:23 発言[未読]
【75122】Re:エクセルファイルのデスクトップへの移動 ggg 13/12/12(木) 22:48 お礼[未読]

【75089】エクセルファイルのデスクトップへの移動
質問  ggg  - 13/12/10(火) 15:28 -

引用なし
パスワード
   C:にあるフォルダ[testFD]のファイル[a.xls] をデスクトップに移動し[a.xls]を閉じるタイミングで元のフォルダ[testFD]に戻すプログラムを次の通り作成しました。どこが不具合なのか分からないのですがこのプログラムでは[a.xls]が閉じずに意図した作動になりません。ご教示のほどよろしくお願いします。


test.xls
Module1:デスクトップの移動と戻し

Option Explicit

Const myHolderName = "C:\testFD\"
Public dsktopPath As String

Public Sub Pathdsktop()
'DeskTop Pathを取得する
Dim WSH As Variant
Set WSH = CreateObject("Wscript.shell")
dsktopPath = WSH.specialfolders("DeskTop") & "\"
End Sub

Public Sub MoveMyfile(myname)

 'フォルダtestFD"C:\testFD\")のExcelファイルを
 'DeskToに移動する

Dim moveFile As String, motoFile As String, msg1 As String

 Pathdsktop
 moveFile = dsktopPath & myname
 motoFile = myHolderName & myname
 
If Dir(moveFile) = "" Then '"byotoname"がデスクトップない時
  Name motoFile As moveFile
  Workbooks.Open moveFile
  MsgBox myname & " は開かれましたよ! "
Else
 '"byotonameがデスクトップに移動済
  msg1 = myname & "は開かれていますよ!"
  MsgBox msg1 
End If
End Sub


Public Sub CloseMyfile(myname)

'DeskToに移動に移動したのExcelファイを操作した後
'元のフォルダtestFDに移動する

Dim moveFile As String, motoFile As String, msg3 As String

Pathdsktop
moveFile = dsktopPath & myname '
motoFile = myHolderName & myname '

On Error GoTo dbg:

Name moveFile As motoFile
 
msg3 = "お疲れさまでした〜" 
MsgBox msg3
Unload UserForm2

Exit Sub

dbg:

  msg3 = myname & "は閉じられていませんよ!"
  MsgBox msg3
  Unload UserForm2 
End Sub

test.xls
userform2
a.xlsの開閉


Option Explicit

Private Sub CommandButton2_Click() 'Open
Dim myname As String
myname = "a.xls"
MoveMyfile myname
Unload Me

ThisWorkbook.Close
End Sub

Private Sub CommandButton12_Click() 'Close
 Dim myname As String
 myname = "a.xls" '
 CloseMyfile myname

 ThisWorkbook.Close
End Sub

a.xls
ThisWorkbook

Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)

 Dim moveFD As String, byotoname As String
 
 moveFD = "C:\testMove\"
 Workbooks.Open moveFD & "test.xls"
 
 MsgBox "[a-Close]ボタンをクリックして下さい"
 
 ThisWorkbook.Save

End Sub

【75095】Re:エクセルファイルのデスクトップへの...
発言  γ  - 13/12/10(火) 19:48 -

引用なし
パスワード
   現在開いているファイルを移動することはできないと思います。

【75098】Re:エクセルファイルのデスクトップへの...
質問  ggg  - 13/12/11(水) 7:01 -

引用なし
パスワード
   ▼γ さん:
>現在開いているファイルを移動することはできないと思います。

rさん:
早速のご回答ありがとうございました。
開いてるファイル移動不可能は理解してますがなぜ [a.xls]のイベントBeforeCloseが作動して[a.xls]が閉じないのでしょうか
なお当方が意図する処理を可能にするためにはコードのどこをどのようにすれば良いのかご教示頂ければ幸いに思います。

【75104】Re:エクセルファイルのデスクトップへの...
発言  γ  - 13/12/11(水) 20:28 -

引用なし
パスワード
   ▼ggg さん:
>開いてるファイル移動不可能は理解してますが
それは失礼しました。

>なぜ [a.xls]のイベントBeforeCloseが作動して[a.xls]が閉じないのでしょうか
どこのコードで[a.xls]を閉じていますか?教えてください。

>なお当方が意図する処理を可能にするためにはコードの
>どこをどのようにすれば良いのか
まずは実態を良く把握することではないですか?
ステップ実行して、どの行で何が実現されているかをよく確認して下さい。
自動実行マクロの場合は、途中にStopを入れて、それ以降ステップ実行すると
デバッグができますよね。

【75105】Re:エクセルファイルのデスクトップへの...
質問  ggg  - 13/12/11(水) 22:55 -

引用なし
パスワード
   ▼γ さん:

>どこのコードで[a.xls]を閉じていますか?教えてください。

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

次のコードで閉じようとしましたが
Workbooks.Open moveFD & "test.xls" に移った後にこのコード
のEnd Subに辿り着かないのです。

Private Sub Workbook_BeforeClose(Cancel As Boolean)

 Dim moveFD As String, byotoname As String
 
moveFD = "C:\testMove\"
 Workbooks.Open moveFD & "test.xls"
 
 MsgBox "[a-Close]ボタンをクリックして下さい"
 
 ThisWorkbook.Save

End Sub

【75106】Re:エクセルファイルのデスクトップへの...
発言  γ  - 13/12/11(水) 23:10 -

引用なし
パスワード
   ▼ggg さん:
>次のコードで閉じようとしましたが
次のコードというのは、
>Private Sub Workbook_BeforeClose(Cancel As Boolean)
のことでしょうか。
これは、閉じる動作がされたときに動くものですね。

私がお聞きしているのは、
  [a.xls]を閉じる処理をどこでされているのですか?
ということです。

【75108】Re:エクセルファイルのデスクトップへの...
質問  ggg  - 13/12/12(木) 7:33 -

引用なし
パスワード
   ▼γ さん:

>私がお聞きしているのは、
>  [a.xls]を閉じる処理をどこでされているのですか?
>ということです。

大変失礼しました。
[a.xls]を閉じる処理は[a.xls]の右上端の閉じるアイコン(×)で行っています。

【75109】Re:エクセルファイルのデスクトップへの...
発言  γ  - 13/12/12(木) 7:51 -

引用なし
パスワード
   >[a.xls]を閉じる処理は[a.xls]の右上端の閉じるアイコン(×)で行っています。

了解しました。

> Workbooks.Open moveFD & "test.xls" に移った後にこのコード
> のEnd Subに辿り着かないのです。
それは本当ですか。
冒頭にStopを挿入して、その後ステップ実行したら何か原因が判りませんか?

【75110】Re:エクセルファイルのデスクトップへの...
質問  ggg  - 13/12/12(木) 9:03 -

引用なし
パスワード
   ▼γ さん:
すみませんがstopってどこの冒頭に入れたらいいのでしょうか?

【75113】Re:エクセルファイルのデスクトップへの...
発言  γ  - 13/12/12(木) 20:02 -

引用なし
パスワード
   ▼ggg さん:
>▼γ さん:
>すみませんがstopってどこの冒頭に入れたらいいのでしょうか?

Private Sub Workbook_BeforeClose(Cancel As Boolean)
 Dim moveFD As String, byotoname As String

 Stop 
 moveFD = "C:\testMove\"
 Workbooks.Open moveFD & "test.xls"
 MsgBox "[a-Close]ボタンをクリックして下さい"
 ThisWorkbook.Save
End Sub
ということではないですか?
BeforeCloseイベントプロシージャが予定どおり実行されているかを
確かめたいわけですよね。違いましたか?

# 何分、インデントが正確につけられていないので、
# 十分に読んでいませんでした。

【75114】Re:エクセルファイルのデスクトップへの...
質問  ggg  - 13/12/12(木) 20:09 -

引用なし
パスワード
   ▼γ さん:
>Private Sub Workbook_BeforeClose(Cancel As Boolean)
> Dim moveFD As String, byotoname As String
>
> Stop 
> moveFD = "C:\testMove\"
> Workbooks.Open moveFD & "test.xls"
> MsgBox "[a-Close]ボタンをクリックして下さい"
> ThisWorkbook.Save
>End Sub

>ということではないですか?
>BeforeCloseイベントプロシージャが予定どおり実行されているかを
>確かめたいわけですよね。違いましたか?

お手数をおかけして恐縮です。
ご教示のとおりStopを入れてBeforeCloseイベントプロシージャを確かめましたが
うまく行かず原因が不明です。

【75115】Re:エクセルファイルのデスクトップへの...
発言  γ  - 13/12/12(木) 20:17 -

引用なし
パスワード
   ▼ggg さん:
>ご教示のとおりStopを入れてBeforeCloseイベントプロシージャを確かめましたが
>うまく行かず原因が不明です。
うまくいかないだけでは説明が不足しています。
そこで止まったのですか?
止まったのであれば、そのイベントプロシージャが起きることは
確認できたわけですね。

その後で、ステップ実行したら、どうなるのですか?
F8 キーを押すたびに、コードの一行が実行されるはずです。
その後の状況を説明ください。

【75118】Re:エクセルファイルのデスクトップへの...
質問  ggg  - 13/12/12(木) 21:09 -

引用なし
パスワード
   ▼γ さん:

>その後で、ステップ実行したら、どうなるのですか?

BeforeCloseイベントの
 
 moveFD = "C:\testMove\"
 Workbooks.Open moveFD & "test.xls"
 MsgBox "[a-Close]ボタンをクリックして下さい"
 MsgBox のところまで実行されますがそのあとEnd まで行きません。

【75119】Re:エクセルファイルのデスクトップへの...
発言  γ  - 13/12/12(木) 21:53 -

引用なし
パスワード
   ▼ggg さん:
>▼γ さん:
>
>>その後で、ステップ実行したら、どうなるのですか?
>
>BeforeCloseイベントの
> 
> moveFD = "C:\testMove\"
> Workbooks.Open moveFD & "test.xls"
> MsgBox "[a-Close]ボタンをクリックして下さい"
> MsgBox のところまで実行されますがそのあとEnd まで行きません。

MsgBoxが表示されて、OKボタンを押すと次の、
ThisWorkbook.Save(マクロの書かれたブックが保存される)
が実行されて終了。
これが想定された動きだと思います。

それが、どうなってしまうのか、それを説明してください。

【75120】Re:エクセルファイルのデスクトップへの...
質問  ggg  - 13/12/12(木) 22:06 -

引用なし
パスワード
   ▼γ さん:
>それが、どうなってしまうのか、それを説明してください。

大変しつれいしました。説明不足でした。
デスクトップに移動したa.xlsが開いたままなので元のフォルダに移動できないエラーが発生しそれがエラートラップでa.xlsが閉じてないというメッセージが出て終了してしまいます。うまく説明できませんが
 

【75121】Re:エクセルファイルのデスクトップへの...
発言  γ  - 13/12/12(木) 22:23 -

引用なし
パスワード
   ▼ggg さん:
>▼γ さん:
>>それが、どうなってしまうのか、それを説明してください。
>
>大変しつれいしました。説明不足でした。
>デスクトップに移動したa.xlsが開いたままなので元のフォルダに移動できないエラーが発生しそれがエラートラップでa.xlsが閉じてないというメッセージが出て終了してしまいます。うまく説明できませんが
> 
何かよくわかりませんが、
いずれにしても、イベントプロシージャを使わずに、
マクロで普通に閉じてから、必要な移動処理をしたらどうですか?

【75122】Re:エクセルファイルのデスクトップへの...
お礼  ggg  - 13/12/12(木) 22:48 -

引用なし
パスワード
   ▼γ さん:
>いずれにしても、イベントプロシージャを使わずに、
>マクロで普通に閉じてから、必要な移動処理をしたらどうですか?

大変お手数をおかけしました。
もう一度最初から考えてみます。色々とありがとうございました。

1319 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free