> はじめまして、まさしぶといいます。 > 現在、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を使うのって大変ですな。
|