Re: VCからExcelのマクロ名を取得について


[コメントツリー表示を見る] [発言時刻順表示を見る]

Posted by Uz on 2001/06/07 12:45:43

In Reply to: VCからExcelのマクロ名を取得について Posted by まさしぶ on 2001/06/05 17:18:10


    > はじめまして、まさしぶといいます。
    > 現在、VCを勉強していまして、VCからExcelを
    > 操作するプログラムを作っているのですが、
    > マクロ名の取得ができなくて、手詰まりになっています。

    なんとなく無理っぽいですな。

    > book.AttachDispatch(pbooks);
    > book.Activate();
    > CString sheetname;
    >
    > pmacro = book.GetVBProject();
    > modules.AttachDispatch(pmacro);
    > psheets=modules.GetItem(COleVariant((long)1)); //ここで、メンバがないと言われます

    ないですな。

    > module.AttachDispatch(psheets);
    > sheetname =module.GetCodeName();

    CodeNameも多分希望されるないようではないと思います。

    ためしにVBやExcelVBAでやってみるとVCより簡単に検証
    できるでしょう。

    基本的には無理と考えたほうがいいと思いますが、
    どうしてもというのであれば、
    VCで実現可能かどうかわかりませんが、
    ExcelVBAでの話をしますね。まぁ、VBも同じだと思うのですが。
    参照設定で
    Microsoft Visual Basic 6.0 Extensibility
    というものにチェックを入れて、

    ActiveWorkbook.VBProject.VBComponents(1).Export "C:\a.bas"

    のコードを実行するとコードモジュールをファイルにエクスポート
    出来るので、吐き出されたファイルを自分で解析する、というのが
    ExcelVBAなら出来るので、ひょっとしたらVCでも、
    出来るかもしれません。

    ちなみにソースコードに保護を掛けてるとExport関数は失敗します。

    また、次のコードでも、関数の一覧が取れますが、
    非表示の状態(バックグラウンドで動作)でも、正しく動作するか
    テストする暇がないので、わかりません。
    (なんとなくVBE(Visual Basic Editor)なので、
    VBEの表示状態に依存しそう。)
    Dim I As Long
    Dim sOld As String

    With Application.VBE.CodePanes(1)
    For I = 1 To .CodeModule.CountOfLines
    If sOld <> .CodeModule.ProcOfLine(I, 0) Then
    sOld = .CodeModule.ProcOfLine(I, 0)
    Debug.Print sOld
    End If
    Next
    End With


    #どうしてもじゃなければ諦めた方が、無難だと思う。
    #関数の一覧を取るケースってどういう時?しかもVCで。
    #自動ドキュメント作成ツールを作ってるっているのなら
    #わかるが。

    #まぁ、何しろ、VCからExcelを使うのって大変ですな。


記事スレッド一覧