最大1万円超分の電子書籍プレゼント♪

あるエクセルマクロが、特定のPCでのみエラーになります。
ソースを見ると以下の処理で引っかかっているようです。
「Debug.Print Err.Description」

正常動作してくれないのは「SurfacePro Corei7モデル、エクセル2016」です。
動作しないエクセルファイルをUSBメモリでフォルダまるごとコピーし、
別PCにコピーして実行すると動作しました。マクロは問題ないようです。

正常動作すると指定のフォルダにエクセル形式のデータを書き出す仕様になっています。
User名が日本語なのがいけないのかと思い、ユーザ名「test」で試しましたが駄目でした。
エクセルの2010で作成したマクロだから、2016でエラーが出るのかと思いましたが、
他のPCではエクセル2016で動作しているとの事(未確認)
エラーと言ってもVBA内の処理にてエラーメッセージが表示されているので開発者の想定しているエラーです。

情報不足で申し訳ありませんが、何か手がかりを頂けると助かります。

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

  • へこむわー

    本来であれば、ソース自体を提示するのがズバリ正確な質問となるのですが、
    細かい説明は割愛しますが、そのままソースを公開するにはリスクがあるため、
    情報不足前提ですが、
    聞かないよりは聞いた方が、何か手がかりがつかめたらと思って質問させていただいています。

    開発者から配布された、スキルの低いユーザから相談を受けた身ですので、
    私自身も解析する程のスキルがあるわけでもなく、私と開発者の接点はありません。
    最終的には、「開発者に問い合わせるしかない」と突き返すことになりますが、
    その前に何かできうることを探っている状態です。
    ご理解いただければ幸いです。

      補足日時:2018/05/21 11:42
gooドクター

A 回答 (12件中1~10件)

#10の回答者です。



「大袈裟な話ではないです^^;」
ちょっとザックバランに書かせていただきます。

私は、収入をOffice VBA開発では得てないので、アマには違いないけれども、ある程度の心得は存じているつもりです。

1)「マクロを実行した際の書き出し先は相対パス指定で、マクロの置いてあるフォルダ内にあるExcelフォルダに書き出す」
2)「もとのフォルダまるごと、別のPCのローカルディスクのどこにコピーして実行しても、
そのフォルダ内のExcelフォルダに書き出す」

どんなコードか分かりませんが、
「フォルダ内のExcelフォルダに書き出す」というのは、それが成立するのは、そのフォルダーの下位フォルダぐらいですが、時々、勘違いされる方がいるように思うのです。デフォルト・ファイルパス(default File path) は、ユーザーの任意のフォルダには優先しません。ここは大事です。よく間違える方がいます。では、なぜ下位フォルダは問題が少ないかというと、コードとして書かざるを得ないからです。

だから、お話のようには、今は、出口についてそう安易には決められないないのです。しかし、みなさん、デフォルトのままに入れるようにしているはずです。私は、あえてそれを嫌っています。タブレットもどきでは、なかなかそういうわけにもいきませんが。

最近になって、やっと、VBAのEnviron 関数の他に、Path の環境定数について学び始めました。VBAでは、あまり使えないことも多いのですが、それを無視もできなくなっています。

話を最初から戻します。

ご自身のコードではないということを前提ですが、
開発者の都合というものもあるけれども、常識の範囲で、「Debug.Print Err.Description」こんなことは書きません。
If Err<>0 Then
 MsgBox "Error " & Err.Number &": " & Err.Description
(システムの場合は、そこにプロシージャ名などを後に入れます)
End If
です。

そもそも、他人に手渡すコードに、Debug.Print がなぜあるのか、ということですね。

早い話、ユーザーに下駄を預けたコードは、秘匿性なんて守る必要なんてないと言いたくなるのですが。開発者どうしで、チェックしてもらうためには付けても、正真正銘のユーザーさんには出しません。

ユーザーさんに渡すコードの場合、特にシステムでは、エラー出力の仕方というのは、ちょっと工夫を凝らす必要があります(企業秘密というか、公開ははばかりますが。)
ユーザーさんにはVBAのモジュールを触らせないということも、「同一性(私が作ったものという意味)」が保たれないからです。「同一性」のないものは、責任の取りようがないのです。

もしかしたら、マクロの問題ではなく、機種固有の問題があるかもしれません。こうなるとバンザイになってしまいます。せめてエラーコードがあると話が早いのですが……。

・参照設定の基本事項
ところで、これは、ご存知ですか?初級や中級に入ったばかりの人は、まったく認識なかったりします。

●ツールのオプションの全般(開発者向け)
・エラートラップは、エラー処理対象外のエラーで中断 (クラスモジュールで中断:可)
・開発するので、私は以下を入れていますが、
  製品的には、「順次コンパイルを[OFF]」
  しかし、これは、前回で述べたように、私は、コードチェックのために、Compile をかけてる習慣があるから、[ON]にしているわけです。ただし、出来上がった段階では、ユーザーには関係がありません。
●オプション-保存
・規定のファイルの場所:(ここが、デフォルトファイルパス)
●セキュリティセンター・ファイル-オプション内(マクロ・ユーザー[開発者とは違います])
・信頼できる場所
 ここの処理をどうするか、インストラクターで安易に設定を勧める人がいますが、私は、公にはノーコメント。デフォルトならデフォルトのままとも言いたいのですが、最近は、UserのOneDrive になっています。プライベートでは、SSD ドライブ辺りがふさわしいかと思います。
・マクロの設定
 警告を表示してすべてのマクロを無効にする
 VBAプロジェクト オブジェクト モデルへのアクセスを信頼する(通常は[OFF])
・プライバシーオプション
 Office のインターネット接続を許可する [ON]

と、大雑把なところは、このようにすればいよかと思いますが、設定は意図的に変えても、Windows側のセキュリティ設定に優先されるので、大きな違いはありません。
こんなところかな。
    • good
    • 2
この回答へのお礼

ありがとうございます。
真剣に考えていただき感謝いたします。

まだ端末に触れる機会がないため進展はありません。
アドバイスいただいた内容を活用させていただきます。

お礼日時:2018/05/23 10:25

No.9です。



No.10さんの意見に同意したい部分はあります。
ブックの書き出しが出来ないと言う点で仮に『FileSystemObject』を使用していて且つ参照設定を使用している【Microsoft Scripting Runtime】が、
何かの拍子に外れているとも思えます。

ただこのまま質疑を繰り返して憶測で悩むよりかは、開発者に聞いてみた方が早く済んでしまうのではないかと思えてしまいますし、
担当者含め複数人で理由と対処法をキチンと聞く事は大切かなと。
    • good
    • 2
この回答へのお礼

ありがとうございます。
(話が逸れるので割愛しますが)開発者に聞く方が大変なので情報収集しています。

こちらは「質疑応答を繰り返して悩んでいる」という認識ではありません。
次回、直接端末に触れられるのがいつになるか分からないので、
その機会を無駄にしないよう、試せる確認事項を可能な限り集めている状態です。

今のところ集まった情報は下記の通りで、
・イミディエイトウィンドウの確認
・VBEの参照設定で「参照不可」になっているものがないか
・参照設定の基本事項
・『FileSystemObject』を使用していて且つ参照設定を使用している【Microsoft Scripting Runtime】が、何かの拍子に外れているかどうか

これらを試して何も見出せなかったら、「残念だけど開発者に聞くしかないわ、ごめんね」と突き放す事になります。
できるだけ解決してあげたいので情報収集している状態です。

お礼日時:2018/05/22 15:56

こんにちは。



もう、Weekday に入りましたので、少し口を挟ませていただきます。
ちょっと驚いているのは、「開発者に問い合わせるしかない」ということは、ご自身の開発したものではないというのですか?

すでに、重複する部分がありましたら、ご容赦ください。

厳しい事を言うようですが、ひと目みて、ある程度の経験があれば、自分と開発者の力量の差というものは分かります。その上で、即刻、判断すべきというか、力量の上の人のものには手を付けないという、自分自身のルールも必要かもしれません。

私の場合は、別なトラブルがありますが、基本的には他人のコードは、公になっているもの以外は、手をつけることはありません。

「SurfacePro Corei7モデル、エクセル2016」
私が同じ立場だったら、まず、直感的に、SurfacePro で、Office VBAマクロを動かすことに躊躇を感じてしまいます。Ms 商品のオレサマ度は、数ある製品の中でも、最高かもしれません。

まして、新品だという話では、なおさらで、何の調整もされていないのではないでしょうか。Excelで、VBAマクロでも、アドインでも、それを使うためには、ある程度のお膳立てが必要なのです。

まず、コードはオープンになっているわけですね。
ふつう、マクロがダメだという時に、参照設定の基本事項が×になっていることがあります。
・Visual Basic For Applications
・Microsoft Excel xx.0 Object Library (xx は数字)
・OLE Automation
・Microsoft Office xx.0 Object Library (xxは数字)

>データ書き出しまで完了できないため困っています。
もし、これだけの問題なら、書き出して良い場所かどうか、論理的仮想空間か、実体のあるHDDとかSSDとか、たぶん、デフォルト状態のままでは難しいということだけになります。

ふつう、私は、2種類のデバッグ方法を取ります。
まず、コードのどこで、どのような種類のエラーを吐き出しているか、チェック型のマクロに編集します。これは、私は、MZ-Toolsを利用しています。もちろん、On Error トラップを外して、Compile するのもよいのですが、Run Time エラーで、マイナス値のものはお手上げに近いです。

もうひとつは、スモールコードのシュミレーションです。その悪い部分の周辺を取り出して、それを単独のブックで独自に実行します。

こんなところでしょうか。
    • good
    • 0
この回答へのお礼

すみません、そういう大袈裟な話ではないです^^;

「開発者に聞くしかないです。」そう言って何もせずに突き放すのは可哀想なので
出来れば解決を、無理なら切り分けをしてあげたいと思ってます。

あと、PC毎に設定をしなければいけないような面倒な設計にはなってないそうです。
(つまりPCにエクセルをインストールさえすれば動くはず。)
それが特定のマシンにだけ動作しないので困っているわけで、どこを見てどう判断すれば良いか相談している次第です。

書き出し先については、No.9の回答の方で説明します。

ありがとうございました。

お礼日時:2018/05/22 14:30

No.8です。



>本来は指定フォルダに計算結果のエクセルファイルを書き出す仕様になっているようですが、
>「失敗しました。」というメッセージで出ました。

計算結果の基データがマクロを実行したファイルにあるとすれば、失敗は指定フォルダへのアクセス権が使用しているアカウントにない可能性も考えられます。
ネットワーク上への保存なら尚更アクセス権があやしそう。新品購入した後にそのPCからのアクセス許可設定を怠ったというミスは、こちらでは以前ありましたよ。

>私のPCのデスクトップにコピーして、同じ操作をしてみたところ、「成功しました。」で、エクセルファイルが生成されていました。

これは質問に書かれている『フォルダごと』のコピー(複数のBook或いはその他のファイルを含んでいる)なのか『マクロを実行したBookのみ』なのかでも
違ってくるでしょうね。

>私のPCは私自身、DBに接続するような設定は行っておらず、基本的に素の状態なのに正常動作しました。

DBへの接続についてはたまに私は回答してますが、参照設定を行なわずにマクロで呼び出す方法もあります。
重要なのはマクロ実行Bookが他のBookやファイル・DBシステムにつながってデータを受け取り新規Bookを作成するようになっているのか、
或いはマクロ実行Book単体での稼働なのかの切り分けでしょうかね。
    • good
    • 0
この回答へのお礼

相手との時間が調整つかず、とりあえずフォルダ関係の確認だけできました。

「エクセル作成マクロ」というフォルダの中に
・「Excel」というフォルダ
・「マクロ.xlsm」というファイル
だけ入っています。
マクロを実行した際の書き出し先は相対パス指定で、マクロの置いてあるフォルダ内にあるExcelフォルダに書き出す仕様になっています。
なので、もとのフォルダまるごと、別のPCのローカルディスクのどこにコピーして実行しても、
そのフォルダ内のExcelフォルダに書き出すようになっています。
取り急ぎご報告まで。

ありがとうございました。

お礼日時:2018/05/22 14:40

No.3のお礼に対して



>>例えば何かをインストしているのが条件とか?

>新品のSurfaceProを使用しての事なので、あまり考えにくいと思っています。
>もちろんプリインストールされりるソフトの可能性もありますが、低いと思っています。

う~ん?
『そのマクロを実行するに当たって○○がインストールされている事』を条件と回答してます。
なので新品であるからこそインストールされてない
(Windowsのアップデートを止めているとか、OSが新しく次のバージョンが入っているのでOS的には不要と思われているような物とか)

>他のPCではエクセル2016で動作しているとの事(未確認)

この確認において問題ないのなら『プログラムの追加と削除』を動くPCと双方表示させてみて見比べる・・・・

例えばデータベースに接続するような物なら接続の仕方によっては接続用ドライバ類は必要かもでしょうし。

>最終的には、「開発者に問い合わせるしかない」と突き返すことになります

『自分には手に負えない』と戻す必要もある・・・と言うより開発者との接点を持つ物がスキル不足では、仮に委託であれば下手すると相手の良いように
されちゃうんじゃない?
その者の上司はどのような感じなのでしょうか?と考えてしまいます。

あとは該当PCのアカウントに管理者権限が必要とか、

>エクセルファイルをUSBメモリでフォルダまるごとコピーし

ExcelBookではなくフォルダ丸ごとって『.dll などExcelBookファイル以外に何かある』ならそれを動かすソフトがかけてるのかも。
    • good
    • 0
この回答へのお礼

ご親切に返答いただきありがとうございます。

本日、相談者がSurfaceProを私の元に持参してきてくれました。
その方は初心者だし、新品だけあって、何も端末をいじってないようです。
SurfaceProでマクロを実行したところ、本来は指定フォルダに計算結果のエクセルファイルを書き出す仕様になっているようですが、
「失敗しました。」というメッセージで出ました。

私のPCのデスクトップにコピーして、同じ操作をしてみたところ、「成功しました。」で、エクセルファイルが生成されていました。
私のPCは私自身、DBに接続するような設定は行っておらず、基本的に素の状態なのに正常動作しました。

また明日以降、SurfaceProに触らせてもらえる時間が持てますが、
本日は時間が無く、状態の確認のみで、あらためて情報不足ですみません。

お礼日時:2018/05/21 19:05

>エラーと言ってもVBA内の処理にてエラーメッセージが表示されているので開発者の想定しているエラーです。


それでもエラーでしょ?Debug.Print Err.Descriptionは「エラー内容を表示せよ」なので、それがないと何だか分かりません。

いつも思うのですが、原因が分からない質問者が勝手に原因を決めつけることが多いです。
    • good
    • 0

>エラーメッセージが表示されているので


それを見せずに何を期待して質問してるのですか?
    • good
    • 0
この回答へのお礼

「情報不足で申し訳ありません」と最初から断っていますよね。
その中で、アドバイスしようがないのは仕方がありませんが、突っかかってこないでくださいね。

お礼日時:2018/05/21 11:23

No.2です。


>以下の処理で引っかかっているようです。
引っかかっているの意味が分からん。
    • good
    • 0

>Debug.Print Err.Description



で、その結果、何と書かれてるの??
ソースコード見ている画面から、表示 -- イミディエイトウィンドウ で、出るはず
    • good
    • 0

>開発者の想定しているエラーです



質問者さんの作った物ではないのですか?
もしそうなら例えば何かをインストしているのが条件とか?
と言うよりかは開発者に確認した方がって開発した人が悩んでいる?
    • good
    • 0
この回答へのお礼

>例えば何かをインストしているのが条件とか?

新品のSurfaceProを使用しての事なので、あまり考えにくいと思っています。
もちろんプリインストールされりるソフトの可能性もありますが、低いと思っています。

>開発者の想定しているエラーです
うまく表現できておらずすみません。
自分でVBAで開発途中に期待通りに動作せずVBAが出すエラーではなくて、
プログラム内で想定外の状況に応じてユーザに知らせるエラーメッセージです。
つまり、例えば
MsgBox "それはダメよ~ん!"
の様な止まり方をし、正常処理完了に行きつかないだけなのでこのメッセージをここに記載したところで、
全く意味がないからです。
エラーといってもプログラム的には正常処理を完了していますが、
使っている人からすると、データ書き出しまで完了できないため困っています。

本来であれば、ソース自体を提示するのがズバリ正確な質問となるのですが、
細かい説明は割愛しますが、そのままソースを公開するにはリスクがあるため、
情報不足前提ですが、
聞かないよりは聞いた方が、何か手がかりがつかめたらと思って質問させていただいています。

開発者から配布された、スキルの低いユーザから相談を受けた身ですので、
私自身が解析する事も出来ず、私と開発者の接点はありません。
最終的には、「開発者に問い合わせるしかない」と突き返すことになりますが、
その前に何かできうることを探っている状態です。
ご理解いただければ幸いです。

お礼日時:2018/05/21 11:40

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

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

gooドクター

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

人気Q&Aランキング