[[20130604164350]] 『コンボボックス』(nagasan) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『コンボボックス』(nagasan)

sheet1 のrange("G70")からrange("G145")が空白です。

sheet2 のrange("B3")からrange("B55")の所々に文字が書かれていますが

空白のセルもあり、コンボボックスには空白の行をだしたくありません。

sheet1の上記セルの一つをアクティブにするとsheet2の一覧(B3〜B55)の

コンボボックスがそのセルの右隣にでてきて

任意の文字を選択するとアクティブセルにその文字が入力された後

コンボボックスが消えるようなことは出来ますか?

*コンボボックスは8個の文字以上はスクロールさせないといけないようですが、

8個以上でもスクロールさせずに選択できるように出来ますか?

よろしくお願いします。


 とりあえず、行数の件。

 コンボボックスが ActiveXのコントロールなら、プロパティで、ListRows が初期値 8 になっているので、ここを好きな数に。

 フォームツールでも同様。右クリックして書式設定のドロップダウンリストの行数を好きな数字に。

 入力せずに選ぶだけなら、リストボックスという手もあるね。

 (ぶらっと)

 ActiveXコンボボックスという前提で。名前は ComboBox1 。

 ThisWorkbookモジュールに以下を貼り付け、いったん保存して閉じて、再度開いて試して。

 Option Explicit

 Dim WithEvents cb As ComboBox

 Private Sub Workbook_Open()
    Dim r As Range
    Dim c As Range
    Dim v() As String
    Dim k As Long

    On Error Resume Next
    Set r = Sheets("Sheet2").Range("B3:B55").SpecialCells(xlCellTypeConstants)
    On Error GoTo 0

    If r Is Nothing Then Exit Sub

    ReDim v(1 To r.Count, 1 To 1)
    Set cb = Sheets("Sheet1").Shapes("Combobox1").DrawingObject.Object

    For Each c In r
        k = k + 1
        v(k, 1) = c.Value
    Next

    With Sheets("Sheet1").Shapes("ComboBox1")
        .DrawingObject.Object.List = v
        .Visible = False
    End With

 End Sub

 Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    If Not Sh Is Sheets("Sheet1") Then Exit Sub
    If Intersect(Target, Sh.Range("G70:G145")) Is Nothing Then Exit Sub

    With Sh.Shapes("ComboBox1")
        .Left = Target(1).Offset(, 1).Left
        .Top = Target(1).Offset(, 1).Top
        .DrawingObject.LinkedCell = Target(1).Address
        .Visible = True
    End With

 End Sub

 Private Sub cb_Change()
    Sheets("Sheet1").Shapes("ComboBox1").Visible = False
 End Sub

 (ぶらっと)

 追記で。VBA処理案をアップしたけど、リストに表示する行数はあきらめ、
 sheet2 のrange("B3")からrange("B55")の空白ではないところだけを、どこかにリストとしてセットしておいて
 sheet1 のrange("G70")からrange("G145")までに入力規則を設定しておくのはだめなのかなぁ?

 (ぶらっと)

どうもありがとうございます。

ThisWorkbookモジュールに貼り付け実施したのですが、指定した名前のアイテムが見つかりませんでした」となり、With Sh.Shapes("ComboBox1")が黄色くなっています。

コンボボックスを使用するのがはじめてで、ネットで調べながらやっているのですがうまくいきません。

ActiveXコンボボックスというのは、VBで「挿入」「ユーザーフォーム」、そこにツールボックスからコンボボックスを貼り付けたのでよいのでしょうか?

名前の ComboBox1はどこにいれればいいのでしょうか

入力規則はブックの作成者が行の幅を極狭くしセルを結合し文字を書いているため、三角マークが小さくなりすぎて非常に使いづらくなってしまいます。

よろしくお願いします。

(nagasan)


 えっ? ユーザーフォーム処理をしたかった?
 それならそれで、できるけど、コードは、がらっと異なる。

 シート上に配置するコントロールだと思った。
 とりあえず、アップしたコードをいかすとすれば

 ・2003 の場合

 メニュー「表示」ー>「ツールバー」ー>「コントロールツールボックス」のコンボボックスを選択

 ・2007以降の場合

 開発タブ -> 挿入 -> ActiveXコントロールのコンボボックスを選択

 これでシートにComboBox1 が作成される。横幅が少し短いので、マウスでつまんで好みの大きさに。

 (ぶらっと)

言葉足らずですいません、ユーザーフォーム処理でもシート上に配置するコントロールでもいいのですが

sheet1のG列の右側にも文字が書かれているためと、

sheet1はプリントして使用するため、コマンドボックスをG70:G145セル以外をACTIVEにした時は、消えてもらいたいと思っています。

何度もすいません。

(nagasan)


 それでは Workbook_SheetSelectionChange のなかの

 If Intersect(Target, Sh.Range("G70:G145")) Is Nothing Then Exit Sub

 これを

    If Intersect(Target, Sh.Range("G70:G145")) Is Nothing Then
        Sh.Shapes("ComboBox1").Visible = False
        Exit Sub
    End If

 に変更。

 (ぶらっと)

 ↑ ねんのために。
 コードを修正すると、マクロ実行環境がリセットされるので、いったん閉じて、もう一度開いて試してね。
 (閉じずに処理を継続する方法もあるけど、混乱するといけないので、閉じて開いて)

 (ぶらっと)

ありがとうございます。

教えていただいた方法で出来ました。

すいませんが、もう一つだけご教授お願いします。

sheet1の("G70:G145")を選択してコンボボックスがでるのと同じように

sheet3でもsheet4でもsheet5でも・・・行えるようにするにはどうするのでしょうか?

それぞれのシート名は実際は、D134、D158、D888のようにばらばらです。

よろしくお願いします。

(nagasan)


検証していたのですが、G70:G145をアクティブにし、コンボボックスで文字を選んだ後

再度G70:G145をアクティブにすればコンボボックスが消えるのですが、

それ以外をアクティブにするとコンボボックスが消えません。

(nagasan)


 複数シート対応は後回しにして。

 >G70:G145をアクティブにし、コンボボックスで文字を選んだ後 
 >再度G70:G145をアクティブにすればコンボボックスが消えるのですが、 
 >それ以外をアクティブにするとコンボボックスが消えません。 

 ん??

 まず、アップしたコードは

 ・G70:G145 のいずれかがアクティブになればH列にコンボボックスが表示される。
 ・リストから何か選ぶと、再度G70:G145をアクティブに【しなくても】G列に転記されたと同時に、【コンボボックスが消える】
 ・もちろん、選ばないで、G70:G145以外をアクティブにしても、コンボボックスは消える。

 ただし、前にも言ったように、コードをさわったり、あるいは、何かの障害が発生したときには
 マクロ実行環境がリセットされるので、そのような状況になると思うけど。

 そういう場合は閉じて開くか、面倒なら、Workbook_Open プロシジャの中の任意の場所をクリックして
 F5 をおすと、復旧するよ。

 (ぶらっと)

家のEXCEL2000ではコンボボックスの消えないときがあったのですが、

会社のEXCEL2010では問題なく消えました。

(nagasan)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.