VBEの問題(全角ダブルクオーテーション)

VBEのエディタにはたくさんのお節介な機能があるが、どうしようもない問題がある。

ひとつが「全角のダブルクオーテーション」を入力できないというものがある。
全角で入力してもエディタが勝手に半角に変えてしまう。
全く理解に苦しむ仕様で本当に腹が立つ。

対処方法としては文字コードで指定するという原始的な方法を使うしかないようだ。

左ダブルクオーテーション:Chr(&H8167)
右ダブルクオーテーション:Chr(&H8168)

ちなみに半角ダブルクオーテーションは、半角のを4つ並べれば良い。
3つ並べて入力すると、勝手にエディタが半角4つに修正する。

Excelではないが、VBAにはおかしな仕様がある。
それはMS-WordでParagraphで書かれた文書を処理しようとした場合、半角でダブルクオーテーションを書いても勝手に全角に変換するのだ。
これでは困るので半角に変えようとして上記のことに気がついた。

-

構造体

Type 構造体名
  メンバ名 [As 型名]
  ・・・
End Type

メンバ名の下にさらにメンバ名を書くことはできない。
ただしメンバ名の型名として、既に定義した構造体名を書いても良いのでそれで代替えはできる。

なお、構造体はプロシージャや関数内で定義することはできず、モジュール単位でしか定義できない。

別の方法としてTypeを使わずにクラスモジュールを使って構造体を定義することもできる。

例えば下のように定義してみる。

Type ItemList
    Name As String
    Price As Integer
End Type

これを使うためには、例えば以下のように変数宣言できる。

Dim a(1) As ItemList

代入するには

a(0).Name = "りんご"
a(0).Price = 120

みたいに書けば良い。
ここで、Withを使うことができて

With a(1)
  .Name = "みかん"
  .Price = 320
End With

みたいに書くことができる。

これをデバッグのために表示してみる。

For i = 0 To 1
    With a(i)
        Debug.Print .Name, .Price
    End With
Next

次に構造体の中に構造体がある場合を例示します。

Type Address
    Pref As String
    City As String
End Type
Type Prices
    Name As String
    Price As Integer
    Adr As Address
End Type

構造体名「Address」は二つの構造体の仲立ちをしている名前でプログラム的にはあまり意味がありません。(言語仕様としての洗練度の低さがここでも現れています。)

この場合は以下のように代入できます。

a(0).Adr.Pref = "青森県"


-