:関数
とVBAエディタで
から文字列を返す
https://msdn.microsoft.com/en-us/library/office/gg278535.aspx
...>オフィスを共有>オフィスVBA言語リファレンス> Visual Basicの概念トピック
:
を(表示) - オブジェクトブラウザ - VBA - 文字列
この機能は多くのフォーラムで議論されているため、人々が使用しています。
答えて
あなたの質問に対する答えは、「Accessに存在する」という意味に依存します。我々はアクセスVBA開発環境でイミディエイトウィンドウを開き、
?Replace$("I like tofu!", "tofu", "bacon")
を実行して、我々は
I like bacon!
を取得した場合ので、はっきりReplace$
機能は、アクセス自体に 『存在する』ん。我々は外部アプリケーション(例えば、VBScriptの、.NET、...)からのAccessデータベースに対するクエリでReplace$
を使用しようとした場合しかし、我々は混乱に追加
Undefined function 'Replace$' in expression.
を得るだろうという事実であります古い "Jet" ODBC/OLEDBドライバはReplace
機能をサポートしていませんでした(ドル記号なし)が、新しい "ACE" ODBC/OLEDBドライバは機能します。 (どちらも味はReplace$
をサポートしています。)だから、
SELECT Replace([Name], 'Gordon ', 'Gord ') AS newName FROM ...
ようなクエリがVBA.Strings
に、我々はODBCドライバを使用する場合
Driver={Microsoft Access Driver (*.mdb, .accdb)}
ではなく、我々は
Driver={Microsoft Access Driver (*.mdb)}
を使用する場合の機能を動作しますモジュールがVBAによって内部的にどのように処理されるかは「特別な」ものです。ほとんどの場合、型ライブラリには実際には2つのバージョンがあります。String
(末尾が$
)を返し、バージョンがVariant
を返します。内部的にこれらの関数のペアとして宣言される - 例えば、Right
(vbe7.dllタイプライブラリから):
[entry(618), helpcontext(0x000f6ea5)] BSTR _stdcall _B_str_Right( [in] BSTR String, [in] long Length); [entry(619), helpcontext(0x000f656e)] VARIANT _stdcall _B_var_Right( [in] VARIANT* String, [in] long Length);
コンパイラは明らかにので、内部的に「型ヒント」と同様$
扱わ(上記の例を使用)、実際にははであり、TypeLibには関数Left$
が定義されていません。実際、VBA.Strings.Right
として宣言された関数はありません。これらは、_HiddenInterface
をという名前の特別な制限されたインターフェイスに住ん:はない
[ odl, uuid(1E196B20-1F3C-1069-996B-00DD010EF676) ] interface _HiddenInterface { ... [restricted, helpcontext(0x000f6d7c)] void _stdcall Right(); ... };
注Right$
こと_HiddenInterface
中に表示され、また他の文字列を返す関数のいずれかを実行していない。VBAコンパイラは、 "function type hint"を使用して、関数呼び出しを_B_str_Right
または_B_var_Right
に転送します。
これまでのところ、あなたの質問に何が関係しているのでしょうか。答えはReplace
実際にはではありませんは2つの異なる内部表現を持っています。それは常に、文字列を返す_HiddenInterface
上に存在しない、とVBA.Strings
モジュールに直接住ん:
[entry(712), helpstring("Find and replace a substring within a string"), helpcontext(0x000f6522)] BSTR _stdcall Replace( [in] BSTR Expression, [in] BSTR Find, [in] BSTR Replace, [in, optional, defaultvalue(1)] long Start, [in, optional, defaultvalue(-1)] long Count, [in, optional, defaultvalue(0), custom(270D72B0-FFB8-11CF-A4BD-00A0C90F26EE, 1) ] VbCompareMethod Compare);
基本的には、何のReplace$
機能は全くありません。 VBAは戻り値の型ヒントとして$
を処理しています(とにかく常にString
です)。 ODBCとOLEのドライバに関する限り、私はTypeLibによって公開されている名前に限定されており、ではないことを(TBHは実際にはあまり見ていません)と考えています。はVBAランタイムとして解釈されます異なる機能に転送します。 vbe7.dllでIDispatch
ルックアップを実行している場合、それらは単に存在しません。
Replace $はReplaceの代替名として扱われ、バックグラウンドでReplace $のような関数は内部的にはありませんか? Replace $はReplaceと同じ操作をトリガーしますか?私はこのようなものを疑った。 – darekk
@darekk - かなり。 VBAでの '$ '構文の実装は、すべての意図と目的のためのものです。私はこれが、VBがOfficeに組み込まれる以前の互換性要件の遺産であると考えています。私はそれが1のようなものになることを想像します。)識別子に '$'があるかどうかを調べます。 2.)関数が 'Variant'を実装しているかどうかを調べます。 3。)そうであれば、適切な関数にリダイレクトし、そうでなければ、関数自体を呼び出します。 – Comintern
- 1. Microsoft AccessにMicrosoft Access ADEファイルが存在することを確認するように強制します。
- 2. Microsoft Accessにテーブルが存在する場合は
- 3. Microsoft Access 2016 - レコードソースが存在しません
- 4. Microsoft AccessはフォームからVBに変数を渡します
- 5. Microsoft AccessのテキストをVBA関数に置き換えます
- 6. Microsoft Accessフォームレコードを保存
- 7. PowerShell-replace関数
- 8. SQL REPLACE関数
- 9. Microsoft AccessでのVBA - オブジェクトが存在するかどうかの確認
- 10. Pythonにプライム関連関数のライブラリが存在しますか?
- 11. この関数はPHPに存在しますか?
- 12. Powershell(replace)関数に関数を渡す
- 13. 計算列のMicrosoft Access 2016のInstrRev関数の代替はありますか?
- 14. REPLACE関数Sqlite
- 15. オープンソースのAccess ODBCドライバがlinux用に存在しますか?
- 16. Microsoft Access - コンボボックスは、名前ではなくテーブルにキーを保存します
- 17. JuliaにPython風の仮想関数が存在しますか?
- 18. Microsoft AccessのコマンドボタンからRスクリプトを実行し、Microsoft AccessからRにデータを渡します。
- 19. Microsoft Access
- 20. 関数UNIX_TIMESTAMPが存在しません
- 21. 関数が存在しません - jQuery
- 22. Microsoft Accessは自動的に数値を丸めます。
- 23. 関係は存在しませんPLPGSQL
- 24. ApplicationInsightはネームスペースに存在しません。Microsoft
- 25. JNI関数のSetStringUTFRegionは存在しませんか?
- 26. preg replace関数とhttp://?
- 27. Microsoft Accessで多対多の関係をトラブルシューティングするには?
- 28. DoCmd.Quit Microsoft Accessでハングします
- 29. Javascript replace関数 "関数ではありません"
- 30. Objective-C/iOS - C関数の存在をテストしますか?
あなたはそれが動作し、それが存在するかどうかを尋ねる?どのようにそれは既存なしで動作することができますか?あなたの質問は「なぜそれが文書化されていないのですか」の方が多いようです。しかし、なぜ迷惑?これらの '$'関数は過去からの遺物であり、今日ドル以外の関数を使用しないという実行可能な議論はありません。 – trincot
@trincot - これは実際には間違っています。* '$'の中には、Variantの代わりに強く型付けされた 'String'を返すものがあります。戻り値を 'String'に代入している場合、' $ 'なしのバリエーションを使用すると暗黙のキャストが作成されます。 – Comintern