システムwiki

それはマクロに関して最もよく聞かれる質問の1つであるに違いありません-なぜこれらすべての年の後にマクロ言語で扱われなかったのですか?

DPaulDa 解決済 最終更新日:2022-06-13 13:05

プログラマーではなく単なるユーザーである私たちにとって、MS Wordの「マクロ」(特に記録されたマクロ)には、(1)ドキュメント内の特定の場所に移動して「いくつかのことを始めます
その時点から(新しい段落の直後に「公開」という単語を「検索」し、そのテキスト行の最後に移動して「**」を挿入するなど)、次に(ここにこだわりのポイントがあります)(2)いくつかの識別可能なまで、その一連の活動を何度も繰り返します
ドキュメント内でポイントに到達しました[例:ページの終わり; ドキュメントの終わり. 段落の終わり].
しかし、何らかの理由で、Wordマクロに「プログラマー以外の人が理解しやすい」種類の方法でそれを実行させることはできません.「範囲」や「カウント」、およびあらゆる種類のコマンドへの参照を使用する必要があることを何度か説明してきました.
「ある場所に行ってこれを行う」、次にそのような場所に行って同じことを行う」という非常に複雑な作業を行い、それを最後まで続けます....マクロを記録することで達成できることは確かにありません(論理的にはそうあるべきです.)助けを借りて、
やっとマクロをまとめて、必要なことを実行します.しかし、そのようなことをする次の機会が来るとき-おそらく1年後-私はそれらの不可解な概念をすべて忘れてしまい、もう一度記録する必要があることに気づきました
マクロが一連のアクティビティを実行してから、ドキュメント全体でそれを繰り返します.
プログラマーにとって、マクロをそのようにドキュメントで機能させるためのこれらの難解な要件をすべて理解するのは簡単ですが、「ここにいる」私たちの多くは、たまに繰り返しタスクを実行できる必要がある通常のユーザーです.特定の範囲内
マクロ言語で許可されているように見えるよりも、この種のことを達成する方が簡単であるはずだと文書化して信じてください.
誰かが、マクロが次のようなことを簡単に実行できるようにするためにマクロ言語を作成できない理由を説明できますか?
実行
[を見つけて、そこから8文字離れた別のポイントに移動し、そのポイントのテキストに変更を加えます]、次に
LOOP(同じ一連のことをもう一度行う} [ページの終わりまたはドキュメントの終わりに到達する]まで、マクロの実行を停止します.
上記の正しい構文を使用していないことは確かですが、要点を理解していただければ幸いです.この種の雑用を実行するのはそれほど簡単なはずですが、そうではありません.
マクロ言語がこのように機能しない理由、またはマクロ言語が機能する可能性がある場合、無数の一般ユーザーが苦労している(そしてインターネット全体に質問を投稿している)のに、なぜマイクロソフトが長年にわたってそれを行わなかったのかを誰かが説明できますか?これについて
具体的なコンセプトは?

返信リスト(回答:12)

1 #
GregMax

D PaulDalton、

お役に立ててうれしいです.あなたのコメントや懸念を理解しています.
残念ながら、あなたの提案が「適切な人物」になったとしても、何らかの牽引力を得ることができるかどうかはわかりません.ジェイとピーターが言ったことと一致して、私の経験では、VBAはWordが進むにつれて、完成度が低下します.もっとそして
より完全.たとえば、Word 2003で描画オブジェクトまたは図形オブジェクトを使用してユーザーとして実行できることはすべて、VBAを使用して実行できます.Word 2010で導入された新しいグラフィックエンジンでは、ユーザーが実行できることはたくさんありますが、現在は実行できません.
VBAで.これらのグラフィックでできることのほとんどは記録されていません.あなたが想像するようなものになる前に、レコーダーが消えてしまうのではないかと思います.それでも、それは良い有効なビジョンです.

頑張ってください.

2 #
Anonymous

私はいくつかの観察を持っています、そしてそれはおそらく私がここで貢献することができるすべてについてです.
マイクロソフトにこれを行わせることをさらに進めるためには、あなたのアイデアを彼らの議題に入れる必要があります.ここに投稿されたアイデアが時々注目される可能性はありますが、それを保証することはできません.実際にはMicrosoftを扱っているわけではありません.
現在の製品サイクルもわかりません.Office365サブスクリプションサービスの開発に伴い、製品サイクルは急速に変化する可能性があります.しかし、それが古いサイクルである場合、versionの詳細のほとんどではないにしても、彼らはすでにアウトラインを持っていると思います
2013年以降、その後のアイデアを考えているかもしれません.また、知的財産に関する限り、彼らが自分たちの立場を完全に確信したくないとしたら、私は非常に驚きます.
技術面では、私にとって最大の技術的な質問は、「機能の「DO」部分で何ができるか」です.(つまり、いくつかのメッセージを説明したもの)
それが「任意のマクロの実行」である場合、VBAが実行できるすべてのことを実行でき、「システム上のすべてのファイルを誤って破棄する」ための「賢明な何か」を形成します.また、無限ループ、トラップ不可能なエラーを引き起こすコードを含めることもできます-少なくともトラップ可能ではありません
VBAによる-そして間違いなく私が考えもしなかった他のことは、ユーザーを失望させるかもしれません.
ユーザーがコードの自分の部分に責任を負うことをいとわない限り、 には技術的なショーストッパーがありません.しかし、それはそのような問題が発生しないという意味ではありません.
ただし、サポートの観点からは、そのような機能を半々持つことは、控えめに言っても、少し責任があります.
もう少し詳細なレベルに行くと、以前のメッセージを読んだときに、選択や範囲などの技術的なものを避けたいという印象を受けました.問題は、ユーザーがまだVBAを作成する必要がある場合です.何かを見つけるために
次に、いくつかの単語を右に移動するか、何でも、彼らはまだそのことを理解する必要があります.さらに、一般的なケースでは、一部のコードは(たとえば)ドキュメントの本文の段落で機能しますが、フッター(たとえば)では失敗します.言い換えれば、多くの場合
ユーザーは自分のコードについてさらに理解する必要があります.
私が最初にあなたの質問を読んだとき、私はあなたが何を運転していたかについて少し異なった考えを持っていました.私にとって、「VBAの任意の部分を許可する」という扱いを回避する方法は、ユーザーが実行したいと思う可能性のある、小さいながらも強力な一連のことを特定しようとすることです(明らかに削減します).
VBAで得られる一般性)そしてそれらがそれらのことをすることを可能にし、他には何もしません.これが、レコーダーの変更が必要になる可能性があることを私が提案した理由の1つです.この機能で許可されるように設計されているものだけを記録できます.それで
この機能は、すべてのことを実現する責任があります.これを技術的に行う方法は詳細ですが、DOマクロには、内部で適切に動作するように設計された事前定義されたサブ/関数の呼び出しのみが含まれるように指定することもできます
機能の全体的な構造.または、完全に新しい、小さい、非VBA言語と、それを解釈するためのVBAを定義します.
最後に、WordとVBAについて取り組んできました.しかし実際には、繰り返し処理するための一連の機能を提供することについて話しています.WordのWebアプリversionにはそのようなものはありません.おそらく、そうなることは決してないということを意図しています.しかし
VBAがないため、「「ジャックロビンソン」で始まるすべての段落でこれを行う」などの機能をユーザーに提供することで、はるかに多くのメリットが得られると思います.

11 #
Guessed

マクロの記録は確かにそれほど素晴らしいものではありませんが、必要なことを正確に実行するマクロを作成するには、対処しなければならない微妙な複雑さがたくさんあります.残念ながら、予期せぬ行動やコンテンツがあり、それが絶望的に混乱することがよくあります.
マクロ、特に記録されたもの.
マクロ記録を「これ」で実行できない理由は、説明した内容がさまざまな方法で解釈される可能性があるためです.たとえば、マクロレコーダは次のことをどの程度正確に理解する必要がありますか.

  1. ループを1回実行するだけで作成できます
  2. 任意のことが起こるまでループを繰り返します
  3. 8文字を左に移動することを知ってください(次の単語は8文字の長さだったので、常に8文字ですか、それとも8文字だけですか)
  4. 次の検索から行っているテキストの変更を除外します

個人的には、マクロの学習に投資することをお勧めします.たとえ、マクロを使用することがめったになく、方法を忘れ続ける場合でも.少なくとも、退屈な繰り返しの仕事をはるかに面白くすることができます.これは保存されないかもしれませんが
あなたが単一の文書に時間を費やすと、それはあなたの正気を救うでしょう.

12 #
DougRob

マクロ言語をそのように機能させることができます.必要な構造を作成する機能を持たないのはマクロレコーダーです.

あなたが「特定の概念」と表現するものにはおそらく無限のバリエーションがあり、マクロレコーダーがそれらを扱うのは現実的ではありません.

応答12# ->にスキップ
10 #
DPaulDa

わかった.私はおそらくマクロレコーダーを参照することで間違いを犯したでしょう-その関与は私が提起しようとしていた実際の問題への「赤いニシン」です.例I
上記のように、多かれ少なかれ次のようになります:
実行
[を見つけて、そこから別のポイントに8文字右に移動します(または、
他の例:同じテキスト行の最後に移動します. 1行下に移動して
右の3文字)次に、テキストに変更を加えます
その場所で(そのような
言葉の変化として; フォントの変更. 段落やタブなどを挿入する]、次に
ループ
(マクロに同じ一連のことを何度も繰り返させる}
UNTIL [ドキュメント内の指定された場所に到達しました(例:ページの終わり; の終わり
セクション; ドキュメントの終わりなど)]、その時点でマクロは停止します
さらなる実行.
マクロに上記を実行させるのは、それぞれに特定の条件を入力して説明した3つのコマンドを使用するのと同じくらい簡単なはずです.
マクロに同じシーケンスを何度も実行させるためだけに、「範囲」と「カウント」(および今は思い出せない必要なもの)への参照を含める必要がある理由がわかりません.到達します(たとえば)
ドキュメントの終わり.
ですから、私の質問の大きな部分は、なぜ私がやりたいことが思ったほど簡単にできないのかという背後にある「理由」と、なぜそれが明らかに必要なのかという背後にある「理由」を知りたいということです.明らかにすべての追加のものをマクロに含める
マクロで、私がやりたいことを実行するために必要です(たとえば、「範囲」と「カウント」への参照を要求するのではなく、「最後に到達するまでそれを続けてください」と効果的に指示する必要があります.ドキュメント」).
FWIW、これが発生するのは、ほとんどの場合、すでにtableにあるか、tableになるようにフォーマットされている(区切り文字として使用するタブを挿入する場合など)大量の反復情報がある場合です.後でできるように
情報をtableに変換します).情報はScanされたOCRされたドキュメントからのものである場合もあれば、インターネット調査からのものである場合もありますが、それは常に、ある種のマクロの対象となることを可能にする何らかの方法で繰り返される情報です.
私が説明したアクション.

応答10# ->にスキップ
8 #
DougRob

そのようなことは確かに可能です.必要なコマンドを組み込むだけです

1.テキストが見つかったときに実行することは何でもします

2.手順を続行するかどうかを決定します

必要な構造は次のようなものです

Selection.HomeKey wdStory
Selection.Find.Font.Bold= True
Selection.Findで
Do While.Execute(FindText:= ""、Forward:= True、_
MatchWildcards:= False、Wrap:= wdFindStop、MatchCase:= True)= True
If Left(Selection.Style、7)"Heading" Then
Selection.Style="[太字のスタイル]"
Selection.Collapse wdCollapseEnd
Ifを終了
ループ
で終わる

上記の構造の一部(またはその代わりの何か)のIf-End Ifは、上記の1と2の基準を定義する必要がある場所です.

多くの場合、トリッキーな部分であるコードを記述しているのではなく、適用する必要のあるロジックを実行しています.

応答10# ->にスキップ
9 #
macropo

簡単な答えは次のとおりです.それは可能であり、まったく難しいことではありません.あなたの苦情は、VBAに精通していないことを示唆しています.

すべてのOfficeアプリのVBAは、Do until...Loop、Do While...Loop、While..Wendなどの複数の形式のループをサポートしています.ループに関連するアクション/パラメータを追加するのはユーザーの責任です.

FWIW、ループがどのように機能するかについてのあなたの説明は、選択ベースのアプローチを示唆していますが、これは非常に非効率的です.VBAは、コーディングに対するはるかに効率的な範囲ベースのアプローチをサポートします.いいえ、しません 範囲を操作する. 選択範囲を操作することもできますが、経験豊富なプログラマーは通常、効率を選択します.また、ほとんどの場合、ループを管理するためにカウンターを使用する必要はありません.多くの場合、カウンターは他の目的のために必要であり、
ループはそれらを更新するために使用されます.カウンターが必要になる可能性のある数少ない機会の1つは、ある種類のすべてのアイテムを削除しようとしている場合です.その場合、ここでは詳しく説明しませんが、ベストプラクティスは、コレクションを逆方向にループすることです.

応答9# ->にスキップ
7 #
DPaulDa

返信ありがとうございますが、それは私が前に言ったことを証明しています-通常の不定期のユーザーにとっては、マクロに非常に単純なことのように見えることをさせるべきであると思われるよりも複雑です.
あなたが言った:
"ループがどのように機能するかについての説明は、選択ベースのアプローチを示唆していますが、これは非常に非効率的です.VBAは、はるかに効率的な範囲ベースのコーディングアプローチをサポートしています.いいえ、範囲を操作する必要はありません. 選択範囲を操作できますが、
経験豊富なプログラマーは通常、効率を選択します.」

あなたが言ったことはすべて真実だと確信していますが、通常のユーザーは「範囲ベースのアプローチ」ではなく「選択ベースのアプローチ」が何であるかを知っており、コーディングを理解していることを前提としています.概念と構成するもの
より効率的なコーディング方法.
私の答えは、そうではなく、繰り返しのタスクを実行できるツールを必要とする通常のユーザーにとって、MSがマクロの操作をもう少し簡単にするためにできる/すべきであるように思われるということです.
おそらく問題の一部は、プログラムで提供されるヘルプです.マクロに何かをさせる方法を理解しようとしているとき、私が最初に試みるのはヘルプです.ただし、「範囲」または「選択」について「ヘルプ」として提供されているものを見てください.
-読者がプログラミングの概念をすでに理解していない限り、それは不可解です.(実際、ヘルプダイアログの下部にある「開発者リファレンス」という行に初めて気づきました.これは、期待できることではありません.
通常のユーザーには多くの「ヘルプ」があります.)
とにかく、私は風車で傾いていると思います.しかし、MSの人々が、一般ユーザーがマクロにアクセスしやすくすることや、一般ユーザーがより明確で便利なマクロ「ヘルプ」を提供できるようにすることについて、もっと多くのことを考えてほしいと思います.
プログラマーになることを学ぶ必要なしに、マクロの使用からより多くの機能を引き出すため.

応答7# ->にスキップ
6 #
macropo

VBAヘルプで「repeat」、「do」、「loop」、または「until」を検索することはありましたか?さまざまな種類のループを実装する方法だけでなく、発生する可能性のあるさまざまな問題を解決する方法もカバーする、たくさんの記事と例.オンラインにすると、
無料で利用できる豊富なリソース.

結論:プログラミングの基本を学ぶのに時間をかける必要があります.そうしないと、タイプライターのようにWordを使用するのと似ています(すべての行の終わりでを押す、インデントするためにスペースバーを使用するなど).スタイルを(適切に)使用しないでください.
フォーマットを管理します.MSがそれを「簡単」にしたわけではないからです(これらのスキルの習得は瞬間的な浸透によって起こると思われます).

PS:スレッドの基本的な前提については、タイトルごとに(マクロに関して最もよく聞かれる質問の1つである必要があります)、Web検索を実行すると、問題が発生する懸念がほとんどないことに驚くかもしれません..あなたのものが唯一のスレッドです
これが特に懸念される場合は、それが思い浮かびます.

応答6# ->にスキップ
4 #
DPaulDa

HELP(a/k/a「開発者リファレンス」)でLOOPとDOの両方を検索しました(申し訳ありませんが、「repeat」と「until」はすぐには思い浮かびませんでしたが、「until」はLOOPに関する部分で参照されていました).-「ヘルプ」を含めると何が悪かったのか
開発者以外の人のために?)そして-私が前に言ったように-私はそこにある指示と説明が私がしたいことを達成しようとする方法を私に説明するのに全く不十分であることに気づきました.戻ってヘルプのそれらの部分を見て、想像してみましたか
プログラミングのバックグラウンドがなくても理解できるかどうか?
私はまた、答えを探すためにWebで多くの時間を費やしました.そして、あなたの暗黙の検索とは異なり、私がここで尋ねたものと非常によく似た質問に出くわしました(これが私の質問のタイトルの理由でした)と応答
私が上で説明したように、これらの質問への答えは、最終的に「範囲」と「カウント」への参照を使用する必要性に帰着しました.はい、VBAコードの多くの行を使用して私がやりたいことを行う方法を説明する記事があります.これらの記事はすべて基本的に提供されています
同じ一般的な情報、そしてそれらの説明のすべては、普通の人がはるかに少ない複雑さを必要とするはずの比較的単純なタスクであると思われることを達成するために必要なものよりも複雑であるように見えました.
さて、私が自分自身を「MVP」と呼ぶことができるように、Wordの最も内側の複雑さを理解しようとプロとしての人生を過ごしたとしたら、Wordのプログラミングとスタイルの両方であなたとほぼ同じくらい熟練できるかもしれないと思います..でもやるよ
そのための時間はありませんし、それをするために時間を割くために誰かから報酬をもらっていません.
この製品の他のほとんどのユーザーと同様に、私は別の職業でフルタイムの仕事をしています.Wordは、MSのマーケティングマシンが宣伝するのと同じくらい簡単にタスクを実行できることを期待して購入したツールです.しかし、
過去14年間、私はWordを使用してきましたが、宣伝されているほど単純で簡単なことはなく、通常のユーザーが効果的なマクロ、特にドキュメント全体で繰り返し実行するマクロを実行する必要がありました.
このスレッドでは、MSがマクロ機能をそのままにして、一般ユーザーがアクセスしやすくするためにマクロ機能をそのまま使用することを選択した理由について、質問と実際の説明を丁寧に求めました.の他の応答
このスレッドは一般的に役立つように努めてきましたが、私が求めていた説明をまだ受け取っていないと思います.
あなたの傲慢な反応は不必要で、無反応で、役に立たなかった.

応答4# ->にスキップ
5 #
macropo

私は、Wordはもちろん、スタイルの使用やマクロの書き方など、MS製品に慣れるために誰からも報酬を受け取ったことはありません.私は時間をかけて完全に自分のイニシアチブで学びました.それが私たちの違いだと思います.何、
正確には、MSは、学習する傾向がない人のためにループの使用を簡単にするために行うことになっていますか?

応答5# ->にスキップ
3 #
DPaulDa

「正確には、学習する傾向がない人のためにループの使用を簡単にするために、MSは何をすべきでしょうか?」
プログラミングの概念を十分に理解していないWordユーザーが「学ぶ傾向がない」という推測は誤りです.それは、ドライバが道路をまっすぐに運転するだけの車を提示される可能性があると言っているようなものです.
その車を左または右に曲がらせることができるので、彼は「傾斜」を持っている必要があります-そして時間をかけて-それにステアリングメカニズムを構築して追加する方法を学びます.私はそれを疑っていますが、十分な時間で、私たちの多くは このようなステアリングメカニズムを構築して車に組み込む方法を理解できます.私たちのほとんどは、効果的なステアリングメカニズムがすでに組み込まれている車を運転できるようにしたいと考えています.
そして、それが私がMS製品のマクロ機能についてどのように感じているかです.その機能は、一般ユーザーにとってよりアクセスしやすいものにする必要があります.
それで、あなたの質問の非蔑称部分(「ループの使用をより簡単にするためにMSは正確に何をすべきか」)に応答しようとするために、ここにいくつかの考えがあります:

  • 現在(プログラマー以外のユーザー向け)存在するため、Word(およびExcelなど)のマクロ機能は、制限が多すぎる(Macro Recording)と複雑すぎる(生でやや難解なVBA)の2つの極端なもののいずれかとして存在します.プログラミング言語).マクロ機能は提供します
    「中間」ツールはなく、(「それを行うのは大変な作業になる」以外の何らかの技術的禁止事項がない場合)、マクロ機能はプログラマー以外の人にとって本当に便利になるはずです.
  • Microsoftは、Wordの「非プログラマー」ユーザーが「単純な」マクロをより簡単に作成するために使用できる、より複雑な機能(単純なマクロ記録の機能を超える)のリストを特定するためにユーザー調査を実施する必要があります.することが
    より効果的(私が特定したループまたは反復機能の実行など). しかし、「標準化」できるそのような機能セットは他にもたくさんあると思います.おそらくマクロに関する多くのユーザーの質問を扱うMVPとして、
    あなただけでも、おそらく少なくとも5~10個のそのようなアイテムを思い付く可能性があると思います.MSがこの問題に焦点を当てることで、どれだけのアイテムが特定されるか想像してみてください.
  • これらの機能セットのどれを汎用マクロオプションにプログラムできるかを決定し、訓練を受けたプログラマーが取る無数の変数に関する標準化された一連の仮定をそれぞれに課す方法で、これらの「オプション」を作成およびコンパイルします.
    考慮に入れる(基本的に、既存のマクロに追加することにより、このオプションが適用されるマクロで明示的に説明されている場合を除いて、何も「検出」または「変更」されないようにオプションをプログラムします).
    >
  • 適切な操作上の説明/警告を、おそらくツールチップとして、または「続行しますか(Y/N?)」の要件とともに含めます(例: [ループ/繰り返し機能リクエストを適用するオプションの場合]"このオプションを選択すると、影響を受けるマクロが現在の全体で実行されます [選択したドキュメント、段落、セクション、ページなど].(?-などの予期しない条件に注意してください リストに掲載できれば、プログラミングで予想できるようです)、予期しない結果や不完全な結果が生じる可能性があります.結果を注意深く確認して、意図したことが達成されたことを確認してください.そうでない場合は、
    VBAを使用したマクロが必要になる場合があります.」
  • これらのマクロオプションを、もちろんマクロレコーダーを使用して作成されたものを含め、ユーザー自身の単純なマクロに自動的に(追加/課す/ラップアラウンド)できる機能の選択肢としてユーザーが利用できるようにします.これを行う1つの方法は
    [マクロオプション]ボタンを編集するためにマクロが選択されているダイアログに追加します.このボタンを選択すると、強調表示されたマクロに適用できる利用可能なマクロオプションのリストが生成されます.

したがって、上記は、特に「ループの使用をより簡単にする」方法を含め、マクロ機能を改善するためにMSが何ができるかについての私の考えです.

このようなことを行うことで、MSはWord内(およびVBAマクロを使用する他のアプリ)のマクロ機能を、通常の(プログラマー以外の)ユーザーにとってはるかにアクセスしやすく、効率的で、便利なものにすることができると思います.
に対するそのような機能の改善 これらのApplicationのマクロ機能は、過去のいくつかのversion変更で行われた「製品の機能強化」であると思われる外観上の変更よりも、無限に価値があり、有用な製品の改善になります.

さて、もしあなたがこれらの考えをマイクロソフトの誰かの注意を引く方法を知っているなら、この種のことをすることの価値を認識し、それを真剣に考えさせる立場にあるでしょう、私は-そして私は他の多くの人を疑っています
-そうしていただければ幸いです.