プロが教える店舗&オフィスのセキュリティ対策術

いつもお世話になります

Excelのマクロに、別のbookのシートにマクロ挿入する機能があります
例題として
With wb.VBProject.VBComponents.Item("ThisWorkbook").CodeModule
.InsertLines 1, "Private Sub Workbook_BeforeClose(Cancel As Boolean)"
.InsertLines 2, ""
.InsertLines 3, "Dim Fname As String"
.InsertLines 4, "Dim check As Long"
.InsertLines 5, ""
.InsertLines 6, " Sheets(""" + Sname(4) + """).Activate"
.InsertLines 7, " On Error GoTo 1234"
.InsertLines 8, " ActiveSheet.Shapes.Range(Array(""図 1"")).Select"
.InsertLines 9, " Selection.Cut"
.InsertLines 10, " ActiveSheet.Shapes.Range(Array(""TextBox 2"")).Select"
.InsertLines 11, " Selection.Cut"
.InsertLines 12, "1234:"
.InsertLines 13, " On Error GoTo 0"
.InsertLines 14, ""
        略
.InsertLines 27, " Application.DisplayAlerts = False"
.InsertLines 28, " Aapplication.Quit"
.InsertLines 29, " End If"
.InsertLines 30, ""
.InsertLines 31, "End Sub"
End With

jscript でも同じようなことは出来る機能はあるのでしょうか?
あれば、新規excelのModuleにマクロをinsertして実行させてみたいのですが

以上、よろしくお願い申し上げます

A 回答 (2件)

私は、JavaScript の知識が乏しいので、最初に、VBScriptを作ってから、やってみました。

単に記法の問題だけなのでした。

ウィルスもどきですから、私の環境では許されても、他の方の環境では許されないかもしれません。絶対的に必要な部分だけを書いておきます。これが、できない場合は、PC環境のせいであり、セキュリティ設定の違いです。


// JavaScript Document
var xlapp = new ActiveXObject("Excel.Application");
xlapp.visible =true;
var newbk = xlapp.workbooks.add();
newbk.vbproject.references.addfromguid("{0002E157-0000-0000-C000-000000000046}",5,3);
var e =newbk.vbproject.vbcomponents("ThisWorkbook").codemodule;
e.insertlines(1, "Private Sub Workbook_BeforeClose(Cancel As Boolean)");
e.insertlines(2, "End sub");
//

>今回若い技術者に教えられてJScriptを始めてみましたが、VBScriptも必要かもしれませんね
JScript とは本来使用目的が違うだろうけれども、覚えればなんとかなるのかもしれません。ドイツのエディタの会社では、VBScript 系は手放し-フリーにしてしまいました。

今、Excel 2013には、オフライン・ヘルプがないとか、VBAには、暗い影のようなものを落とし始めましたが、そこで、最近は、私も、JavaScript はなんとかしようとは思っているのですが……。PowerShell が進み始めています。

>今はエクスポートしたVBAを、インポートする方法を模索しています
別のカテで出ているのは確認しました。たぶん、できるだろうと思いますが、あえて、JavaScript で書くというのも気が進まなかったりします。VBScript のほうがはるかに違和感が少ないです。
    • good
    • 0
この回答へのお礼

すみません、夏休みで出かけていてお礼が遅くなりました
何か何までご親切に本当に感謝します
これからの開発の力になります
また、よろしくお願いします

お礼日時:2016/08/23 09:25

このご質問については、たぶんできるような気がします。

昨日から手をつけましたが、なぜか、うまくできない原因が分かりません。

>新規excelのModuleにマクロをinsertして実行させてみたいのですが

できてもいない人間がおこがましいのですが、多少の助言をしますと、それは、分かっているとは思いますが、やっているのはマクロ・ウィルスです。悪意を持てばマルウェアに変身します。そのマクロ・ウィルスの名でインターネット検索すれば、いずれはヒットするだろうと思います。
だから、コードの公開は、その性質上問題があるかもしれません。実務上は、そのようなことはしないで、テンプレートを呼び出すだけのほうが良いと思います。

>jscript でも同じようなことは出来る機能はあるのでしょうか?
インターフェイスの問題ですから、javascript自体は関係ないはずです。

今回は、それを実行するために、Microsoft Visual Basic for Application Extensibility を参照設定をしなくてはならないということです。これだけ言えば、わかる人はわかると思います。

------
なお、前回のVBカテ側の方は消えてしまったようですが、読んでいました。
あちらは、たった一点変な部分があっただけで、ほかは問題があるようには思えませんでした。JavaScript に詳しい人は、VB系には少ないので、やはり掲示板の反応が鈍いかもしれません。

FilePath(AAA)
たぶん、この部分でしょう。
それを、var fn = book1.Path();
とでもすればよいかと思いました。

JavaScript で書くよりも、機能は落ちますが、VBScriptで書くほうがずっと楽だと、私は思います。
    • good
    • 1
この回答へのお礼

すみません、お手数をおかけしました
本当にありがとうございます

やはりVBScriptですか
今はエクスポートしたVBAを、インポートする方法を模索しています
こちらもまだ解決していませんが、またご教授願えれば幸いです
自分自身、Fortran,VB,VBAと経験は長いのですが、今回若い技術者に
教えられてJScriptを始めてみましたが、VBScriptも必要かもしれませんね
本当にご返事に感謝しています

お礼日時:2016/08/17 10:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!