[[20180208083012]] 『破損したブックが生成されるマクロ』(東京夢の島) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『破損したブックが生成されるマクロ』(東京夢の島)

 お世話になります。

 日頃業務で使う簡単なマクロを製作しているのですが、その際に発生したバグ?の再現が取れましたので、挙げさせていただきます。

 以下がコードになります。


 Sub 破損ブック生成再現()

 Dim new1 As String

 Workbooks.Add
 new1 = ActiveWorkbook.Name

 With Workbooks(new1)

    With .Sheets(1)

        .Range("B1").Activate 'Selectでも可
        ThisWorkbook.Activate
        .Range("A1:B1").Merge

    End With

    'ここでThisWorkbook.Activateでも発生
    .SaveAs FileName:="デスクトップのパス\Book1", FileFormat:=51

 End With

 Workbooks("Book1.xlsx").Close

 End Sub


 症状としてはタイトル通り破損したブックがデスクトップに生成されます。
 拡張子を.zipにして、破損した状態と修復後の中を覗くと、
 一部にB1⇒A1:B1と変わっている箇所があったのと、上記マクロの

 .Range("B1").Activate

 をA1にすると発生しませんので、結合セルの先頭(左上?)のセル以外がSelectかActiveな状態かつ、
 別のブックがActiveな状態で保存されると開けないようです。

 原因はほぼ特定できているので、質問内容としてはこのような症状に関する情報
 (microsoftの公式でもどこか別の掲示板でもなんでも、自分では求めているような情報に辿り着けませんでしたorz)
 をお持ちの方がいらっしゃいましたら、ご教授頂けると助かります。
 また、Excel2013や2016等の後継のExcelで発生するか確認して頂ける方がいらっしゃいましたらご協力頂けると助かります。

 よろしくお願い致します。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


情報が何処に転がっているのかは知りませんが、私もExcel2010で再現しましたで、何が原因なのか見てみました。

問題なのは、自動修復時に表示されますが、ブックをZIPとして開いた場合の xl\worksheets\sheet1.xml にあります。
既に確認されているようですが、この中で、<selection sqref="B1"/> という一文があり、アクティブセルはB1セルだという事を保存しているのですが、A1:B1 が連結されており、B1にはカーソルが合わないので、壊れた判定されていそうです。 だから、D2セルをアクティブにしてから C2:D2 を連結して保存しても、同じ現象になります。

自動修復で直りますが、手作業でZIPから sheet1.xml を抜き出して、<selection sqref="A1:B1"/> のように書き換えてからZIPに戻し、xlsx に戻すと、普通に開けるようになります。(自動修復だと、<selection activeCell="J21" sqref="J21"/> のように、手堅い指定に置き換えられていました)

MSに問い合わせれば、不具合と認めてくれそうな内容ですが、修正はしてくれないでしょうね。Excel2016でも未だに発生するのか、私も気になるところです。

そして、壊れない対策も既に理解されているようですが、.Range("B1").Activate 部分を、C1 セルとか、連結とは無関係なセルに変える事です。これならば、最初から <selection sqref="C1" activeCell="C1"/> のように保存されるので、問題発生しません。
(???) 2018/02/08(木) 09:47


 ???さん

 ご回答ありがとうございます。同じExcel2010で再現ということで、やはり私のPCだけ発生するというものではないようですね。
 対策については仰るとおり、「結合の対象範囲を避ける記述にする」だと思っています。

 なら2013以降なんてどうでもいいじゃん、と思う方もいらっしゃるかもしれませんが、興味は尽きませんねぇ・・・
 検証して下さる奇特な方をお待ちしております。
(東京夢の島) 2018/02/08(木) 15:45

2007でもおきますねぇ
ただ、保存形式変更してFileFormat:=56(xlExcel8)だと発生しないような

xml+zip形式のみで起きる、仕様と言う名のバグだったりして
(2u) 2018/02/08(木) 19:01


 2uさん

 ご回答ありがとうございます。こちらでも確認しました、これは興味深いですね。
 .xls形式までは保存時にbookがActiveでない場合でもセル情報を確認して保存してるんですかね?

 また、Excel2016を持っている友人に試してもらったところ、発生したとのことです。
 恐らく.xlsxからそういう仕様になったんでしょうね。
 実は不具合には気付いているけど、修正すると弊害が大きいとかで野放しだったり・・・?
 割と起こりえるような気がするんですがねぇ、コレ。
(東京夢の島) 2018/02/09(金) 09:09

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.