ワードのマクロ内でReplaceがエラーになる。
Wordのマクロを使おうとしてトラブった話です。
WordのVBAのコード内でReplaceを使おうとするとエラーになった話です。
「ワード、マクロ、Replace」や「Word、マクロ、文字列、置換」などで検索すると、ワードの文書本体の文章を置換する方法が検索で引っかかり、マクロのコード内で文字列を置換するというのが見つからず苦労しました。
Excelのマクロに貼り付けるとちゃんと動くのにWordのマクロに貼り付けるとエラーになったのでなかなか解決できませんでした。
簡単な文字列の置換ができない。
Sub ReplaceString() Dim myString As String myString = "置換前の文字列" myString = Replace(myString, "置換前の", "置換後の") '置換実行 MsgBox myString End Sub
Excelのマクロで上のコードを実行すると、メッセージボックスに「置換後の文字列」と出力され、文字列が置換されます。
しかし、ワードのVBAに貼り付けると、下のコードのように「Replace」の「R」が小文字の「r」となってしまい、「replace」となっています。
Sub ReplaceString() Dim myString As String myString = "置換前の文字列" myString = replace(myString, "置換前の", "置換後の") '置換実行 MsgBox myString End Sub
そして、このコードを実行すると、「コンパイル エラー」「引数の数が一致していません。または不正なプロパティを指定しています。」というエラーになってしまいました。
Google先生で検索してみますが、ワードマクロでの「Replace」や「置換」はワードの文書内の置換ばかりヒットしてワードのVBAのコード内での文字列の置換はヒットしません。
おそらく、エラーは、ワード内の文書を置換するためのワードのマクロの「replace」がいたずらしているんだろうと思われます。
最後の砦、ChatGPT。
ChatGPTに聞いてみますが、なかなか答えに辿りつけませんでしたが、「ReplaceのRが小文字の r になってしまいます」と聞いたところ、解決しました。
「Replace()メソッドを呼び出す際に、 R が r と小文字になってしまっているため、VBAがReplace メソッドを認識できなくなっているためです。正しいメソッド名で呼び出すように修正する必要があります。」
ということのようです。そして、
「Replace()メソッドを呼び出す前に、VBA.を付けることで正しいメソッド名を明示的に指定しています。これにより、VBAは Replace()メソッドを正しく認識し、実行することができます。」
とのことでした。
ちゃんと動いた修正後のマクロのコード
replaceを「VBA.Replace」にしなさいというChatGPTのご指導でしたが、入力してみると、「VBA.replace」とRは小文字になってしまいます。
でも、これで実行するとちゃんと動きました。
Sub ReplaceString() Dim myString As String myString = "置換前の文字列" myString = VBA.replace(myString, "置換前の", "置換後の") '置換実行 MsgBox myString End Sub
実行すると、「置換後の文字列」となり、正しく置換ができました。
プログラミングについては、ChatGPT先生が優秀ですね。
Excelのマクロは多くのブログやサイトで紹介されていてGoogleで検索すれば大抵は解決しますが、Wordのマクロはやっぱり扱っているサイト数が少ないですね。
コメント