none
ExcelVBAで、パッケージオブジェクトを追加したい RRS feed

  • 質問

  • お世話になっております。arubi_momoと申します。

    Windows7 64bit  Excel2010でツールを作成しています。

    下記仕様のマクロを作成しようとしています。

    ・Aボタンをクリックすると、指定したパスのCSVファイルがパッケージオブジェクトとして、シートに貼り付けられる。

    ・ソース元のCSVファイルが破棄されても、パッケージオブジェクトの中身は見ることができる。

    Excelの機能で、挿入>オブジェクト>Package>CSVファイルを指定>OK とすると、CSVファイルがパッケージ化して追加され、上記の仕様を満たせることはわかったのですが、ExcelVBAでどのようにパッケージオブジェクトを追加できるのかがわかりません。

    マクロの記録で記録してみたところ、

        ActiveSheet.OLEObjects.Add(ClassType:="Package", Link:=False, _
            DisplayAsIcon:=False).Activate

    このように記録されるのですが、実行すると「Activateメソッドが失敗しました」のエラーが発生しますし、そもそもファイルを指定していないため、想定通りの動作にはなりません。OLEObjects.addのヘルプも見たのですが、ClassTypeをPackageとした際に、ソース元となるファイル名を指定できるようなパラメータも見つけられず、行き詰ってしまいました。

    そもそも、VBAでパッケージオブジェクトを追加できるのかなど、何かご存知の方がいらっしゃいましたら、ご教示いただければと思います。

    何卒よろしくお願いいたします。

    2014年6月11日 8:36

回答

  • 環境によるかもしれませんが、以下のようにファイル名を指定すれば勝手にパッケージ化して組込んでくれると思います。

    ThisWorkbook.ActiveSheet.OLEObjects.Add  Filename:="D:\test.csv"

    この時、ClassTypeは指定しません。

    詳しくは以下をご参照ください。

    OLEObjects.Add メソッド (Excel)

    • 回答としてマーク arubi_momo 2014年6月23日 4:36
    2014年6月12日 5:44

すべての返信

  • 環境によるかもしれませんが、以下のようにファイル名を指定すれば勝手にパッケージ化して組込んでくれると思います。

    ThisWorkbook.ActiveSheet.OLEObjects.Add  Filename:="D:\test.csv"

    この時、ClassTypeは指定しません。

    詳しくは以下をご参照ください。

    OLEObjects.Add メソッド (Excel)

    • 回答としてマーク arubi_momo 2014年6月23日 4:36
    2014年6月12日 5:44
  • ご回答ありがとうございます。

    ご指摘いただいた方法でも試したのですが、この方法で行うと、CSVファイルが使用されている状態となり、削除しようとしても「使用中のため削除できません」という旨のメッセージが表示され、削除できませんでした。そのため、パッケージ化するという工程が必要なのかなと思ったのです。

    引き続き色々と試したのですが、どうやら、拡張子がCSVだとパッケージ化されず、txtやtsvだと勝手にパッケージ化して組み込んでくれるようです。CSVは自動的にExcelに関連付けられてしまうらしく、裏でExcelが開いている状態になっているため、常にファイルが使用されている状態になっているようなのです。これはパソコン上で拡張子の関連付けをテキストエディタに変更しても同じ動作でした。Excel側の仕様なのでしょうか。。。

    詳しい原因はわかっていないのですが、拡張子txtであれば仕様を満たすことはできそうなので、一旦そちらの方向で実装してみようと思います。

    ご教示ありがとうございました。

    2014年6月12日 7:02