質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

1299閲覧

VBA等のExcelのマクロについて、外部から呼び出したvbaで参照できませんか?

NEWBIEEBIEE

総合スコア62

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

1クリップ

投稿2018/05/09 03:36

編集2018/05/09 04:52

私のやりたいことは、Excelのあるbookにあるマクロを、他のbookのマクロ記述部分に移植することを自動ですることです。

Excelでc#(VB.NET)からの多言語からアクセスできるのはせいぜい「セル」ぐらいであることは知っているのですが、 

vbaをc#(VB.NET)から実行できるということを聞き(https://webbibouroku.com/Blog/Article/run-macro)、
じゃあvbaからなら「.dll」等を経由して(https://www.ka-net.org/blog/?p=5464)(こちらの事例はエクセルが不要?と書いてあるが不明 http://nami-it.net/archives/5750154.html)

他のbook内に組こまれているvbaを参照できるのではないかと単純に思い、探してみましたがないので、質問しました。

vbaを他言語からのバッチ処理として動作させる上で、実行できる範囲について教えてください。

(ここでいう実行できる範囲というのはvbaを使って、他のbookのvbaをテキストのごとく持ってきて貼り付けられることができたりするのかとか、それとも間接的に移植が可能であるような機能があるのかとかです。) 
宜しくお願いします。

他参考にしたもの
(https://stackoverflow.com/questions/40956465/vba-to-copy-module-from-one-excel-workbook-to-another-workbook)(一応マクロを別のワークブックにコピーするということで書かれているが、全く処理の内容が把握できない。これで別言語から呼び出して、別のエクセルにマクロが適用できるのか?)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/05/09 04:15 編集

C#はタグに必要そうに思いますが、要件的にはどうなのでしょうか。 また、調べてみたこと、やってみたこと(そのソースコード)を具体的に追記してください。また参考先サイトがあればURLも質問に追記してください。既に見た先が回答についてしまうと無駄なやり取りが発生しますし、もしかしたら参考記事の理解が間違っているために解決に至れていないのかもしれません。https://teratail.com/help/question-tips#questionTips1-2
guest

回答2

0

ベストアンサー

Excelに対するCOM操作で、

  • モジュール内のコードを文字列として取得・設定
  • モジュールのインポート・エクスポート

などを行うことはできます。

質問に記載されている
https://stackoverflow.com/questions/40956465/vba-to-copy-module-from-one-excel-workbook-to-another-workbook

Zuishinさんの回答にある
Excelマクロ抽出スクリプト - Qiita
がCOM経由での操作の例になります。

該当の処理を行うためのオブジェクト群のタイプライブラリはExcelとは別となっており
Microsoft Visual Basic for Applications Extensibility 5.3のライブラリを参照する必要があります。

制限

COM経由で操作する場合は予め

  • Excelのセキュリティ設定の変更
  • VBAのプロジェクトにパスワードが設定されている場合パスワードの解除

をしておく必要があります。

上記Excelマクロ抽出スクリプト - Qiitaの記事内では
Excelのセキュリティ設定の変更の方法および、パスワード解除の自動化も記載されています。

参考

以下PowerShellのコードですがおおよそのイメージは掴めるかと思います。

posh

1# Excel取得 2# Excel.Application 3$xl = [System.Runtime.InteropServices.Marshal]::GetActiveObject('Excel.Application') 4 5# Excel.Workbook 6$wb = $xl.ActiveWorkbook 7 8# 以降セキュリティの制限の解除が必要 9# VBIDE = Microsoft Visual Basic for Applications Extensibility 5.3 10# VBIDE.VBProject 11$project = $wb.VBProject 12 13# VBIDE.VBComponent = モジュール 14$module1 = $project.VBComponents.Item('Module1') 15 16# VBIDE.CodeModule = モジュールのコード部分 17$codeModule = $module1.CodeModule 18 19# System.String 全行を文字列として取得 20$codeTxt = $codeModule.Lines(1, $codeModule.CountOfLines) 21 22Write-Output $codeTxt

投稿2018/05/09 12:00

imihito

総合スコア2166

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

NEWBIEEBIEE

2018/05/09 12:03

わかりやすい例を有難うございます。参考にさせて頂きます。
NEWBIEEBIEE

2018/05/09 12:42

色々な回答を頂き有難うございます。どれもとても貴重な意見でした。今回、基本的な事項もさることながら、自分は他処理系からの呼び出しを懸念していたため、他回答者のかたには失礼しますが、こちらのご意見を今回BAにさせて頂きます。失礼します。
guest

0

Windows には COM オートメーションという技術があります。
これは COM オブジェクトとして OS に登録されたプログラムの公開されたメソッドとプロパティを他のアプリから使えるというものです。

Excel は COM を公開しているので C# などを使って様々な処理を行うことができます。
具体的に何ができるかは Excel オブジェクト モデルの概要 を参照してください。

ブックに含まれたマクロのコードにアクセスするメンバーはざっと見たところ見あたりませんでしたが、Excelマクロ抽出スクリプト では仮想キーコードを送ることで実際にキーボードから作業するのと同じ手順でマクロを抽出しています。

投稿2018/05/09 06:17

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

NEWBIEEBIEE

2018/05/09 06:20

回答有難うございます。リンクをちょっと見てみます。また失礼します。(全部が初学であるが故)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問