web-dev-qa-db-ja.com

#if、#else、#end if ... VBAでハッシュ記号はどういう意味ですか?

私は、ファイルがSharePointからチェックアウトできるかどうかを確認するコードを書いています。そうでない場合は、ユーザーに警告し、ファイルが他の誰かによって使用されており、誰が使用しているのかを伝えます。によって使用されています。

このサイトでコードの一部に出くわしました: http://www.xcelfiles.com/IsFileOpen.html#anchor_37

コード自体はかなり良く、テストシナリオで機能するように見えるので、自分の目的に合わせてコードを適応させる予定ですが、使用されている構文の一部を理解するのに苦労しています。

#If Not VBA6 Then

'// Xl97

For i = j - 1 To 1 Step -1

    If Mid(strXl, i, 1) = Chr(0) Then Exit For

Next

i = i + 1

#Else

'// Xl2000+

i = InStrRev(strXl, strFlag1, j) + Len(strFlag1)

#End If

コードの機能は理解していますが、「#」記号の意味がわかりません。

その使用の別の例は次のとおりです。

hdlFile = FreeFile

Open strPath For Binary As #hdlFile

strXl = Space(LOF(hdlFile))

Get 1, , strXl

Close #hdlFile

これには本当に明白な答えがあると確信していますが、それは非常に曖昧であるため、グーグルの尻の痛みであるものの1つです。 :(

どうもありがとう、

スプラット

23
Splatgore

ハッシュ記号は、プリプロセッサコマンドを表します。これは、コンパイル前に処理されるコマンドであり、基本的に動的/条件付きコードを生成します。これらのタイプのコマンドは、クロスプラットフォームプログラミング技術を管理するためにC/C++などの言語でよく使用されます。一般的な使用法は、特定の環境またはプラットフォーム(VBA、Windows、MacOSXなど)を確認してから、プラットフォーム固有のコードを実装することです。

http://en.wikipedia.org/wiki/Preprocessor

29

ハッシュは、それがディレクティブであることを示しています。文字通りコードをコンパイルに含めるか、コンパイルから除外するために使用されます。

http://msdn.Microsoft.com/en-us/library/7ah135z7.aspx

それはvb.netのためのものではありません。同じコンセプトだと思います。

4
Joshua Evensen

受け入れられた答えは、最初のコード例がコンパイルディレクティブであるということです。

他の誰かがこの質問に出くわした場合に備えて、2番目のコード例は別のものであると指摘する価値があります。この場合、これらはテキストストリームを識別するために使用されるファイル番号です。以下のコマンドのコンテキストで使用されていることがわかります。これらはコンパイラ指令とはまったく関係ありません。

「c:\ test.txt」を開いて入力として#hdlFile入力#hdlfile印刷#hdlfile書き込み#hdlfile閉じる#hdlfile

1
Eric Nolan