MoveとCopy、逆切れしなくても

Excel VBAの話。ユーザー検証中のところで、ユーザー担当者Cからユーザー側でエラーで動かないという連絡が人物Aにはいった。人物Aがくわしく状況を聞いてみると、ユーザー環境はExcel 2007のようだ。こちらの全社環境はExcel 2003が標準であって、これは担当者Cとの打合せでも合意事項だった。しかし、協力企業のほうはそうでもない。


とりあえず人物Aが担当者Cにエラー画面をとってメールで送ってくれるよう依頼をした。メールが届き、添付ファイルをファイルサーバーに一旦保存したの後、人物Aと人物Bが分析にはいった。ファイルサーバーに置かれたので、エラー画面をわたしも見れる。エラーは複数ある。担当者Cはステップを進めてエラーを複数とったとのこと。



どうやら、エラーの原因はこの行のようだ。


Sheets(移動元のシート名).Move Before:=Application.Workbooks(マクロ側のブック名).Sheets(シート名)



ふむふむ…



結局、Excel 2007の仕様で利用可能行数がExcel 2003より大幅に増えているので、Excel 2007のシートをExcel 2003へ「移動」しようとしても行数が多くてダメ、ってこと。



人物Aと人物Bが協議して、マクロのあるエクセルブックが2007なら動くはず、と結論した。Excel 2007で”ターゲット.xls”をマクロを実行しないで開いて、別名で保存して、ファイル名を”ターゲット.xls”から”ターゲット.xlsm”に変換する。またこれを実行する”バッチ.BAT”の中も拡張子を変更しておいて、2つのファイルを先方に送る。
こちら側にはExcel 2007が無いので、ユーザー部門でExcel 2010を使っている人を見つけて変換してもらった。




という話。





ところで。


なぜ、Moveなの?と人物Bにきいてみた。


CSVファイルを入力にしているので、Workbooks.Open で開いてそちらのシートをマクロ側へ「移動」している、とのこと。


なるほど…
でもそれなら
CSVファイルを入力にしているのでも、Workbooks.Open で開いてそちらのシートのデータのある行をコピー&ペーストでマクロ側へ「コピー」すれば?
と話したところ、沈黙。(サンプルはこちら



また、複数あるエラーのうち、編集後のマクロ側のデータシートを別名で保存するところ。Saveasの前に

Sheets(1).Move

をしていて、ここも当然エラー。
なぜ、Moveなの?と人物Bにきいてみた。


新しいブックがマクロ付きにならないようにMoveしてからSaveasをしている、とのこと。



なるほど…
でもそれなら
新しいブックがマクロ付きにならないようにCopyしてからSaveasをすれば?、とはいわず、ちょっと気づいたので「別のやり方は無いの?」と話したところ、
「これしか知らないから!」と逆切れされてしまった(*_*)



SaveAs Filename:="〜.xls" した後のマクロの無いエクセルブックを、Excel 2007でもExcel 2003でも開けるのは判っているのだから

Sheets(1).Copy

してから SaveAs Filename:="〜.xls"でもいいんじゃない?
は心のつぶやき。


上の二つの方法は、別のエクセルマクロでわたしが実現している。人物Bはわたしの作ったそのマクロのテスト結果検証をしているし、公開版を成果物としてファイルサーバーにもあるのだから、「これしかしらない」ってことはないでしょう。たしかにインターネットで検索は出来ないけれど。


最後になって何となく気づいたのは、人物Bは自分の知識の枠の中での話をするんだなぁということ。別の方法はあまり気にしないみたいだし。方向が定まった作業には地道で作業結果も信頼できるのだから。もっとも方向が不明なとき、方向性を出さないのだけど。指示が決まるまで待ち。でもこういう方が、このプログラムの社会では生き残るのだなぁ…自分みたいにお節介なのはダメだなぁ…だから今日の二人の立場の差になっている…(片や正社員で生き残り、片や月末で仕事無し。)まぁ、結構沸点も低いしね。だから、サンプルあるよって話をする気持ちにはならなかった。人物Aとの話でもVBAを修正するのではなく、Excel 2003用とExcel 2007用の2種類を用意する方法を選択しているしね。お節介はここまで。