C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: VBでExcelを開くと文字化けするようになった


(過去ログ 170 を表示中)

[トピック内 16 記事 (1 - 16 表示)]  << 0 >>

■98266 / inTopicNo.1)  VBでExcelを開くと文字化けするようになった
  
□投稿者/ masaX (1回)-(2021/10/26(Tue) 12:30:21)

分類:[VB.NET/VB2005 以降] 

はじめて投稿させていただきます。

VisualStudio2005の頃にVBで作ったエクセルを起動するプログラムがあり無事に作動していたのですが、つい先日PCを取り替えたところ、問題なく開いてたエクセルが文字化けするようになってしまいました。
PCに入ってたOSはWindows10→Windows10で変わりはないのですが、Officeが2013から2019に変わりました。
64ビットのまま変わりません。
原因を切り出すつもりで、エクセルを開く部分だけを切り出してプログラムを作ってみたのですが、やはり同じ現象になります。

コードは下記の様な感じです。(レイトバインディングって言うんでしょうか?)

    Public xlSheets As Object
    Public xlBooks As Object
    Public xlBook As Object
    Public xlSheet As Object
    Public xlCells As Object
    Public xlApplication As Object
    Public Arr As New ArrayList

    Private Sub Button20_Click(sender As Object, e As EventArgs) Handles Button20.Click
        Dim path As String = ""
        path = "C:\Users\m-sugimoto\Desktop\エクセルテスト.xlsx"
        Excel_Original_Open(path, 1, True)
    End Sub

    Public Sub Excel_Original_Open(ByVal ファイルパス As String,
                                         ByVal シート名 As Object,
                                         ByVal Visibled As Boolean)

        xlApplication = CreateObject("Excel.Application")
        Arr.Add(xlApplication)
        xlApplication.DisplayAlerts = False
        If Visibled = True Then
            xlApplication.Visible = True
        Else
            xlApplication.Visible = False
        End If
        xlBooks = xlApplication.Workbooks
        Arr.Add(xlBooks)
        xlBook = xlBooks.Open(ファイルパス)
        Arr.Add(xlBook)
        xlSheets = xlBook.Worksheets
        Arr.Add(xlSheets)
        If IsNumeric(シート名) = True Then
            Dim num As Integer
            num = CType(シート名, Integer)
            xlSheet = xlSheets(num)
        Else
            xlSheet = xlSheets(シート名)
        End If
        xlSheet.select()
        Arr.Add(xlSheet)
        xlCells = xlSheet.Cells
        Arr.Add(xlCells)
    End Sub

もし改善する方法があれば嬉しいのですが。

また、レイトバインディングがダメなのか?とも思い
こちらのサンプルの「既存の Excel ブックを開く」のコードをそのまま使ってプログラムを書いてみました。

        ' Excel.Application の新しいインスタンスを生成する
        Dim xlApplication As New Excel.Application()
        Dim xlBooks As Excel.Workbooks

        ' xlApplication から WorkBooks を取得する
        xlBooks = xlApplication.Workbooks

        ' 既存の Excel ブックを開く
        xlBooks.Open("C:\Users\m-sugimoto\Desktop\エクセルテスト.xlsx")

        ' Excel を表示する
        xlApplication.Visible = True

しかし、今度は参照が間違っているのか
一行目の
    Dim xlApplication As New Excel.Application()
で
「ハンドルされていない例外

System.InvalidCastException:型
Microsoft.Office.Interop.Excel.ApplicationClassのCOMオブジェクトをインターフェイス型Excel.Applicationにキャストできません。」

と出ます。

参照に追加したのは
・Microsoft Excel 9.0 Object Library
・Microsoft Office 16.0 Object Library
の2つです。

参照が間違ってるのでしょうか?

使っていたVisualStudio2015が古いのか?とも思い2019に入れ直してみましたが同じでした。

教えていただけると嬉しいです。

引用返信 編集キー/
■98267 / inTopicNo.2)  Re[1]: VBでExcelを開くと文字化けするようになった
□投稿者/ masaX (3回)-(2021/10/26(Tue) 13:11:36)
No98266 (masaX さん) に返信
> はじめて投稿させていただきます。
>
> VisualStudio2005の頃にVBで作ったエクセルを起動するプログラムがあり無事に作動していたのですが、つい先日PCを取り替えたところ、問題なく開いてたエクセルが文字化けするようになってしまいました。
> PCに入ってたOSはWindows10→Windows10で変わりはないのですが、Officeが2013から2019に変わりました。
> 64ビットのまま変わりません。
> 原因を切り出すつもりで、エクセルを開く部分だけを切り出してプログラムを作ってみたのですが、やはり同じ現象になります。
>
> コードは下記の様な感じです。(レイトバインディングって言うんでしょうか?)
>
> Public xlSheets As Object
> Public xlBooks As Object
> Public xlBook As Object
> Public xlSheet As Object
> Public xlCells As Object
> Public xlApplication As Object
> Public Arr As New ArrayList
>
> Private Sub Button20_Click(sender As Object, e As EventArgs) Handles Button20.Click
> Dim path As String = ""
> path = "C:\Users\m-sugimoto\Desktop\エクセルテスト.xlsx"
> Excel_Original_Open(path, 1, True)
> End Sub
>
> Public Sub Excel_Original_Open(ByVal ファイルパス As String,
> ByVal シート名 As Object,
> ByVal Visibled As Boolean)
>
> xlApplication = CreateObject("Excel.Application")
> Arr.Add(xlApplication)
> xlApplication.DisplayAlerts = False
> If Visibled = True Then
> xlApplication.Visible = True
> Else
> xlApplication.Visible = False
> End If
> xlBooks = xlApplication.Workbooks
> Arr.Add(xlBooks)
> xlBook = xlBooks.Open(ファイルパス)
> Arr.Add(xlBook)
> xlSheets = xlBook.Worksheets
> Arr.Add(xlSheets)
> If IsNumeric(シート名) = True Then
> Dim num As Integer
> num = CType(シート名, Integer)
> xlSheet = xlSheets(num)
> Else
> xlSheet = xlSheets(シート名)
> End If
> xlSheet.select()
> Arr.Add(xlSheet)
> xlCells = xlSheet.Cells
> Arr.Add(xlCells)
> End Sub
>
> もし改善する方法があれば嬉しいのですが。
>
> また、レイトバインディングがダメなのか?とも思い
> こちらのサンプルの「既存の Excel ブックを開く」のコードをそのまま使ってプログラムを書いてみました。
>
> ' Excel.Application の新しいインスタンスを生成する
> Dim xlApplication As New Excel.Application()
> Dim xlBooks As Excel.Workbooks
>
> ' xlApplication から WorkBooks を取得する
> xlBooks = xlApplication.Workbooks
>
> ' 既存の Excel ブックを開く
> xlBooks.Open("C:\Users\m-sugimoto\Desktop\エクセルテスト.xlsx")
>
> ' Excel を表示する
> xlApplication.Visible = True
>
> しかし、今度は参照が間違っているのか 一行目の
>     Dim xlApplication As New Excel.Application()
> で

> 「ハンドルされていない例外
> System.InvalidCastException:型
> Microsoft.Office.Interop.Excel.ApplicationClassのCOMオブジェクトをインターフェイス型Excel.Applicationにキャストできません。」
>
> と出ます。
>
> 参照に追加したのは
> ・Microsoft Excel 9.0 Object Library
> ・Microsoft Office 16.0 Object Library
> の2つです。
>
> 参照が間違ってるのでしょうか?
>
> 使っていたVisualStudio2015が古いのか?とも思い2019に入れ直してみましたが同じでした。
>
> 教えていただけると嬉しいです。
引用返信 編集キー/
■98268 / inTopicNo.3)  Re[1]: VBでExcelを開くと文字化けするようになった
□投稿者/ 魔界の仮面弁士 (3197回)-(2021/10/26(Tue) 13:39:28)
No98266 (masaX さん) に返信
> 問題なく開いてたエクセルが文字化けするようになってしまいました。
ファイルの破損なのか/環境依存の問題なのか/コードの問題なのかといった切り分けは済んでいますか?

本来どのように表示されるデータが、実際にはどのように文字化けしてしまうのかを具体的に教えてください。


>参照に追加したのは
>・Microsoft Excel 9.0 Object Library
>・Microsoft Office 16.0 Object Library
>の2つです。

いや、何故そのような組み合わせで? (^_^;)

Excel 9.0 って Office 2000 のバージョンですし、
Office 16.0 は、Office 2016/2019 相当ですよね。

そもそも 9.0 だと、公式の Primary Interop Assembly が無いはずなので、
自動生成された COM 相互運用アセンブリでの運用になってしまうかと。
VB2005 当時であっても、あえて 9.0 を使わねばならない状況というのは、かなりレアな気が…。


>もし改善する方法があれば嬉しいのですが。
(1) 開発環境の Office バージョンと、実行環境の Office バージョンは一致していますか?
 古いバージョン向けにコンパイルされたアプリは、新バージョンでも使える事が多いですが、
 その逆は必ずしも成り立ちません。開発環境と実行環境の Office バージョンは揃えておきましょう。

(2) 複数バージョンの Office が共存インストールされていませんか?
 オートメーション操作する場合、共存インストールは不具合の元です。
 本来必要なバージョンのみがインストールされた環境にてコンパイルしてみてください。


> If Visibled = True Then
ここは If 文を使わず、
 xlApplication.Visible = Visibled
だけで良いと思います。
引用返信 編集キー/
■98270 / inTopicNo.4)  Re[2]: VBでExcelを開くと文字化けするようになった
□投稿者/ masaX (4回)-(2021/10/26(Tue) 15:44:43)
No98268 (魔界の仮面弁士 さん) に返信

早速のアドバイスありがとうございます

> ファイルの破損なのか/環境依存の問題なのか/コードの問題なのかといった切り分けは済んでいますか?
普通に直接開いた場合は問題なく開くのですが、プログラムからですと、いくつかの違う(作成した年代も違う)Excelファイルで試してみたのですが
どれも同じような文字化けになります。

> 本来どのように表示されるデータが、実際にはどのように文字化けしてしまうのかを具体的に教えてください。
本来は表形式になるはずのファイルが表の罫線などは全て消えて

「yム靫!+&#58976;E・&#57843;・Myホkチ」・・ォKェ5=|・ ・G)痴蠅匳U・tBハ)ソロ・ヒ&#58270;f菲ヌユ゚&#63731;&#63731;PK!A躍 ヲ・xl/worksheets/sheet1.xml恍Ioロ0・・゙%幹シ 麻リqレワ・ケモヤネ"フE%・E&#63731;{Iv&#58882;・5゙<&#57860;繍「=X'鍵0M3掘sS スゥ&#57518;_/ノ#逋ョ・*|・・_fcキョ・エォp・W窗 柑ヤt&#63728;テ糧Xナ|xオ・ ャ・R剃Y6"・済・゙テ0M#8<セS&#63728;&#63729;bA2誣ュ鞋・・8ナ・ラ%ワィ. ヨB


こんな文字が一面に出ます。
試しにすべて消去して白紙にしたExcelで試してみたのですが、その場合でも同じように一面に上記のような文字が並びます。

xlApplication = CreateObject("Excel.Application")
のところを

xlApplication = CreateObject("Excel.Application.16")
とか他の数字にしてみたのですがそれもダメでした。




> >参照に追加したのは
> >・Microsoft Excel 9.0 Object Library
> >・Microsoft Office 16.0 Object Library
> >の2つです。
>
> いや、何故そのような組み合わせで? (^_^;)
> Excel 9.0 って Office 2000 のバージョンですし、
> Office 16.0 は、Office 2016/2019 相当ですよね。
>
> そもそも 9.0 だと、公式の Primary Interop Assembly が無いはずなので、
> 自動生成された COM 相互運用アセンブリでの運用になってしまうかと。
> VB2005 当時であっても、あえて 9.0 を使わねばならない状況というのは、かなりレアな気が…。

すみません、このあたりを丸で分かっておりません。
VisualStudio2019の「参照の追加」で出てくる一番新しいのが良いのかな?と、まるで知識の無い状態で選択しました。
他のExcel 5.0やOffice 9.0なんかも入れてみたのですがダメで、どちらもそれより大きい数字のついたのが無かったので
どちらもこれが最新なのか?、と思っておりました。
このあたり、どこかで確認できるサイトなどがあれば見てみたいです。


> >もし改善する方法があれば嬉しいのですが。
> (1) 開発環境の Office バージョンと、実行環境の Office バージョンは一致していますか?
>  古いバージョン向けにコンパイルされたアプリは、新バージョンでも使える事が多いですが、
>  その逆は必ずしも成り立ちません。開発環境と実行環境の Office バージョンは揃えておきましょう。

この問題が起こる前まで(1週間ほど前)はOffice2013が入ってたのですが、PCの取り換えでOffice2019に変わりました。
以前に作っていたプログラムだったので、試しに今の環境(Office2019が入っていて、VisualStudio2019で作成)で新たに作ってみたプログラムでもダメでした。
試しにエクセルも新しく作ったファイルで試してみましたがダメでした。


> (2) 複数バージョンの Office が共存インストールされていませんか?
>  オートメーション操作する場合、共存インストールは不具合の元です。
>  本来必要なバージョンのみがインストールされた環境にてコンパイルしてみてください。

主にOffice2019が入ってるのですが、AccessだけOffice2000のが入ってます。


>> If Visibled = True Then
> ここは If 文を使わず、
>  xlApplication.Visible = Visibled
> だけで良いと思います。

なるほど、ありがとうございます。
引用返信 編集キー/
■98271 / inTopicNo.5)  Re[3]: VBでExcelを開くと文字化けするようになった
□投稿者/ 魔界の仮面弁士 (3198回)-(2021/10/26(Tue) 16:41:18)
2021/10/26(Tue) 16:42:55 編集(投稿者)

No98270 (masaX さん) に返信
>>本来どのように表示されるデータが、実際にはどのように文字化けしてしまうのかを具体的に教えてください。
> 本来は表形式になるはずのファイルが表の罫線などは全て消えて
> こんな文字が一面に出ます。

文字化けした内容をそのまま投稿すると、掲示板側でさらに破損してしまうので、
破損後の画面キャプチャ等を見たかったところです。まぁ良いですけど。

★質問1★ "C:\Users\m-sugimoto\Desktop\エクセルテスト.xlsx" において、
 化けて表示されるのはワークシート上の内容だけですか?
 シート名やシート数の破損はありましたか?


> 試しにすべて消去して白紙にしたExcelで試してみたのですが、

★質問2★ 既存ファイルを加工するのではなく、
 完全に新規作成したばかりの .xlsx ファイルでも同じように化けますか?
 それとも、特定のファイルだけが化けるのでしょうか?


> PK
これ、出現位置がおかしいですね?

掲示板に送った時に、Shift_JIS 変換によってさらに化けた可能性もありますが、
貼られた内容をそのまま ASCII としてデコードすると
 P ⇒ 0x50
 K ⇒ 0x4B
  ⇒ 0x03
  ⇒ 0x04
  ⇒ 0x14
  ⇒ 0x06
  ⇒ 0x08
のように記載されています。

.xlsx や .docx や .pptx の場合、『ファイル先頭部』のマジックバイトが
 P,K,^C,^D,^T,\0,^F,\0,^H,\0
すなわち 50 4b 03 04 14 00 06 00 08 00 となるはずです。
まさにそれと一致しますね。

ファイル先頭にあるはずのバイナリが、
シート内に表示されるというのであれば、かなり異常。


★質問4★ .xlsx ファイルの拡張子を .zip に変えた時に、
 圧縮ファイルとしてその中身を展開できますか?
 正しく展開できないなら、ファイル自体の破損が疑われます。


> VisualStudio2019の「参照の追加」で出てくる一番新しいのが良いのかな?と、まるで知識の無い状態で選択しました。

Office の場合、ProgId のバージョン番号指定は、ほとんど意味をなさないです。
複数バージョンの混在を認めるような仕組みにはなっていないので。


> 以前に作っていたプログラムだったので、試しに今の環境(Office2019が入っていて、VisualStudio2019で作成)で新たに作ってみたプログラムでもダメでした。
> 試しにエクセルも新しく作ったファイルで試してみましたがダメでした。

新しい PC なのですね?


> 主にOffice2019が入ってるのですが、AccessだけOffice2000のが入ってます。
開発環境としては論外かも…。
上位バージョンの Office が入っている環境に、後から 旧バージョンの Office を入れたりすると、
レジストリ情報が汚染されるなどして、一部の機能が正しく動かなくなることがあります。
そのため旧バージョンの Office を使いたいのなら、本環境とは分離した仮想環境上で動作させた方が無難です。

また、Office 2000 が入っている環境に、それ以降のバージョンを入れる事は一応できますが、
保証された組み合わせではありません。まぁ、2000 を使っている時点で保証は望むべくも無いのですが。


それと、ストアアプリ版の Office は利用されていませんか?
ストアアプリ版は、外部からのオートメーション操作との相性が悪いので、
もしもストアアプリ版をお使いなら、C2R / MSI 版に入れ替えましょう。


> 他のExcel 5.0やOffice 9.0なんかも入れてみたのですがダメで、
同じ名前のメソッドであっても、参照設定しているライブラリバージョンが変わると、
ディスパッチID や引数定義の異なる別処理の呼び出しになることもあります。
レイトバインドならばともかく、アーリーバインド時にはバージョンも一致させましょう。

9.0 は Office 2000 の物なので、現行バージョンの Windows を使っているのであれば、
特に出番はありません。

Office インストーラーの「.NET プログラミングサポート」の状況も確認してみてください。
https://answers.microsoft.com/ja-jp/msoffice/forum/all/microsoft-office-365/501b71ab-c26d-4705-9e5b-80679265b49c?auth=1


ちなみに Excel 5.0 は「最後の 16bit 版エクセル」です。(もちろん、64bit 版 Windows 上では動きません)
インターフェイス自体は、OLE 埋め込みや I-ISAM Driver で使われることはありますが。

また、Office 2000 向けとして参照設定した場合と、Office 2003 向けの参照設定では、
VB.NET から見た場合、名前空間からして違ってきたりします。(VBA の参照設定ではほぼ一緒なのですが)


> このあたり、どこかで確認できるサイトなどがあれば見てみたいです。
Excel のバージョン一覧は、とり合えずこの辺。
https://ja.wikipedia.org/wiki/Microsoft_Excel#%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E5%B1%A5%E6%AD%B4


Office のバージョンによっては、PIA を別途ダウンロードする必要があることもありますが、
2016, 2019 の世代なら、既定でインストールされるんじゃないかな。
引用返信 編集キー/
■98272 / inTopicNo.6)  Re[4]: VBでExcelを開くと文字化けするようになった
□投稿者/ masaX (5回)-(2021/10/26(Tue) 17:27:47)
> ★質問1★ "C:\Users\m-sugimoto\Desktop\エクセルテスト.xlsx" において、
>  化けて表示されるのはワークシート上の内容だけですか?
>  シート名やシート数の破損はありましたか?

>>試しにすべて消去して白紙にしたExcelで試してみたのですが、
>
> ★質問2★ 既存ファイルを加工するのではなく、
>  完全に新規作成したばかりの .xlsx ファイルでも同じように化けますか?
>  それとも、特定のファイルだけが化けるのでしょうか?

もう一度、作ったばかりのExcelで空白のまま、シートだけを一つ追加したファイルでやってみたところ
同じ様に前に書いたような文字がいっぱい出てきたのと
シートは一つ追加したのに一つだけしか表示されず
またシート名は入力していないのにファイル名である「book1」と表示されています。



>>PK
> これ、出現位置がおかしいですね?
>
> 掲示板に送った時に、Shift_JIS 変換によってさらに化けた可能性もありますが、
> 貼られた内容をそのまま ASCII としてデコードすると
>  P ⇒ 0x50
>  K ⇒ 0x4B
>   ⇒ 0x03
>   ⇒ 0x04
>   ⇒ 0x14
>   ⇒ 0x06
>   ⇒ 0x08
> のように記載されています。
>
> .xlsx や .docx や .pptx の場合、『ファイル先頭部』のマジックバイトが
>  P,K,^C,^D,^T,\0,^F,\0,^H,\0
> すなわち 50 4b 03 04 14 00 06 00 08 00 となるはずです。
> まさにそれと一致しますね。
>
> ファイル先頭にあるはずのバイナリが、
> シート内に表示されるというのであれば、かなり異常。
>
> ★質問4★ .xlsx ファイルの拡張子を .zip に変えた時に、
>  圧縮ファイルとしてその中身を展開できますか?
>  正しく展開できないなら、ファイル自体の破損が疑われます。

上で書かれてる事は私には全く意味が分かりません(汗)
.zipに変える事はできるのですが、そのままでは中身が見れなくなります(私が意味を理解できていないのかな?)


>>VisualStudio2019の「参照の追加」で出てくる一番新しいのが良いのかな?と、まるで知識の無い状態で選択しました。
>
> Office の場合、ProgId のバージョン番号指定は、ほとんど意味をなさないです。
> 複数バージョンの混在を認めるような仕組みにはなっていないので。
>
>>以前に作っていたプログラムだったので、試しに今の環境(Office2019が入っていて、VisualStudio2019で作成)で新たに作ってみたプログラムでもダメでした。
>>試しにエクセルも新しく作ったファイルで試してみましたがダメでした。
>
> 新しい PC なのですね?
>
>>主にOffice2019が入ってるのですが、AccessだけOffice2000のが入ってます。
> 開発環境としては論外かも…。
> 上位バージョンの Office が入っている環境に、後から 旧バージョンの Office を入れたりすると、
> レジストリ情報が汚染されるなどして、一部の機能が正しく動かなくなることがあります。
> そのため旧バージョンの Office を使いたいのなら、本環境とは分離した仮想環境上で動作させた方が無難です。
>
> また、Office 2000 が入っている環境に、それ以降のバージョンを入れる事は一応できますが、
> 保証された組み合わせではありません。まぁ、2000 を使っている時点で保証は望むべくも無いのですが。

> それと、ストアアプリ版の Office は利用されていませんか?
> ストアアプリ版は、外部からのオートメーション操作との相性が悪いので、
> もしもストアアプリ版をお使いなら、C2R / MSI 版に入れ替えましょう。

ストアアプリ版というのは、どんな物の事ですか?(まるで知識がありまぜん)

>
>>他のExcel 5.0やOffice 9.0なんかも入れてみたのですがダメで、
> 同じ名前のメソッドであっても、参照設定しているライブラリバージョンが変わると、
> ディスパッチID や引数定義の異なる別処理の呼び出しになることもあります。
> レイトバインドならばともかく、アーリーバインド時にはバージョンも一致させましょう。
>
> 9.0 は Office 2000 の物なので、現行バージョンの Windows を使っているのであれば、
> 特に出番はありません。
>
> Office インストーラーの「.NET プログラミングサポート」の状況も確認してみてください。
> https://answers.microsoft.com/ja-jp/msoffice/forum/all/microsoft-office-365/501b71ab-c26d-4705-9e5b-80679265b49c?auth=1
>
> ちなみに Excel 5.0 は「最後の 16bit 版エクセル」です。(もちろん、64bit 版 Windows 上では動きません)
> インターフェイス自体は、OLE 埋め込みや I-ISAM Driver で使われることはありますが。
>
> また、Office 2000 向けとして参照設定した場合と、Office 2003 向けの参照設定では、
> VB.NET から見た場合、名前空間からして違ってきたりします。(VBA の参照設定ではほぼ一緒なのですが)
>
>
>>このあたり、どこかで確認できるサイトなどがあれば見てみたいです。
> Excel のバージョン一覧は、とり合えずこの辺。
> https://ja.wikipedia.org/wiki/Microsoft_Excel#%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E5%B1%A5%E6%AD%B4
>
> Office のバージョンによっては、PIA を別途ダウンロードする必要があることもありますが、
> 2016, 2019 の世代なら、既定でインストールされるんじゃないかな。

現在、参照の追加の中では
Microsoft Excel 9.0 Object Library
これが一番大きいのですが
新しいのをダウンロードする方法があるんでしょうか?

もし次、何か試してみるとすれば、Access(Office2000)をアンインストールしてみる事でしょうか?

引用返信 編集キー/
■98273 / inTopicNo.7)  Re[1]: VBでExcelを開くと文字化けするようになった
□投稿者/ 大谷刑部 (155回)-(2021/10/26(Tue) 17:31:23)
No98266 (masaX さん) に返信
> はじめて投稿させていただきます。
>
> VisualStudio2005の頃にVBで作ったエクセルを起動するプログラムがあり無事に作動していたのですが、つい先日PCを取り替えたところ、問題なく開いてたエクセルが文字化けするようになってしまいました。
> PCに入ってたOSはWindows10→Windows10で変わりはないのですが、Officeが2013から2019に変わりました。
> 64ビットのまま変わりません。
> 原因を切り出すつもりで、エクセルを開く部分だけを切り出してプログラムを作ってみたのですが、やはり同じ現象になります。

VS2005ということは.NetFrameworkが2.0とかでしょ?
Excelの参照以前にその状態でVSを一気に2019に上げたりするのがそもそも無謀と思います。
まず2.0系の最新である3.5で動くか確認してから4.xx系に移植する策を取った方がいいかも。
.net自体の非互換とかも出そうな環境変更かと。

>
> コードは下記の様な感じです。(レイトバインディングって言うんでしょうか?)

そのやり方でやってるなら、参照設定に依存しないはずです。通常は。
その手法の場合、そのためにCreateObjectでExcelアプリオブジェクトを生成するのがそもそもの目的なので。

> 使っていたVisualStudio2015が古いのか?とも思い2019に入れ直してみましたが同じでした。

かえって逆効果です。
むしろ可能ならもっと古いバージョンで試す方がいいくらいです。

引用返信 編集キー/
■98274 / inTopicNo.8)  Re[2]: VBでExcelを開くと文字化けするようになった
□投稿者/ masaX (6回)-(2021/10/26(Tue) 19:06:31)
No98273 (大谷刑部 さん) に返信


アドバイスありがとうございます。

> VS2005ということは.NetFrameworkが2.0とかでしょ?
> Excelの参照以前にその状態でVSを一気に2019に上げたりするのがそもそも無謀と思います。
> まず2.0系の最新である3.5で動くか確認してから4.xx系に移植する策を取った方がいいかも。
> .net自体の非互換とかも出そうな環境変更かと。

元々は2005で作ったプログラムなのですが、その後2015を入れて同じコードですが作り替えてますので
決して一気に2019にした訳では無いのですが、2015だと.NetFrameworkはいくらになってるんでしょう?


>>コードは下記の様な感じです。(レイトバインディングって言うんでしょうか?)
>
> そのやり方でやってるなら、参照設定に依存しないはずです。通常は。
> その手法の場合、そのためにCreateObjectでExcelアプリオブジェクトを生成するのがそもそもの目的なので。
>
>>使っていたVisualStudio2015が古いのか?とも思い2019に入れ直してみましたが同じでした。
>
> かえって逆効果です。
> むしろ可能ならもっと古いバージョンで試す方がいいくらいです。

なるほど
でも、2015より古いバージョンに戻す事はできないと思うですが
一度試しに考えてみたいと思います。

引用返信 編集キー/
■98275 / inTopicNo.9)  Re[3]: VBでExcelを開くと文字化けするようになった
□投稿者/ ビール飲み (1回)-(2021/10/26(Tue) 19:35:45)
横から失礼します。
従来は.xlsファイルを開いていたのが、新環境になって.xlsxファイルになった
とかではないですよね?
引用返信 編集キー/
■98276 / inTopicNo.10)  Re[4]: VBでExcelを開くと文字化けするようになった
□投稿者/ masaX (7回)-(2021/10/26(Tue) 20:23:34)
アドバイスありがとうございます。

No98275 (ビール飲み さん) に返信
> 横から失礼します。
> 従来は.xlsファイルを開いていたのが、新環境になって.xlsxファイルになった
> とかではないですよね?

あっ、そこは気にしてませんでした。
仕事場のPCなので今は確認できませんが
明日、よく見てみます。
引用返信 編集キー/
■98277 / inTopicNo.11)  Re[5]: VBでExcelを開くと文字化けするようになった
□投稿者/ ビール呑み (1回)-(2021/10/26(Tue) 20:58:00)
> 明日、よく見てみます。

見てみそ見てみそ

そして私も、新環境で久々に投稿したらハンドル名を間違えてた…
引用返信 編集キー/
■98278 / inTopicNo.12)  Re[5]: VBでExcelを開くと文字化けするようになった
□投稿者/ 魔界の仮面弁士 (3199回)-(2021/10/26(Tue) 21:43:33)
No98272 (masaX さん) に返信
> もう一度、作ったばかりのExcelで空白のまま、シートだけを一つ追加したファイルでやってみたところ
> 同じ様に前に書いたような文字がいっぱい出てきたのと

プログラムから開くのではなく、手作業で Excel から開いた場合も化けますか?
また、.xlsx ファイルをダブルクリックで起動した場合はどうですか?

手作業でも開けないなら、VB のコード以前に、実行環境/開発環境の問題であると切り分けできます。


> シートは一つ追加したのに一つだけしか表示されず
> またシート名は入力していないのにファイル名である「book1」と表示されています。

うぅむ、何でしょう。
Windows を再起動してから試しても同じでしょうか。

ファイルの置き場所が Program Files 配下や Windows フォルダーだったりはしないですよね…。
(VirtualStore が参照されていて、想定していたものとは別のファイルが扱われている可能性を想像)


> 上で書かれてる事は私には全く意味が分かりません(汗)
> .zipに変える事はできるのですが、そのままでは中身が見れなくなります(私が意味を理解できていないのかな?)

.xlsx ファイルをバイナリエディタで開いた場合、
ファイルの先頭 8 バイトが 50 4B 03 04 14 00 06 00 なのです。
https://www.filesignatures.net/index.php?page=search&search=504B030414000600&mode=SIG

そして、先ほど貼ってもらった文字化けデータの中にも、
50 4B 03 04 14 相当の文字列が含まれていたので、
「ファイルの先頭でもないところに、何故このようなバイナリが?」と不思議に思ったもので。


> .zipに変える事はできるのですが、そのままでは中身が見れなくなります(私が意味を理解できていないのかな?)
Office 2007 以降の .xlsx ファイルや .docx ファイルは、
内部的には .zip ファイル形式の一種です。

そのため、ファイルの拡張子を.zip に変更してから
エクスプローラーで開くと、ワークブック内に貼った画像や
設定情報をファイルとして取り出すことができるようになっています。

そしてファイルそのものが破損していれば、拡張子を .zip にしたとしても、
エクスプローラーで開けないことになります。その確認のつもりでした。

とはいえ、Excel ファイルとしては破損していても .zip として開ける事はありますし、
そもそもファイルが破損していたなら、Excel で開くときにエラーメッセージが出るはずなんですよね…。


> ストアアプリ版というのは、どんな物の事ですか?(まるで知識がありまぜん)
http://www.kk-tomiya.co.jp/publics/index/65/
https://curio-shiki.com/blog/office/office-storeapps-to-desktop-version


> 現在、参照の追加の中では
> Microsoft Excel 9.0 Object Library
> これが一番大きいのですが
やはり、Office 2019 がストアアプリ版なのでは無いでしょうか。
https://gomitaka0.hatenablog.com/entry/2020/01/23/141500

もしもデスクトップ版の Office なのに、古いバージョンのライブラリしか表示されないのであれば、
後から Office 2000 をインストールしたことで、ファイルやレジストリの一部が
古い情報で上書きされてしまい、元々入っていた Office 2019 が破損した可能性が思い当たります。


> もし次、何か試してみるとすれば、Access(Office2000)をアンインストールしてみる事でしょうか?
バージョン共存による汚染の場合は、OS そのものから再セットアップした方がよいのですけれどね。

それが面倒な場合は、両方の Office をアンインストールしてから、
あらためて最新版のみを入れなおすことを検討してみてください。
引用返信 編集キー/
■98279 / inTopicNo.13)  Re[6]: VBでExcelを開くと文字化けするようになった
□投稿者/ masaX (8回)-(2021/10/26(Tue) 23:03:04)
> プログラムから開くのではなく、手作業で Excel から開いた場合も化けますか?
> また、.xlsx ファイルをダブルクリックで起動した場合はどうですか?
> 手作業でも開けないなら、VB のコード以前に、実行環境/開発環境の問題であると切り分けできます。

手動で起動した場合は何の問題もなく開くことができますので
おそらくファイル自体に問題は無いと思います。

>>シートは一つ追加したのに一つだけしか表示されず
>>またシート名は入力していないのにファイル名である「book1」と表示されています。
>
> うぅむ、何でしょう。
> Windows を再起動してから試しても同じでしょうか。
>
> ファイルの置き場所が Program Files 配下や Windows フォルダーだったりはしないですよね…。
> (VirtualStore が参照されていて、想定していたものとは別のファイルが扱われている可能性を想像)

windowsの再起動は何度かやってみましたが変わりありません。
念の為に明日、仕事場に行ったらもう一度再起動してみる事にします。


>>上で書かれてる事は私には全く意味が分かりません(汗)
>>.zipに変える事はできるのですが、そのままでは中身が見れなくなります(私が意味を理解できていないのかな?)
>
> .xlsx ファイルをバイナリエディタで開いた場合、
> ファイルの先頭 8 バイトが 50 4B 03 04 14 00 06 00 なのです。
> https://www.filesignatures.net/index.php?page=search&search=504B030414000600&mode=SIG
>
> そして、先ほど貼ってもらった文字化けデータの中にも、
> 50 4B 03 04 14 相当の文字列が含まれていたので、
> 「ファイルの先頭でもないところに、何故このようなバイナリが?」と不思議に思ったもので。

すみません、ここは私の知識では何の事なのか?、意味を理解できません(汗)


>>.zipに変える事はできるのですが、そのままでは中身が見れなくなります(私が意味を理解できていないのかな?)
> Office 2007 以降の .xlsx ファイルや .docx ファイルは、
> 内部的には .zip ファイル形式の一種です。
>
> そのため、ファイルの拡張子を.zip に変更してから
> エクスプローラーで開くと、ワークブック内に貼った画像や
> 設定情報をファイルとして取り出すことができるようになっています。
>
> そしてファイルそのものが破損していれば、拡張子を .zip にしたとしても、
> エクスプローラーで開けないことになります。その確認のつもりでした。
>
> とはいえ、Excel ファイルとしては破損していても .zip として開ける事はありますし、
> そもそもファイルが破損していたなら、Excel で開くときにエラーメッセージが出るはずなんですよね…。

ここは.zipに書き換えてから開こうとすると圧縮ソフトが入ってるので「ここに解凍しますか?」というようなメッセージが出て開く事ができなかったのですが
明日、仕事場に行ったら、他のアプリケーションで開いてみる事にします。


>>ストアアプリ版というのは、どんな物の事ですか?(まるで知識がありまぜん)
> http://www.kk-tomiya.co.jp/publics/index/65/
> https://curio-shiki.com/blog/office/office-storeapps-to-desktop-version

これも書いていただいたサイトを見ながら確認してみます。


>>現在、参照の追加の中では
>>Microsoft Excel 9.0 Object Library
>>これが一番大きいのですが
> やはり、Office 2019 がストアアプリ版なのでは無いでしょうか。
> https://gomitaka0.hatenablog.com/entry/2020/01/23/141500
>
> もしもデスクトップ版の Office なのに、古いバージョンのライブラリしか表示されないのであれば、
> 後から Office 2000 をインストールしたことで、ファイルやレジストリの一部が
> 古い情報で上書きされてしまい、元々入っていた Office 2019 が破損した可能性が思い当たります。

>>もし次、何か試してみるとすれば、Access(Office2000)をアンインストールしてみる事でしょうか?
> バージョン共存による汚染の場合は、OS そのものから再セットアップした方がよいのですけれどね。
>
> それが面倒な場合は、両方の Office をアンインストールしてから、
> あらためて最新版のみを入れなおすことを検討してみてください。

なるほど
後から古いバージョンのOfficeを入れた事で、新しいバージョンの参照が消えてしまった可能性が有るんですね?

では試しに時間の取れる時に、Office2019も2000もVisualStudio2019も全てアンインストールしてから、Office2019とVisualStudio2019を再インストールしてみる事にします。
もしそれで改善できれば、Accessは新しいのを購入してインストールする事にします。
引用返信 編集キー/
■98280 / inTopicNo.14)  Re[6]: VBでExcelを開くと文字化けするようになった
□投稿者/ くま (21回)-(2021/10/27(Wed) 01:41:33)
2021/10/27(Wed) 01:45:23 編集(投稿者)
2021/10/27(Wed) 01:44:44 編集(投稿者)

横から失礼
私も以前違うバージョンのOfficeを入れておかしくなった事があります。

1台のPCに複数バージョン入れる際には、気を付けなければならい事がいくつかあります。
特殊な場合以外避けた方がよいかと思います。
■異なるバージョンの Office を同じ PC にインストールして使う
https://support.microsoft.com/ja-jp/office/%E7%95%B0%E3%81%AA%E3%82%8B%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%81%AE-office-%E3%82%92%E5%90%8C%E3%81%98-pc-%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%A6%E4%BD%BF%E3%81%86-6ebb44ce-18a3-43f9-a187-b78c513788bf

Office系を完全にアンインストールする場合ツールが必要な場合があります
たしかOffice2000でもツールがあったはずなんだけど...見つけられませんでした。

■PC から Office をアンインストールする
https://support.microsoft.com/ja-jp/office/pc-%e3%81%8b%e3%82%89-office-%e3%82%92%e3%82%a2%e3%83%b3%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%99%e3%82%8b-9dd49b83-264a-477a-8fcc-2fdf5dbf61d8?ui=ja-jp&rs=ja-jp&ad=jp

一応Office2010までは対応しています。

削除の順番は
1. Office2019
2. Office2013
3. Office2000(?)
アンインストール後、一度VisualStudioの参照でExcelやAccessの参照が消えている事を確認してください。
あとOfficeの追加機能でインストールした分の削除もお忘れなく。(アドインとか)

これ以外と手間で、本当ならOSの再インストールからするのが確実です。
(レジストリや設定ファイル等に変に上書きされている為)

Officeを再インストールする際は32bit版と64bit版間違わないようにして下さい。
-------------------------------------------------
ここからは私の場合の話なので聞き流して下さい

私の場合
Access2000とExcel2013の混合でした
ソフトはうまく動いているのですが、参照して使う機能と追加機能(アドイン)がうまく動きませんでした
アンインストールしたのですが参照機能とアドインがレジストリ上でおかしくなった為
完全削除ができなくなり結局OSごと再インストールしました。
後の調査でインストール先を変更してもダメという事が分かったので
結局同一バージョンにそろえました。

引用返信 編集キー/
■98281 / inTopicNo.15)  Re[3]: VBでExcelを開くと文字化けするようになった
□投稿者/ 大谷刑部 (156回)-(2021/10/27(Wed) 09:48:43)
No98274 (masaX さん) に返信
> 元々は2005で作ったプログラムなのですが、その後2015を入れて同じコードですが作り替えてますので
> 決して一気に2019にした訳では無いのですが、2015だと.NetFrameworkはいくらになってるんでしょう?

VSのバージョンはあくまで間接的な問題なので、問題が起こる前に2015だったとすれば無理やり古く戻す必要はありません。
.Netのバージョンはあくまでプロジェクトごとに持ってる情報なので、VS側の選択肢にあって、物理的にインストールされてれば古いバージョンでもコンパイルは出来ます。
今現在どのバージョンが選択されてるか、またどのバージョンが選択可能かは(プロジェクトのプロパティーを)確認された方がよろしいかと思います。
VS2015だから.Netはいくつというような一対一の関係にはありません。
意識するしないに関わらず、選択したバージョンの.Netでコンパイルしてることになります。

色んな環境を一篇に変えてる印象があるので、一つ一つターゲットを絞って検証した方がいいと思います。
元々の問題は文字化けだったと思うので、汎用オブジェクト型をキャストするか、Excelのオブジェクトをダイレクトに使うかはおそらく関係ありません。
遅延バインディングで動いてる実績があるなら、そのままで他の環境問題を一つ一つ試してください。
色々変えすぎて問題を大きくしてるようにしか見えません。


引用返信 編集キー/
■98282 / inTopicNo.16)  Re[4]: VBでExcelを開くと文字化けするようになった
□投稿者/ masaX (9回)-(2021/10/27(Wed) 13:54:40)
解決いたしました。

やってみた内容としましては

まずAccess(Office2000)はそのままで、Office2019をアンインストールせずに再インストールし
VisualStudio2019はアンインストールしてから再インストールしてみました。
これでVisualStudioの参照追加でExcelの新しいバージョンが出てくるかを見てみたのですが、古いバージョンしか無く、おそらくこれではダメだろうとは思いながら、プログラムを実行させてみたのですが、やはり改善されず。

次は先にAccess(Office2000)をアンインストールしてから、Office2019を再インストール(アンインストールせず)し、VisualStudio2019も再インストールし直して、VisualStudioの参照追加を確認すると、Excelの古いバージョンがすべて消えて、Excel 16.0 が現れました。
これでいけるかも?と思い

xlApplication = CreateObject("Excel.Application")
このコードだけ
xlApplication = CreateObject("Excel.Application.16")
と書き換えて実行してみたところ、問題なく開いてくれました。


魔界の仮面弁士さん
大谷刑部さん
ビール飲みさん
くまさん
大変お世話になり、ありがとうございました。
今回は非常に勉強になりました。

Accessに関しては新しいものを購入する事にします。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -