Excel2007
投稿日: 2007-10-10 /
カテゴリー:job
Excel2003で作ったファイルを開こうとすると
‘xxxxx.xls’には読み取れない内容が含まれています。このブックの内容を回復しますか?ブックの発行元が信頼できる場合は、[はい]をクリックしてください。
というエラーメッセージが表示され、[はい]を選ぶとデータだけになった残骸みたいな状態でファイルが開かれてしまうのです。
えー、下位互換ないのかよー!!!と思ったのですが、一応解決したので原因を書いておきます。(私の場合はこうでした、というあくまでも参考情報としてご覧ください。)
「名前の定義」ってあるじゃないですか。特定のセルに名前をつける機能。(←多分。あと、ページ設定で印刷行や列の設定をしても定義されるみたいです。)
開くとエラーになるファイルには「=[xxxx]!#REF!」となっている名前の定義が含まれていたためにこのようなエラーが出てたみたいです。ひとまず2003で開いて(こっちではエラーにならないので気づかなかった!)要らない名前の定義を全部削除したら、無事2007でも開けるようになりました。
なんだそれ。
あとあんなに見た目変えられたら、脳老人はついていけないじゃないですかよ。
あ、あと、2007はApplication.FileSearchが使えないみたいです。(OSはどちらもwinXP。)実行時エラーが出ます。なんでだよ!と怒っても動かないものは仕方がないのでFileSystemObjectで代用しました。参考までにソース載せときます。多分動きます。
変更前(2003では動きますが、2007ではエラーが出ます)
With Application.FileSearch .LookIn = strReadPath .Filename = "*.xls" lngCnt = 0 If .Execute > 0 Then lngTotalCnt = .FoundFiles.Count For i = 1 To lngTotalCnt strMsg = i & " / " & lngTotalCnt ' 進捗メッセージ Application.StatusBar = strMsg strFileName = fs.GetFileName(.FoundFiles(i)) If strFileName <> myFileName Then ' なんか処理 lngCnt = lngCnt + 1 End If Next i Application.StatusBar = False End If If lngCnt <= 0 Then MsgBox "このフォルダにExcelファイルはありません。" End If End With
変更後(2003・2007で動きます)
Set fis = CreateObject("Scripting.FileSystemObject") Set fol = fis.GetFolder(strReadPath) Set fil = fol.Files lngTotalCnt = 0 For Each fx In fil strFileName = fx.Name If Right$(StrConv(strFileName, vbLowerCase), 4) = ".xls" Then lngTotalCnt = lngTotalCnt + 1 End If Next If lngTotalCnt <= 0 Then MsgBox "このフォルダにExcelファイルはありません。" Else lngCnt = 0 For Each fx In fil strFileName = fx.Name If Right$(StrConv(strFileName, vbLowerCase), 4) = ".xls" Then strMsg = (lngCnt + 1) & " / " & lngTotalCnt ' 進捗メッセージ Application.StatusBar = strMsg DoEvents If strFileName <> myFileName Then ' なんか処理 lngCnt = lngCnt + 1 End If Application.StatusBar = False End If Next End If Set fil = Nothing Set fol = Nothing Set fis = Nothing