Excel VBA質問箱 IV

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

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


11644 / 13646 ツリー ←次へ | 前へ→

【14939】IF条件にて終了させたい ウシロメタさ 04/6/10(木) 19:53 質問[未読]
【14944】Re:IF条件にて終了させたい [名前なし] 04/6/11(金) 1:17 回答[未読]
【14945】Re:IF条件にて終了させたい あわびが旬 04/6/11(金) 5:36 お礼[未読]
【14946】Re:IF条件にて終了させたい ウシロメタさ 04/6/11(金) 8:26 お礼[未読]
【14948】Re:IF条件にて終了させたい ちゃっぴ 04/6/11(金) 11:28 発言[未読]
【14956】Re:IF条件にて終了させたい ウシロメタさ 04/6/11(金) 18:58 発言[未読]
【14957】Re:IF条件にて終了させたい IROC 04/6/11(金) 20:09 回答[未読]
【14958】Re:IF条件にて終了させたい IROC 04/6/11(金) 20:11 回答[未読]
【14978】Re:IF条件にて終了させたい ウシロメタさ 04/6/12(土) 13:52 発言[未読]
【14979】Re:IF条件にて終了させたい つん 04/6/12(土) 14:33 発言[未読]
【14986】Re:IF条件にて終了させたい あわびが旬 04/6/12(土) 19:56 発言[未読]
【14987】Re:IF条件にて終了させたい ウシロメタさ 04/6/12(土) 19:58 発言[未読]
【14992】きゃー(>_<) ごめんなさい つん 04/6/12(土) 22:27 発言[未読]

【14939】IF条件にて終了させたい
質問  ウシロメタさ  - 04/6/10(木) 19:53 -

引用なし
パスワード
   下記コードにおいて
IF条件にて開いているブックを保存して終了させたいのですが
エクセル自体が残ってしまいます
いけないところをご教授ください

下記コードは
開いているブックを保存するときに
他のブックを開いてデータを転記するというものですが
他のブックが誰かに開かれていた場合
警告を出したうえで、ブックを保存し、
エクセル自体を終了させるというものです


Private Sub Workbook_BeforeClose(Cancel As Boolean)

UserForm7.Show vbmoderess
DoEvents


  Dim mBk As Workbook
  Dim i  As Long
  Dim j  As Variant
  Set mBk = _
    Workbooks.Open( _
      WorksheetFunction.Substitute(ThisWorkbook.Path, "保存フォルダー", "") & _
        "マスターファイル.xls", Password:="3434")
        
    If ActiveWorkbook.ReadOnly = True Then


  ActiveWorkbook.Close
 
  Unload UserForm7
 
 
  MsgBox "マスターファイルへ更新できませんでした。次回このファイルを閉じた時に更新します"


  ThisWorkbook.Save
  
      
   Application.Quit


  End If
        
    Exit Sub


  With ThisWorkbook.Worksheets("工事台帳")
    i = .Range("g2").Value
    j = Application.Match(i, mBk.Worksheets("マスター台帳").Range("c:c"), 0)
    If IsError(j) Then
      MsgBox "ファイル名無し"
      mBk.Close
      Exit Sub
    End If
    mBk.Worksheets("マスター台帳").Cells(j, 1).Value = .Range("e2").Value
    mBk.Worksheets("マスター台帳").Cells(j, 2).Value = .Range("f2").Value
    mBk.Worksheets("マスター台帳").Cells(j, 4).Value = .Range("e3").Value
    
    mBk.Worksheets("マスター台帳").Cells(j, 5).Value = .Range("e5").Value
    mBk.Worksheets("マスター台帳").Cells(j, 6).Value = .Range("n5").Value
    mBk.Worksheets("マスター台帳").Cells(j, 7).Value = .Range("n18").Value
    
    mBk.Worksheets("マスター台帳").Cells(j, 8).Value = .Range("h26").Value
    mBk.Worksheets("マスター台帳").Cells(j, 9).Value = .Range("h20").Value
    mBk.Worksheets("マスター台帳").Cells(j, 10).Value = .Range("h21").Value
    
    mBk.Worksheets("マスター台帳").Cells(j, 11).Value = .Range("h22").Value
    mBk.Worksheets("マスター台帳").Cells(j, 12).Value = .Range("h23").Value
    mBk.Worksheets("マスター台帳").Cells(j, 13).Value = .Range("h24").Value
    
    mBk.Worksheets("マスター台帳").Cells(j, 14).Value = .Range("h25").Value


  End With
  mBk.Save
  mBk.Close


Application.DisplayAlerts = False

ThisWorkbook.Save

Unload UserForm7
Application.Quit


End Sub

【14944】Re:IF条件にて終了させたい
回答  [名前なし]  - 04/6/11(金) 1:17 -

引用なし
パスワード
   >   Application.Quit

のまえに、Application.EnableEventsを加えてみてはどうですか?

 
>    Exit Sub

ちなみにこの後のコードは何なのでしょう?
絶対に走らないと思いますが・・・

【14945】Re:IF条件にて終了させたい
お礼  あわびが旬  - 04/6/11(金) 5:36 -

引用なし
パスワード
   名前なしさん レスありがとうございます

試してみます


>>    Exit Sub
>
>ちなみにこの後のコードは何なのでしょう?
>絶対に走らないと思いますが・・・

IF条件が成立すればExitSUB以降は
実行したくないのですが
どこかおかしいでしょうか?

【14946】Re:IF条件にて終了させたい
お礼  ウシロメタさ  - 04/6/11(金) 8:26 -

引用なし
パスワード
   ▼あわびが旬 >=ウシロメタさ です
会社のPCですので他人の投稿名でレスしちゃいました
ややこしくてすみません


ExitSub

End IF

の順に変えたらOKでした
ありがとうございます

【14948】Re:IF条件にて終了させたい
発言  ちゃっぴ  - 04/6/11(金) 11:28 -

引用なし
パスワード
   こういう処理をするとき、普通は

If 〜 Then

'処理1

Else

'処理2

End If

という風に行います。

【14956】Re:IF条件にて終了させたい
発言  ウシロメタさ  - 04/6/11(金) 18:58 -

引用なし
パスワード
   ▼ちゃっぴ さん こんばんは、
IF条件の使い方はわかっています

でもこの場合Else・・
としなくともプログラムは走ると思います
実際IF条件が満たされなかった時
以降のプログラムは実行されていますが・・

【14957】Re:IF条件にて終了させたい
回答  IROC  - 04/6/11(金) 20:09 -

引用なし
パスワード
   直接の回答ではありませんが、気になったので・・

>エクセル自体を終了させるというものです

というのは、他のブックで作業中のときを考慮しないのでしょうか?
いきなり終了してしまうと、使用者は不便だと思いますが・・

【14958】Re:IF条件にて終了させたい
回答  IROC  - 04/6/11(金) 20:11 -

引用なし
パスワード
   if文に関係なく
Exit Sub 
で終了してしまいますよ?

【14978】Re:IF条件にて終了させたい
発言  ウシロメタさ  - 04/6/12(土) 13:52 -

引用なし
パスワード
   ▼IROC さんこんにちは、
エクセルを終了させる=全てのブックを
終了させるという事ですが
このコマンドを使用する要件
つまりこのブックを使用しているときは
他のブックでの作業をしないよう徹底してもらっています
これは社内で使うある台帳のソフトなのです
この台帳を運用するにあたって
3つのブックを参照しながら記帳していくように作ってあります
その時にif条件にて 参照先のブックが開かれていたら・・
っていうようにしたのです
ExitSubはIF条件が成立した時にのみ実行されると
思いますし、その時にはmsgboxでその旨を促し
現在開いているブックを保存の上エクセルを終了させるようにしています

【14979】Re:IF条件にて終了させたい
発言  つん E-MAIL  - 04/6/12(土) 14:33 -

引用なし
パスワード
   みなさん、こんにちは
横から失礼します。

>ExitSubはIF条件が成立した時にのみ実行されると
>思いますし

いや、ウシロメタさんのコードでは、If文が成立しようが成立しまいが
Exit Subは成立します。
とりあえず、ここだけじっくり見られてはどうですか?

If ActiveWorkbook.ReadOnly = True Then

  ActiveWorkbook.Close
  Unload UserForm7
 
  MsgBox "マスターファイルへ更新できませんでした。次回このファイルを閉じた時に更新します"
    
  ThisWorkbook.Save
  Application.Quit

End If
    
Exit Sub

どー考えたって、Exit Subは、If文が終わってから通るんですから、
If文の判定には左右されないですよね?
If文の中に入れるか、If文内でフラグでもたてておいて、
さらに、If文を使ってExit Subで終了させるかどうか判定させないとダメですよね?

>このコマンドを使用する要件
>つまりこのブックを使用しているときは
>他のブックでの作業をしないよう徹底してもらっています

ということでしたら、最初に他のブックが開かれてるかどうか?
のチェックをいれてあげたらどうでしょう?
他にブックが開かれていれば、「閉じてください」して、
閉じるまで処理が出来ないようにすれば、完璧かと・・・・

【14986】Re:IF条件にて終了させたい
発言  あわびが旬  - 04/6/12(土) 19:56 -

引用なし
パスワード
   ▼つん さんこんばんは>


>いや、ウシロメタさんのコードでは、If文が成立しようが成立しまいが
>Exit Subは成立します。

途中のレスで

>Exit Sub

>End If

に変更した事を書いたつもりでしたが・・


>ということでしたら、最初に他のブックが開かれてるかどうか?
>のチェックをいれてあげたらどうでしょう?
>他にブックが開かれていれば、「閉じてください」して、
>閉じるまで処理が出来ないようにすれば、完璧かと・・・・

最初はそのように考えていましたが
それだとエラーになる確率が高いのです
(実際にはエラーになるのではなく保存の画面になってしまう)
複数人が同時にこのコマンドを実行する可能性が無いとも言えず
出来るだけエラーになる確率を減らしたいので
このようにしました
(複数人が同時にこのコマンドとは実際に運用するファイルを
ファイル名をちょっと変えて人数分作ってあります
おのおののファイルからこのコマンドを実行し
皆同じファイルを参照しにいきます
そうなるとエラーになる可能性があるのです)

【14987】Re:IF条件にて終了させたい
発言  ウシロメタさ  - 04/6/12(土) 19:58 -

引用なし
パスワード
   またやっちゃいました
あわびが旬>=ウシロメタさです

会社のPCを使った為の事です・・
スミマセン

【14992】きゃー(>_<) ごめんなさい
発言  つん E-MAIL  - 04/6/12(土) 22:27 -

引用なし
パスワード
   どもども

>途中のレスで
>
>>Exit Sub
>
>>End If

すんません。その通りでした。
ちゃんと最初から丁寧に読まずに途中参加してしまいました^^;

ということは、これはもう解決してるってことですね^^;
なんか続いてるから、まだダメなんかと思ってたわ(ちょっと言い訳〜)

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