Excel2007

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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です