🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

サクラエディタ

サクラエディタは、日本製のWindows向けテキストエディタでオープンソースで提供されています。カラー強調表示やキー操作の自動実行など多彩な機能が特徴。多くの文字コードに対応しており、アウトライン解析も可能です。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

WSH

WSH(Windows Script Host)とは、Windows上でテキストファイルに記述したJavaScriptやVBScriptなどのスクリプトを実行するホスト環境のことです。COMを通じたレジストリ操作やWMIへのアクセスが可能で、複雑な処理も行うことができます。

Q&A

解決済

2回答

9890閲覧

サクラエディタのためにjavascriptでマクロを書くと「Editorが宣言されていない」というエラーがでます

tomato21

総合スコア6

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

サクラエディタ

サクラエディタは、日本製のWindows向けテキストエディタでオープンソースで提供されています。カラー強調表示やキー操作の自動実行など多彩な機能が特徴。多くの文字コードに対応しており、アウトライン解析も可能です。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

WSH

WSH(Windows Script Host)とは、Windows上でテキストファイルに記述したJavaScriptやVBScriptなどのスクリプトを実行するホスト環境のことです。COMを通じたレジストリ操作やWMIへのアクセスが可能で、複雑な処理も行うことができます。

0グッド

0クリップ

投稿2019/12/29 06:09

編集2019/12/29 07:26

###実現したいこと
サクラエディタというテキストエディタで使えるjavascriptで書いたマクロを作りたいと思っています。

###問題
VBAマクロには慣れているのですが、javascriptは初心者なため、他の方のブログを参考に既存のコードをまずはコピペしてサクラエディタで実行しようとしました。ですが、「Editorが宣言されていません」というエラーがでます。

###考えてみたこと
パスが通っていないとか、必要なライブラリが入っていないとかが原因かとも思ったのですが、WSH(Windows Scripting Host)というものもWindows98 以降であれば、標準でインストールされているようですし、何が問題なのか見当がつきません。

どなたか解決方法をご教示いただけませんでしょうか。

参考リンク

サクラエディタの公式ヘルプ ― WSHマクロ(JScrpt/VBScript等)

サクラエディタのマクロ(JavaScript)で繰り返し業務を少し改善

サクラエディタ:JavaScriptでマクロ実装(置換編)cで終わる行のみ置換する。

###実際のコード

Editor.InsText("マクロから、こんにちは。");
function sakuraReplace(str00) { var i=0; var lines=""; var str01=""; lines = str00.split(/(\r|\n|\r\n)/); // 改行コードで分割して変数に代入 for (i in lines) // 分割したライン数をループ { str01 += lines[i].replace(/^.*c$/,'【選択されていた文字を置換しました。】',6) + "\r\n"; } return(str01); } var str00 = Editor.GetSelectedString(0); // 選択部分を変数に代入 if ( str00 !== "" ) Editor.InsText(sakuraReplace(str00));

追記

エラー画面のスクリーンショット

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

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

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

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

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

imihito

2019/12/29 06:46

どのようにして記述したマクロを実行しましたか?
tomato21

2019/12/29 07:12

「設定→共通設定→マクロ→左下の設定フォルダ→開く」を選択し、当該.jsファイルを選択したところで「Editorの宣言がありません」というエラーがでました。実行というより、登録しようとしたときにエラーがでました。上記2つのコードともにです。 ですが今、質問を頂いて改めて、その方法が間違っていることに気づき、改めて以下※の方法で試したところ、一つ目のコードは機能しました(!ありがとうございます!)が、2つ目のコード(function sakuraReplace(str00))の.jsを実行しようとすると同じエラーメッセージがでました。 ※「設定→共通設定→マクロ→マクロ一覧に.jsファイルのあるパスを入れる→下方のFileのプルダウンからファイルを選択してリストに登録」、共通設定をいったん閉じて「ツール→登録済みマクロ→マクロ.jsを選択」。
Orlofsky

2019/12/29 07:15

ここの掲示板は書き込みを修正できますから、質問を修正してください。
tomato21

2019/12/29 07:20

ご助言ありがとうございます。対応します。
tomato21

2019/12/29 07:29

imihito様、Orlofsky様、 改めてありがとうございました。書式を修正いたしました。よろしくお願いいたします。
guest

回答2

0

ベストアンサー

私の環境(サクラエディタ ver2.2)では、「実際のコード」そのままで問題なく動作しました。

エラーメッセージの「[Line 15] 'editor' は宣言されていません。」から推測するに、実行しているコードと「実際のコード」は異なるのではないかと推測します。

このエラーメッセージの'editor'の箇所には、実際に使用されている識別子が表示されます。
'editor'と表示された、ということはEditorではなくeditorとなっているのでしょう。

そして、JScript は VBA と異なり、大文字小文字に厳密な言語です。
そのためEditoreditorは別の意味となります。

一度コードを確認・修正し、サクラエディタを一度完全に終了したうえで確認してみてください(サクラエディタにはマクロのファイルのキャッシュ機能がありそうなので、完全に終了してから確認してください)。

投稿2019/12/29 08:57

編集2019/12/29 09:12
imihito

総合スコア2166

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

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

tomato21

2019/12/29 09:26

ありがとうございます。確かに15行目がeditorとなっており、修正すると解決しました。こんなことでお騒がせして不甲斐なく思いますが、エラー対応時に留意すべき観点を多く学ばせていただきました。心より感謝いたしております。 補足 ・editor(小文字)になった経緯もわかりました。2019/12/29 16:12にご説明しました、当初間違った方法でマクロを登録しようとしていた際、解決策を模索するなかで「var editor = Editor;」という宣言を使った[例](https://qiita.com/deigo/items/1bd8f7051d5515849dc6)を目にして、真似てみたという経緯がありました。それでもエラーが出たので宣言文は削除したものの、15行目のeditor(小文字)を忘れていたのだと思います。 ・実際のコードを記入する際、参考にしたブログのものをコピーしてしまったかもしれません。こちらで質問をする際には、本当に「実際の」コードを貼ることが非常に大事であることを学びました。
imihito

2019/12/29 09:46

解決したようで何よりです。 AkitoshiManabe さんの指摘通り、元のJScript のコードの書き方で一般的でない部分もあるため、勉強してそちらの方も修正しておくと良いと思います。
tomato21

2019/12/29 09:55

そうなのですね。修正いたします。最後に「一般的でない書き方でも動いてしまう」ということまで教えて頂き、今後の学びのためにも大変勉強になりました。貴重なお時間ほんとうにありがとうございました!
guest

0

ご質問に追記された画像のダイアログより、「15行目でエラー検知した」とのことです。

該当する箇所が、次の行のいずれかになります。
※コードブロックはMicrosoft社の独自仕様なので JScript と表記しています

JScript

1var str00 = Editor.GetSelectedString(0); // 選択部分を変数に代入 2if ( str00 !== "" ) Editor.InsText(sakuraReplace(str00));

試しに、以下の2行だけが有効になるようにコメントアウトして実行してみてください。

JScript

1/* 2 omitted 3*/ 4var str00 = Editor.GetSelectedString(0); 5//if ( str00 !== "" ) Editor.InsText(sakuraReplace(str00)); 6if ( str00 !== "" ) Editor.InsText("差し込む文字");

無事に「差し込む文字」がエディタのカーソル位置に挿入できれば、コメントアウトした sakuraReplace() に問題がありそうです。

このsakuraReplace()関数内で気になったのは、2点です。

  1. 配列に対して for in 文を使っていること。

配列要素を走査するには for ( i=0; i<lines.length; i++ ) を使ってください。
2. return 文を return()関数のように記述している点。
ステートメントとして記述してください。

投稿2019/12/29 08:43

AkitoshiManabe

総合スコア5434

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

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

tomato21

2019/12/29 09:43

ありがとうございます。imihito様への回答に詳細を書かせていただいたのですが、実はeditorとEが小文字になっていたことが原因のようでした。こんなことでお騒がせして不甲斐なく思いますが、コメントアウトをもちいた検証法やJSCriptの意味など、多くのことを教えていただけて、大変勉強になりました。貴重なお時間をどうもありがとうございました。 補足 ・コメントアウトをもちいた検証も行いましたが、やはり[Line 19]'editor'は宣言されていません。とエラーがでました。 ・配列要素の扱いやreturn文についても大変勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問