|
▼ichi さん:
>Sub Make_DropDown()
プロシージャは 一回こっきりの処理なので、マクロでしなくとも
手動で作ってもいいのでは?と思いました。
どうしてもマクロでやりたい、何らかの理由がおありなら、
> ActiveSheet.DropDowns.Add(200, 15, 70, 15).Select
> 1) ここの座標値(200, 15, 70, 15).ですが座標値(ポイント値)
> の決め方が不明で 200,15 は適当に決め配置したい場所を
> 探って決めました
> 座標値の基準が解りません
セルでいうとどのあたりですか?
たとえば [B10]セルのうえにDropDownを置きたいのなら、
Sub Make_DropDown()
Dim c As Range
With ActiveSheet
set c = .Range("B10")
With .DropDowns.Add(c.Left, c.Top, c.Width*1.5, c.Height*1.5)
.Name = "myCombo"
.ListFillRange = "コード!$B$4:$B$7"
.LinkedCell = "$B$4"
.DropDownLines = 8
.OnAction = "Mycomb_Change"
End With
End With
End Sub
といった感じです。このばあい、DropDownは[B10]セルの左上から始まり、
横幅、高さが[B10]セルの1.5倍のサイズになります。
なんども言いますけど、一回だけの処理なので、手操作で作ったほうが
速いかと思いますが。
> Sub Mycomb_Change()
> With ActiveSheet
> .DropDowns (Application.Caller)
> .DropDowns ("myCombo")
> ' ActiveSheet.Range("A4").Value = .List(.ListIndex)
> 2) ここでエラーがでましたので コメント にしました
> .Range("K4").Value = ActiveSheet.DropDowns("myCombo").ListIndex
> 3) Range("K4").Value には選択された項目の順番(2番目なら2が)
> 書かれ 項目名を書きたいのですが
> End With
> ActiveSheet.Shapes("myCombo").Select
> Selection.Cut
> End Sub
With の使い方がおかしいですね?
> Sub Mycomb_Change()
With ActiveSheet.DropDowns(Application.Caller)
ActiveSheet.Range("A4").Value = .List(.ListIndex)
> End With
> End Sub
くらいでどうでしょう?
こう書いておくと、
DropDown(名前「myCombo」)には
> .OnAction = "Mycomb_Change"
とマクロの登録がしてありますから、
▼ドロップダウンリストからいずれかのリストアイテムが選択されると、
標準モジュールの「Mycomb_Change」にプログラムの実行が移ります。
▼
> Sub Mycomb_Change()
> With ActiveSheet.DropDowns(Application.Caller)
Application.Caller には 呼び出し元のコントロールの名前が入っています。
つまり、上の文は、
With ActiveSheet.DropDowns("myCombo")
と同じです。
(じゃぁ、はじめからそう書いとけばいいじゃん?
ということになりますが、複数のドロップダウンをシート上に配置し、
それらすべてに .OnActionで同じマクロMycomb_Change() を登録して
呼び出し元のコントロール名 Callerにより処理を分岐するといった
使い方ができるようになるので、具体的なドロップダウンの名前で
なく Application.Caller と名前を特定しない書き方をしています)
> With ActiveSheet.DropDowns(Application.Caller)
> ActiveSheet.Range("A4").Value = .List(.ListIndex)
> End With
これだけで、シートの[A4]セルに いま選択されたドロップダウン内の
選択アイテム(値)が代入されるわけですが、これを With句を
使わないで日本語で書くと こういう構文になります:
ActiveSheetの[A4]セルに、
ActiveSheetのドロップダウン"myCombo"のいま選択されている
行(.ListIndex) の内容(.List) を
代入せよ
という意味になります。
日本語に置き換えてみれば、そんなに難しくないですよね
> .Range("K4").Value = ActiveSheet.DropDowns("myCombo").ListIndex
> 3) Range("K4").Value には選択された項目の順番(2番目なら2が)
> 書かれ 項目名を書きたいのですが
実を言いますと、選択された項目番号.ListIndexは
> .LinkedCell = "$B$4"
で設定しています。選択されたときの.ListIndexが何番か?は
.LinkedCell に指定したセルの値を見ればいいのです。
.LinkedCellプロパティを使った 選択アイテムの取得方法は
.LinkedCell が [B4]のとき、
> n = [B4].Value
> [A4].Value = Excel.Range(DropDowns("myCombo") _
> .ListFillRange).Item(n).Value
となることを以前、紹介しましたよね?
|
|