• ベストアンサー

Excel VBAについて

UserForm上に配置しているComboBox1はSheet3からデータを読み込んで表示するようにしているのですが、現在はComboBox1に直接手入力でもいれることができてしまいます。 これをできなくするのはどうしたらよいのでしょうか。

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

  • ベストアンサー
  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.1

ComboBoxのStyleプロパティに、fmStyleDropDownListをセットしてください。 プロパティウィンドウからでもいいし、以下のようにしてもいいし。 Private Sub UserForm_Initialize()   Me.ComboBox1.RowSource = "Sheet3!A1:A10"   Me.ComboBox1.Style = fmStyleDropDownList End Sub    

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • yokomaya
  • ベストアンサー率40% (147/366)
回答No.2

LockedプロパティーをTrueではいけませんか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBAについて

    UserForm1に、TextBox2、TextBox3、ComboBox1があります。 例えば、それぞれに TextBox2 = 100 TextBox3 = 500 ComboBox1 = abc-def と値をフォームから入力し、 UserForm1に配置された「OK」ボタンをクリックすると、 エクセルシートのH10からM10の結合された一つのセルの中に 100 / 500 abc-def と2段表示させたいのですが、可能でしょうか。 可能でしたら方法を教えて下さい。

  • VBAのComboBoxについて

    UserForm1にComboBoxが8個(ComboBox1~8)あります。 各ComboBoxはSheet1の下記列に入力されているリストを表示します。 ComboBox1 : A列 ComboBox2 : B列 ComboBox3 : C列 ComboBox4 : D列 ComboBox5 : E列 ComboBox6 : F列 ComboBox7 : G列 ComboBox8 : H列 ComboBox9 : I列 ComboBox10 : J列 そこで、UserForm1の各ComboBoxでデータ選択する際に、リストにある場合はそれを選択し、リストにない場合はComboBoxに新しいデータを入力し、UserForm1のCommandButton1を押下時にその新しいデータをSheet1の各列に追加したいのですが、どのようにしたらよいのでしょうか。 Sheet1にあるリストをComboBoxに表示するところまではできています。 ※ComboBoxの番号とリストの列番号を一致させています。 --------------------------------------------------------------- Private Sub UserForm_Initialize() Dim lastrw As Integer, retu As Integer, i As Integer For retu = 1 To 10 lastrw = Sheet1.Cells(1, retu).End(xlDown).Row For i = 1 To lastrw - 1 Controls("ComboBox" & retu).AddItem Sheet1.Cells(i + 1, retu).Value Next i Next retu End Sub ---------------------------------------------------------------

  • VBAのエラーについて

    エクセル2007 でマクロのコードを書いています。 開発画面からマクロを実行するとうまくいくのに、エクセルのシートに配置したボタンにそのマクロを登録して実行するとエラーが出てしまいます。 標準モジュールに UserForm1.showを書いており、UserForm1上に配置したコマンドボタンによってUserForm2を表示させているのですが、UserForm2が出る前に、「問題が発生したために、Microsoft Office 2007 Excelを・・・・・・」というような画面が出て強制終了されます。(UserForm1、UserForm2とも modelessで表示しています。) また、開発画面から1度実行すれば、シートに配置しマクロを登録したボタンからでも実行できるようになるのですが、一度、そのブックを保存してから改めて開くと、同じような症状が出てしまいます。 UserForm2のInitializeに問題があるのだと思い、そこのコードをじっくりと見た結果、UserForm2にあるPageの中に配置した特定のComboBoxとCommandButtonに関する処理を非表示にするとエラーが出ないことが判明しました。しかし、それらについての処理は、他のComboBoxなどと同じ処理(セルの値を読み込むような)をしているもので、名前などのミスもありません。(というか、開発画面からの実行では正常に動きます。) ただ、共通していることとしては、そのエラーが出る特定のComboBoxとCommandButtonは、最後の最後で思いついて配置したものであるということだけなのです。  ずっと、いろいろな方向から試しているのですが、わかりません。複雑な説明で申し訳ないのですが、なにかしら情報をお願いします。

  • Excel 2003 VBA ComboBox

    質問させていただきます。 現在 UserForm 内に ComboBox が三つ有ります。コマンドボタンは一つです。 早速ですが、三つの ComboBox に値が入力された場合のみ、コマンドボタンを Active にする方法は有りますでしょうか? いろいろ考えたり、試したりもしましたが、ComboBox は完全に独立しているので現実的に無理なのでしょうか? よろしくお願いします。

  • エクセル VBA コンボボックスの計算

    UserForm1上に コンボボックスには数字がリストされます! ComboBox1、ComboBox2、ComboBox3 3つ作成して 例えば ComboBox1=1 ComboBox2=0 ComboBox3=5 と表示された時 CommandButton1をクリックしたら UserForm2の TextBox1に”6”と足し算 された数字を表示したいのですが 普通のセルなら 出来るのですが・・ ComboBoxでするなら どのような記述に なるのでしょうか? すいません、教えて下さい!

  • エクセルVBAについて教えてください

    エクセル2003です。 Sheet1     A    B    C     D 1 種類1 商品1 商品A  商品あ 2 種類2 商品2 商品B  商品い 3 種類3 商品3 商品C  商品う  4      商品4 商品D  商品え 5  商品5 商品E  商品お Sheet2   AB CDF     G    H     I 1         種類表示     商品表示  2         種類表示     商品表示  3         種類表示     商品表示  4         種類表示     商品表示  5         種類表示     商品表示  *Sheet2のG1をダブルクリックでSheet1のA列をユーザーフォームのコンボボックス1にてセルに表示  の上挿入 *コンボ1の選択によりコンボ2(Sheet2のI1をダブルクリック)の表示を変更する *コンボ1 種類1 → コンボ2 Sheet1のB列を表示の上セルに挿入 *コンボ1 種類2 → コンボ2 Sheet1のC列を表示の上セルに挿入 *コンボ1 種類3 → コンボ2 Sheet1のD列を表示の上セルに挿入 までは、出来きたのですが、Sheet2の2行目以降も同作業をしたいのですが、、、 Offset等を使用するのでしょうか? あまりわかっていないので詳しく教えて頂ければ幸いです コード Sheet2のコード Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = True With Target If .Address = "$F$1" Then UserForm1.Show ElseIf .Address = "$H$1" Then Dim k As Long, myFlg As Boolean, myArray myArray = Array("種類1", "種類2", "種類3") myFlg = False For k = 0 To UBound(myArray) If Range("F1") = myArray(k) Then myFlg = True End If Next k If myFlg = False Or Range("F1") = "" Then MsgBox "種類を選択して", vbOKOnly Range("F1").Select Exit Sub End If UserForm2.Show End If End With End Sub ユーザーフォーム1のコード Private Sub UserForm_Initialize() ComboBox1.RowSource = "sHEET1!A1:A3" End Sub コンボ1のコード Private Sub ComboBox1_Change() Worksheets("Sheet2").Range("F1") = UserForm1.ComboBox1.Text Worksheets("Sheet2").Range("H1") = "" Unload Me End Sub ユーザーフォーム2のコード Private Sub UserForm_Initialize() With UserForm2.ComboBox1 Select Case Worksheets("Sheet2").Range("F1") Case "種類1" .RowSource = "Sheet1!B1:B5" Case "種類2" .RowSource = "Sheet1!C1:C5" Case "種類3" .RowSource = "Sheet1!D2:D5" End Select End With End Sub コンボ2のコード Private Sub ComboBox1_Change() Worksheets("Sheet2").Range("H1") = UserForm2.ComboBox1.Text Unload Me End Sub このコードをいじくってSheet2以降も同作業できるようにお願いします

  • エクセルVBA ユーザーフォームの表示内容を選択条件によって変更する

    ExcelVBA初心者です。 ユーザーフォーム1でsheet1を選択した場合→次のユーザーフォーム2ではsheet1の内容を、 sheet2を選択した場合→sheet2の、sheet3を選択した場合→sheet3の 内容をそれぞれキャプションとして表示したいのですが、 なかなか上手く出来ません。 Private Sub UserForm_Initialize() If UserForm1.ComboBox1 = Worksheets("Sheet1").Select Then UserForm2.Caption = Worksheets("Sheet1").Range("B3").Value ElseIf UserForm1.ComboBox1 = Worksheets("Sheet2").Select Then UserForm2.Caption = Worksheets("Sheet2").Range("B3").Value Else UserForm1.ComboBox1 = Worksheets("Sheet3").Select UserForm2.Caption = Worksheets("Sheet3").Range("B3").Value End If End Sub としてみたのですが、どのシートを選択してもsheet3の内容が ユーザーフォーム2のキャプションとして表示されてしまいます。 どのようにしたら良いでしょうか? よろしくお願い致します。

  • VBAでオプションボタン変更によって・・・

    エクセルVBAのユーザーフォーム内にあるコンボボックス3つを選択することによりデータ入力を行っています。 この度選択肢を増やすことになり、オプションボタンを2つ追加しようと思っています。 オプションボタンはどちらかを決定することで、コンボボックスの選択内容を変更する予定です。 コンボボックスは大中小分類としており、シート2から抽出したものをシート1に落としている現状をオプションボタン新設により、ボタン1は従来通りシート2から、ボタン2選択時はシート3にあるリストからコンボボックスへ繁栄させようとしたいのですが、方法が分かりません。 どなたか、教えていただけると助かります。 よろしくお願いします。 現在のコードを下記に記します。 Private Sub UserForm_Activate() With UserForm3 .OptionButton1 = True *この段階でボタン2を選択時は、シート3にあるリストよりコンボボックスの内容を抽出したい。 以下中小分類も同様としたい。 .ComboBox1.RowSource = "シート2!A3:A15" .ComboBox1.SetFocus End With End Sub Private Sub ComboBox1_Change() Dim myLlist As String myLlist = ComboBox1 With UserForm3 .ComboBox2.Text = "" .ComboBox3.Text = "" Select Case myLlist Case "大1" .ComboBox2.RowSource = "シート2!B21:B26" Case "大2" .ComboBox2.RowSource = "シート2!B27:B28" End Select End With End Sub Private Sub ComboBox2_Change() Dim myMlist As String myMlist = ComboBox2 With UserForm3 .ComboBox3.Text = "" Select Case myMlist Case "中1" .ComboBox3.RowSource = "シート2!C101:C111" Case "中2" .ComboBox3.RowSource = "シート2!C121:C124" End Select End With End Sub Private Sub OKボタン_Click() With UserForm3 ActiveSheet.Unprotect 行 = ActiveCell.Row 列 = ActiveCell.Column Cells(行, 列) = UserForm3.ComboBox1.Value Cells(行, 列 + 1) = UserForm3.ComboBox2.Value Cells(行, 列 + 2) = UserForm3.ComboBox3.Value ActiveSheet.Protect End With End Sub

  • Excel 2003 VBA マウスホイール

    質問させて頂きます。 現在 UserForm に ComboBox を幾つか用意し各 ComboBox に結構な数のデータを入れて いるのですが、毎回マウスでスクロールバーを掴み移動するのはさすがに面倒くさいです。 早速ですがマウスホイールで ComboBox をスクロールさせる方法を教えて頂きたいです。 ネットで調べて見ると色々出てきましたが詳細などは書かれていないため正直理解出来ません。 お手数かけますが詳細も含め教えて頂きたいです。 宜しくお願いします。

  • Excel VBA(Win2000、Office2000)

    現在、VBAでExcelのシートに書き込むフォームを作っており、日付に関することで困っています。 フォーム上には複数のComboBox、TextBoxが並んでおり、OKボタンをクリックすることで、フォーム上に並んだ、ComboBox、TextBoxの値をセルに書き込むようにしています。 問題の日付に関する質問についてですが・・・ ユーザーフォーム上に 年を入力するComboBox1 → 2004 月を入力するComboBox2 → 5 日を入力するComboBox3 → 7 *いづれも、プルダウンから数字を選択して入力するようにしています。 この3つの入力値を合わせて、2004/05/07と認識させて、TextBox1に"金"と表示させたいのですが、どのようにしたら良いでしょうか? TextBox1表示されるタイミングは、日を入力するComboBox3が入力された時としたいです。 宜しくお願い致します。