[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『コンボボックス』(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をアクティブにすればコンボボックスが消えるのですが、
それ以外をアクティブにするとコンボボックスが消えません。
(nagasan)
複数シート対応は後回しにして。
>G70:G145をアクティブにし、コンボボックスで文字を選んだ後 >再度G70:G145をアクティブにすればコンボボックスが消えるのですが、 >それ以外をアクティブにするとコンボボックスが消えません。
ん??
まず、アップしたコードは
・G70:G145 のいずれかがアクティブになればH列にコンボボックスが表示される。 ・リストから何か選ぶと、再度G70:G145をアクティブに【しなくても】G列に転記されたと同時に、【コンボボックスが消える】 ・もちろん、選ばないで、G70:G145以外をアクティブにしても、コンボボックスは消える。
ただし、前にも言ったように、コードをさわったり、あるいは、何かの障害が発生したときには マクロ実行環境がリセットされるので、そのような状況になると思うけど。
そういう場合は閉じて開くか、面倒なら、Workbook_Open プロシジャの中の任意の場所をクリックして F5 をおすと、復旧するよ。
(ぶらっと)
会社のEXCEL2010では問題なく消えました。
(nagasan)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.