[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『特定のパソコンだけが誤作動』(モリケン)
社内のサーバーに入っている自分で作ったマクロを組み込んだエクセルファイルをみんなで使用しています。内容は,入力作業を行った後にマクロボタンを押す。すると表示されている複数のワークシートに移動してそれぞれをCSVデータとして保存,最後にそのエクセルファイルを保存するという簡単なマクロで,1台のパソコン以外はすべて正常に保存するのですが,1台だけはそれぞれのワークシートが非表示にしている別のワークシートの内容で,名前は別々ですが内容は同じCSVデータとして保存されてしまいます。
他のパソコンではちゃんと動くのに特定のパソコンだけが誤作動が起こる事ってあるのでしょうか?もしかしてウィルスに感染したのでしょうか?
バージョンはExcel2007,WindowsXPです。よろしくお願いします。
特定のパソコン? 特定の人? 入れかえてみてどうでしょうか。
または、On Error Resume Nextを使用していませんか。 >ワークシートに移動して がエラーになっているのでは。 (semm)
ご返信ありがとうございます。
On Error Goto errHandler で下行に飛ばしてキャンセル処理をしています。
ただ、最初に書き込んでいませんでしたが、もともとそのパソコンでマクロを作成しサーバにアップしたファイルをみんなで使用しており、1ヶ月前まではちゃんとそのパソコンでも動いていたのです。環境も他のものとまったく同じです。環境の変化といえば先月県内で通しIPアドレスとして管理することになってIPアドレスを変更したことぐらいで、そのパソコンだけIE8にあげているぐらいです。
実際訳が分からずパニック状態です。
何かアドバイスがあればよろしくお願いします。
(モリケン)
まずは、VBEでブレークポイントを設定、ステップ実行するなどして、 どのコードで思い通りに実行できていないのか、特定しましょう。 私が思い当たるのはアプリケーションの破損で、 True,Falseという単なる論理値が認識できなくなった、という経験があります。 (Excel2000) そのときは、アプリケーションの修復で改善しましたけれども。 コードの問題ではなく、物理的な問題が原因であることもありますよ、ということです。 (みやほりん)(-_∂)b
ご返信ありがとうございます。
アプリケーションの破損ですか・・・可能性有りですね。
確認してみたいと思います。
(モリケン)
誤解があるかもしれないので念を押しておきますと、大事なのは アプリの破損はごく稀な可能性であって、修復を試みるより先にすることは、 >まずは、VBEでブレークポイントを設定、ステップ実行するなどして、 >どのコードで思い通りに実行できていないのか、特定しましょう。 です。 実行している(そしてエラーになっている)コードがわからないのでは、 あてずっぽうの答えしか、返せませんので。 (みやほりん)(-_∂)b
ありがとうございます。
マクロ自体は間違っていないと思います。実際ステップ実行での動きとしてはワークシートに移動して保存までして終了するこちらの意図通りの動きをします。ただ,その保存データが違うワークシートの内容だということです。他のパソコンではすべてうまくいくのでなんでこんな事になるのかがわかりません。今度Windows7が入るので,それでやってみたいと思います。
(モリケン)
誤動作するデータで、ほかのPCでは正常にいくのですか。 逆に、正常にいくPCのデータでも特定のPCでは誤動作するのですか。 データに対する考慮不足の顕在化かな、と。 (semm)
>ワークシートに移動して >違うワークシートの内容だということです。 ワークシートをアクティブにしても、コードがそのように書かれていなければ 違う結果が出ます。「違うシート」まで特定できているのであれば、 コードそのものがそうなるように書かれている可能性があります。 シートの特定や保存部分にかかわるコードを一度UPしてはいかがでしょう。 これ以上はコードを開示しないと可能性の話にしかならないと思われます。 (みやほりん)(-_∂)b
ご返信ありがとうございました。つたないマクロですが入力内容はこうのようになっています。それぞれ保存するCSVデータの名前は別のワークシートにつけています。
Sub ボタン3_Click()
'
' ボタン3_Click Macro
'
'
Range("A1").Select Sheets("説明画面").Select Range("A1").Select On Error GoTo errHandlerexcel ActiveWorkbook.SaveAs Filename:=ActiveWorkbook.Path & Worksheets("説明画面").Range("K1"), FileFormat _ :=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:= _ False, CreateBackup:=False Range("A1").Select Worksheets(3).Select Range("A1").Select On Error GoTo errHandler If Worksheets("説明画面").Range("J11") = False Then ActiveWorkbook.SaveAs Filename:=ActiveWorkbook.Path & Worksheets("説明画面").Range("J1"), FileFormat _ :=xlCSV, CreateBackup:=False End If Worksheets(4).Select Range("A1").Select On Error GoTo errHandler If Worksheets("説明画面").Range("J12") = False Then ActiveWorkbook.SaveAs Filename:=ActiveWorkbook.Path & Worksheets("説明画面").Range("J2"), FileFormat _ :=xlCSV, CreateBackup:=False End If Sheets("説明画面").Select Range("A1").Select On Error GoTo errHandler ActiveWorkbook.SaveAs Filename:=ActiveWorkbook.Path & Worksheets("説明画面").Range("K1"), FileFormat _ :=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:= _ False, CreateBackup:=False Range("A1").Select Exit Sub errHandlerexcel: MsgBox "保存がキャンセルされました。作業をもういちどやり直してください。" Exit Sub errHandler: Sheets("入力画面").Select Range("A1").Select MsgBox "保存がキャンセルされました。このEXCELファイルは一旦終了します。ふたたび開いて入力を確認し、「CSV処理&保存」のボタンをもう一度押し直して、問題なければ上書き確認は全て「はい」をクリックしてください。" ActiveWorkbook.Saved = True ActiveWorkbook.Close End Sub
本当は途中CSVデータ保存の繰り返しはあと7回あるのですが長くなるのでカットしています。ただ1ヶ月前までは、このPCで作成して動作も確認しているのです。
ご指導よろしくお願いします。
(モリケン)
Worksheets(3).Select ActiveWorkbook.SaveAs Filename:=ActiveWorkbook.Path & Worksheets("説明画面").Range("J1"), FileFormat _ :=xlCSV, CreateBackup:=False Worksheets(4).Select ActiveWorkbook.SaveAs Filename:=ActiveWorkbook.Path & Worksheets("説明画面").Range("J2"), FileFormat _ :=xlCSV, CreateBackup:=False 今回検証する部分は上記の4ステートメントです。 ここで確認すべきは、ActiveWorkbook.Path とはどこになるのか。 Worksheets("説明画面").Range("J1") Worksheets("説明画面").Range("J2") はそれぞれ何が書かれているのか、ということになります。 上記J1,J2セルにはCSVのファイル名となるべき値が記入されていると 推測できますが、「ファイル名だけ」が記入されている場合は、 ActiveWorkbook.Path & "\" & Worksheets("説明画面").Range("J1") という書き方が順当、ということになります。 J1が「\」から始まる文字列であれば、問題ありませんが、 J1の値によってはとんでもないところに保存されます。 ActiveWorkbook.Path = "C:\TEMP\2010" というパスである。 Worksheets("説明画面").Range("J1") = 20100306 と書かれている。 上記のコードを実行した場合は保存されるフルパスファイル名は C:\TEMP\201020100306.CSV つまり、ActiveWorkbook.Pathの一段階上のフォルダに201020100306.CSV というファイル名で保存される、という結果になるかと思われます。 Worksheets(3).Select Debug.Print ActiveWorkbook.Path & Worksheets("説明画面").Range("J1") Worksheets(4).Select Debug.Print ActiveWorkbook.Path & Worksheets("説明画面").Range("J2") このようなコードで、イミディエイトウィンドウに取得される文字列が 適正なファイル名か確認してみてください。 (みやほりん)(-_∂)b
ご返信ありがとうございます。
Worksheets("説明画面").Range("J1")等には \○○(ファイル名).csv と入力しており、間違いは考えられないと思います。他のパソコンでは動いていて、このパソコン自身でも1ヶ月前までは動いていて、急におかしくなる理由がわかりません。再インストールしようとは思っていますが、少し悔しい気がしています。(涙)
(モリケン)
>本当は途中CSVデータ保存の繰り返しはあと7回あるのですが長くなるのでカットしています。 では、ひとまず 検証の為にも 問題の起きる部分の保存だけのコードにして 試して見られては?
(HANA)
ActiveWorkbook.Path はネットワーク上でしょうか。 その場所へファイルを書き込みできる権限が無くなってはいませんか。 手動でその場所にファイルを作成する事が出来るか確認してみるのも良いかと思います。 (ご近所PG)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.