• ベストアンサー

#008000が&H8000に変化する

vbaで色設定したいのですが、勝手に色コード(?)が変化します。 テストとして、フォームを開いた時にフォームの色を変えようと思うのですが Private Sub Form_Load() Me.詳細.BackColor = &H008000 End Sub これにしてエンターを押すと Private Sub Form_Load() Me.詳細.BackColor = &H8000 End Sub になってしまいます。 もともと#008000は緑なのですが、&H8000に変化すると黒になります。 #008000のコードは使えないのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • ap_2
  • ベストアンサー率64% (70/109)
回答No.2

4byte以内で表現できる値は、Integer型になります。 最上位ビットが符号になるので、Integerでは±7FFFしか表現できません。 なので、HEXは型の明示(お尻に&か%)が必須。 "&H~&" が基本形だと覚えておくとよいかと。  Me.詳細.BackColor = &H8000& ※頭にも&つくので紛らわしいですが、ただの型の明示です。  Dim a As Variant  a = 0& 'Variant/Long型になる  a = 0% 'Variant/Integer型になる

TTWGAICPBIGD
質問者

お礼

ありがとうございます。

その他の回答 (2)

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.3

なるほど~。 型宣言文字が必要だったのですね。 勉強になりました。

TTWGAICPBIGD
質問者

お礼

ありがとうございます。

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.1

数値なので前ゼロが消えてしまいます。 dim a as long a = 010 としても→ a = 10 になりますよね。 ただ、 当方の2010では、&H8000 の状態でフォームを開くと、黒ではなく白?になります。 なぁぜ? &H8000 だと -32768 に RGB(0,128,0) で指定するしか無さそう?です。 こんな関数を標準モジュールに作り、出力した結果をイミディエイトウィンドウからコピペしてます。 Function HEX2RGB(sHex As String) As String '?hex2rgb("#0080FF") → RGB(0,128,255) 色 sHEX = Mid(sHEX, 2) sHEX = String(6 - Len(sHEX), "0") & sHEX HEX2RGB = "RGB(" & CStr(CByte("&H" & Mid(sHEX, 1, 2))) _ & "," & CStr(CByte("&H" & Mid(sHEX, 3, 2))) _ & "," & CStr(CByte("&H" & Mid(sHEX, 5, 2))) _ & ")" End Function コード中でそのまま使いたいなら Function HEX2RGB(sHex As String) As Long sHEX = Mid(sHEX, 2) sHEX = String(6 - Len(sHEX), "0") & sHEX sHEX = "RGB(" & CStr(CByte("&H" & Mid(sHEX, 1, 2))) _ & "," & CStr(CByte("&H" & Mid(sHEX, 3, 2))) _ & "," & CStr(CByte("&H" & Mid(sHEX, 5, 2))) _ & ")" HEX2RGB = Eval(sHEX) End Function としておいて Me.詳細.BackColor = hex2rgb("#008000") で良さそうです。

TTWGAICPBIGD
質問者

お礼

ありがとうございます。

関連するQ&A