Excel VBA質問箱 IV

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

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


3649 / 13644 ツリー ←次へ | 前へ→

【60913】VBAと反れるかもしれません・・・ むーたん 09/3/24(火) 10:19 質問[未読]
【60914】Re:VBAと反れるかもしれません・・・ neptune 09/3/24(火) 10:43 発言[未読]
【60916】Re:VBAと反れるかもしれません・・・ むーたん 09/3/24(火) 11:06 質問[未読]
【60920】Re:VBAと反れるかもしれません・・・ neptune 09/3/24(火) 13:26 発言[未読]
【60919】Re:VBAと反れるかもしれません・・・ stream 09/3/24(火) 13:07 回答[未読]
【60921】Re:VBAと反れるかもしれません・・・ neptune 09/3/24(火) 13:29 発言[未読]
【60935】Re:VBAと反れるかもしれません・・・ Yuki 09/3/25(水) 15:35 発言[未読]
【60949】Re:VBAと反れるかもしれません・・・ むーたん 09/3/26(木) 15:06 お礼[未読]

【60913】VBAと反れるかもしれません・・・
質問  むーたん  - 09/3/24(火) 10:19 -

引用なし
パスワード
   すみません、VBAと反れるとは思いますが、ご教授いただきたく思います。
現在、エクセルオープンと同時に実行されるよう、マクロを記述し、
そのエクセルのオープンをVBSで記述して実行させています。
昨日、VBSをwindowsの機能「タスク」というものに登録して時間になったら
プログラムを実行させるようにしたのですが、
エクセルに記述しているマクロ内でエラーになり、デバックを中断しましたが、
そのあとマクロを記述しているエクセルを開こうとすると、
「エクセルファイルが他に開かれているため、読み取り専用で開きますか?」
などといったようなメッセージが出て、そのエクセルが閉じられません。
おそらくエラーによってVBSプログラムが中断され、そのあと閉じることが
できない状態、というのはわかっているのですが・・・
どのように対処したらよいかわからず困っています。
今は、一応同じ内容で別にエクセルを作り、そちらに回避させる方法で
何とかなっています。
具体的にプログラム内容など掲載したほうがわかりやすいですか?
本題とはそれますがすみませんがご教授ください。

※ちなみに、そのエクセルファイルを削除しようとしましたが、
 他に使用しているので削除できません・・と出ました。
 (当然だと思いますが)

【60914】Re:VBAと反れるかもしれません・・・
発言  neptune  - 09/3/24(火) 10:43 -

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

一番最初の対処方法としては、
確か作業ファイルがオープンしようとしたBookと同じディレクトリに
作成されたと思います。
O/Sを再起動して、その作業ファイルを削除します。
(取り敢えずは、Bookではありません。)

次に、開こうとしたVBSファイルか、BookでのOpenイベント、
もしくはautoopenプロシージャを直します。

何が悪いのかは、プログラムを掲載すると誰かが不都合を指摘してくれる
と思います。・・・具体的には見なければわかりませんからね。

【60916】Re:VBAと反れるかもしれません・・・
質問  むーたん  - 09/3/24(火) 11:06 -

引用なし
パスワード
   ▼neptune さん:
回答ありがとうございます。

いくつかお伺いしたいのですが・・・
使用していパソコン(サーバー)は、ちょっと理由があり簡単に再起動する
ことができません(常時接続端末のため)
それでこの端末が、1週間に1回自動で電源が落ちるようになっているため、
そのときにエクセル等開いているとなると正常に電源が落ちないのでは・・・
という不安があります。
申し訳ないのですが以下にプログラム内容を記載しようと思うので、
もしよろしければ何かご教授いただけないでしょうか。
よろしくお願いします。

エクセルオープンのVBS↓

Option Explicit
On Error Resume Next
Dim objExcel
Dim str_FileName
Dim objFile
Dim objF
Dim str_ExcelFile
const ForWriting = 2

'ファイルオープン
  str_FileName = "ログテキストファイルの場所・ログファイル名"
  Set objFile = WScript.Createobject("Scripting.FileSystemObject")
  Set objF = objFile.OpenTextFile(str_FileName,ForWriting,True)
  If Err.Number <> 0 Then
    MsgBox "LogFile Open Error :" & Err.Description
    sub_EndProc()
    WScript.Quit
  End If
'logファイルに日付書き込み
  objF.Write Now & vbCrLf
  If Err.Number <> 0 Then
    MsgBox "LogFile Write Error :" & Err.Description
    sub_EndProc()
    WScript.Quit
  End If

'Excelオブジェクト作成
  set objExcel = WScript.CreateObject("Excel.Application")
  If Err.Number <> 0 Then
    MsgBox "Excel Create Error :" & Err.Description
    sub_EndProc()
    WScript.Quit
  End If


'Excelワークブックオープン
  str_ExcelFile = "エクセルファイルの場所・エクセル名"
  objExcel.Workbooks.Open str_ExcelFile
  If Err.Number <> 0 Then
    MsgBox "Excel Open  Error :" & Err.Description
    sub_EndProc()
    WScript.Quit
  End If
  With objExcel
    .Visible = false
    .DisplayAlerts = true
  End With
  objExcel.Workbooks.Close
'logファイルに終了書き込み
  objF.Write str_ExcelFile & " 終了" & vbCrLf
  If Err.Number <> 0 Then
    MsgBox "LogFile Write Error :" & Err.Description
    sub_EndProc()
    WScript.Quit
  End If

'logファイルに終了書き込み
  objF.Write str_ExcelFile & " 終了" & vbCrLf
  If Err.Number <> 0 Then
    MsgBox "LogFile Write Error :" & Err.Description
    sub_EndProc()
    WScript.Quit
  End If

'logファイルに終了書き込み
  objF.Write Now & " end" & vbCrLf
  sub_EndProc()
  WScript.Quit

Sub sub_EndProc()
  If IsObject(objExcel) Then
    objExcel.Quit
    set objExcel = Nothing
  End If
  If IsObject(objF )  Then
    objF.Close
    set objF = Nothing
  End If
  If IsObject(objFile) Then set objFile = Nothing
End Sub

以上で、タスクに登録して実行したところ、
Excelワークブックオープン のところでエクセルをオープンし、
マクロを実行させるようになっているのですが、
このときエクセルのマクロでエラーが起き、デバックして中断させたのですが、
そのエラーのプログラムを消しても、上書き保存されず、別名で保存しますか?
というメッセージが出ます。
キャンセルして閉じてそのエクセルを開こうとすると、他に開いているので
読み取り専用で開きますか?と聞かれます。
ちなみにログファイルもオープンされたままでしたので、もう一度VBSを
起動させると「ログファイルオープンエラー」のメッセージが出てきたので、
新たにログファイルをクローズするのみのプログラムを作成し実行、
そのログファイルは削除してしまいました。

すみません、こんな感じでどうでしょうか?
初心者で勉強不足で申し訳ありません・・
よろしくお願いします。

【60919】Re:VBAと反れるかもしれません・・・
回答  stream  - 09/3/24(火) 13:07 -

引用なし
パスワード
   >「エクセルファイルが他に開かれているため、読み取り専用で開きますか?」
>などといったようなメッセージが出て、そのエクセルが閉じられません。
>おそらくエラーによってVBSプログラムが中断され、そのあと閉じることが
>できない状態、というのはわかっているのですが・・・
>どのように対処したらよいかわからず困っています。

非表示エクセルの閉じ方
タスクマネージャを起動し、プロセスタブのEXCEL.EXEを終了させる。

とにかくエラーをつぶさないと使いのもにならないでしょうから、
まずExcelオブジェクトを作成したら、表示させてデバッグを行うのがいいでしょう。そして完成したら非表示にもどす。

【60920】Re:VBAと反れるかもしれません・・・
発言  neptune  - 09/3/24(火) 13:26 -

引用なし
パスワード
   ▼むーたん さん:
こんにちは

削除の方ですが、
使ったことはないんですが、
Scripting ランタイム ライブラリ
DeleteFile メソッド
ht tp://msdn.microsoft.com/ja-jp/library/cc427994.aspx
が使えませんかね?
force 引数をtrueにすると読み取り専用ファイルも削除できるかも?
でもExcelでそのファイルを掴んでたら駄目かも??
試してみる価値はあるかもしれません。

次に、ソースのほうは良く見てないんですが、
>Excelワークブックオープン のところでエクセルをオープンし
objExcel.Workbooks.Open str_ExcelFile
ここですか?
ここでExcel側でトラップできないエラーが出たということですね。


>このときエクセルのマクロでエラーが起き、デバックして中断させたのですが、
とありますので、
エクセルのマクロは作成時どうやって正常又は希望通りに動作すること
を確認しましたか?

これだけのスクリプトソース書けるんですから、結構経験あると
思いますけど。。。
Excel側の処理が問題かもしれませんね?

【60921】Re:VBAと反れるかもしれません・・・
発言  neptune  - 09/3/24(火) 13:29 -

引用なし
パスワード
   ▼stream さん:
こんにちは
>>「エクセルファイルが他に開かれているため、読み取り専用で開きますか?」
>非表示エクセルの閉じ方
このときは前のプロセスが残ってるんですか。知らんかったです。

【60935】Re:VBAと反れるかもしれません・・・
発言  Yuki  - 09/3/25(水) 15:35 -

引用なし
パスワード
   ▼むーたん さん:
>すみません、VBAと反れるとは思いますが、ご教授いただきたく思います。
>現在、エクセルオープンと同時に実行されるよう、マクロを記述し、
>そのエクセルのオープンをVBSで記述して実行させています。
>昨日、VBSをwindowsの機能「タスク」というものに登録して時間になったら
>プログラムを実行させるようにしたのですが、
>エクセルに記述しているマクロ内でエラーになり、デバックを中断しましたが、
>そのあとマクロを記述しているエクセルを開こうとすると、
>「エクセルファイルが他に開かれているため、読み取り専用で開きますか?」
>などといったようなメッセージが出て、そのエクセルが閉じられません。

こんにちは。
対処1としてExcel側でエラールーチンで逃がす。
On Error Resume Next とか
On Error Goto XXXXXX とかです。

対処2としてVBS側でGetObject(エクセルファイルの場所・エクセル名)
で開き閉じます。

'ExcelオブジェクトOpenCheck
  str_ExcelFile = "エクセルファイルの場所・エクセル名"
  Set objExcel = GetObject(str_ExcelFile)
  objExcel.Applicaiton.Quit
  Set objExcel = Nothing
  Err.Clear
  
'Excelオブジェクト作成  の前に↑を追加
で、駄目だったらチェック用のエクセルを作成して
それを走らせてから,このVBSを走らせる。

チェック用のエクセルはAPIを使用するからVBSで書けないため
に作成
FindWindowやEnumWindow等でExcelのプロセスを取得して
終了させる。という流れですね。

【60949】Re:VBAと反れるかもしれません・・・
お礼  むーたん  - 09/3/26(木) 15:06 -

引用なし
パスワード
   お礼が遅くなり、本当にすみません。
皆さんたくさんの回答本当にありがとうございました。

結論から申し上げますと、
stream様に頂いたご回答を採用させていただき、一応問題は解決しました。

ただYuki様・neptune様のご回答にもありますように、
VBSに命令を追加して回避する方法も非常に勉強になりましたので、
理解しつつ進めてみましたが、わからない点が多くもう少し理解が
必要なようです。本当にすみません。

実はサンプルでVBSの資料があり、
それを使ってマクロを動かしてみたのですが、VBSで開いたexcelのマクロに
問題がありました。(マクロのエラーは解決しました)
VBSについてはサンプルを使っているので、正直言うと
知識全くゼロに等しい状況でした。(すみません)
これを機会に少し知識を深めたいと思います。

こんな自分に、たくさんの回答を頂いて本当にありがとうございました。

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