dポイントプレゼントキャンペーン実施中!

動作環境
OS:Windows7(64Bit) Home Premium SP1
MS:Office Version2007 SP3

下記のURLを参考にして、色の設定ダイアログ画面を出力させました。
ところが、この画面、モーダレス出力をモーダル出力にさせたいのですが、
方法が分かりません。
ちなみに、Excelのvbaで、試しています。
どなたか、ご指導願います。

■色の設定ダイアログ画面(URL)
http://www.tsware.jp/tips/tips_343.htm

A 回答 (2件)

ChooseColor APIで表示されるダイアログを、モーダル→モードレスに変更したいという意味なら、


ChooseColorにそういう選択肢は無さそうなので無理だと思います。外していたらすみません。
http://wisdom.sakura.ne.jp/system/winapi/common/ …

作成したカスタムカラーを保存するバージョンを回答した事があります。ご参考まで。
http://okwave.jp/qa/q8449398.html

この回答への補足

苦肉の策ですが、あるフォームをモーダル出力にしてから、
コントロール等で、ChooseColor画面を出力すれば、
モーダル画面の他は、Excel上、アクティブにする事が、
出来ないようです。

補足日時:2014/11/01 09:40
    • good
    • 0

#1です。

無いなら自分でこしらえてみました。xl2010で試しています。
Web Safe ColorをUserFormに表示して色を選択し、ActiveCellに着色します。
簡単なカレンダーフォームとして作ったものを改造したので、冗長な箇所があります。Indexを設定していますが、ここでは活用していなかったりします。フォームの幅の下限が決まってしまうのが寂しい...枠を表示しないと自由が利きますが、こんどは閉じる手段を考える必要が出てきたり、面倒なのでここまでにしておきます。
☆標準モジュール
Sub test()
UserForm1.Show vbModeless
End Sub

☆UserForm1モジュール
コントロールは何も置きません。サイズも自動で設定します。
Dim myClsIndex As Integer 'ラベルコントロールの番号
Dim labelArray() As LabelCtrl 'ラベルコントロールの配列

Const labelWidth As Single = 10
Const labelHeight As Single = 10

Private Sub UserForm_Initialize()
Dim colorArray As Variant
Dim i As Long, j As Long, k As Long
Dim strColor As String
Dim labelTop As Single, labelLeft As Single
Dim xFrame As Single, yFrame As Single

xFrame = Me.Width - Me.InsideWidth
yFrame = Me.Height - Me.InsideHeight
colorArray = Array("00", "33", "66", "99", "CC", "FF")
myClsIndex = 0
'ユーザーフォームの設定
With Me
.caption = "色選択"
.Width = labelWidth * UBound(colorArray) + xFrame
.Height = labelHeight * (UBound(colorArray) + 1) ^ 2 + yFrame
End With

'ラベルコントロールの配列生成
labelTop = 0
For i = 0 To UBound(colorArray)
For j = 0 To UBound(colorArray)
For k = 0 To UBound(colorArray)
strColor = colorArray(i) & colorArray(j) & colorArray(k)
labelLeft = labelWidth * k
Call addLabel(labelLeft, labelTop, CLng("&H" & strColor))
Next k
labelTop = labelTop + labelHeight
Next j
Next i

End Sub

'ラベルコントロール配列のクリックイベントで起動されるルーチン
Public Sub labelClicked(getColor As Long)
ActiveCell.Interior.Color = getColor
End Sub

'ラベルの追加
Private Function addLabel(labelLeft As Single, labelTop As Single, myColor As Long) As Integer
Dim myLabel As MSForms.Label

Set myLabel = Me.Controls.Add("Forms.Label.1", , False)
myClsIndex = myClsIndex + 1
With myLabel
.top = labelTop
.left = labelLeft
.Height = labelHeight
.Width = labelWidth
.BackColor = myColor
.visible = True
End With
ReDim Preserve labelArray(1 To myClsIndex)
Set labelArray(myClsIndex) = New LabelCtrl
Set labelArray(myClsIndex).parent = Me
labelArray(myClsIndex).S_SetLabel myLabel, myClsIndex
End Function

☆クラスモジュールLabelCtrl
Private WithEvents myLabel As MSForms.Label
Private myIndex As Integer
Private myParent As Object '親UserForm

Public Sub S_SetLabel(newLabel As MSForms.Label, index As Integer)
Set myLabel = newLabel
myIndex = index
End Sub

Private Sub myLabel_Click()
Call Me.parent.labelClicked(myLabel.BackColor)
End Sub

Public Property Get parent() As Object
Set parent = myParent
End Property

Public Property Set parent(newParent As Object)
Set myParent = newParent
End Property
「vbaマクロで、色の設定ダイアログ画面に」の回答画像2
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!