• ベストアンサー

ExcelのVBAでコンボボックスの設定

こんばんわ!! ExcelのVBAでコンボボックスを設定したのですが 12桁の文字を30個設定するようにプログラムを 作成したのですがエラーになってしまいました。 Excelは2002です。 もしかして2002のみNGなのでしょうか? どなたか教えていただけませんか? よろしくお願いします。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

#2,#3です。 Sub test01() a = "123456789012" s = a For i = 2 To 19 s = s & "," & a Next i MsgBox s Range("A1:A3").Select With Selection.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:=s End With End Sub の上記19まで旨く行きましたが、20で#Value!のエラーに成りました。文字列の長さの制約に引っかかるようです。 駄目かもしれないが、Formula1:=s1 & ',' & s2(s1,s2各15ぐらい)で旨く行かないかやって見てください。 セルと離れた場所に貼りつける普通のコンボを使えばどうですか。 選択したアイテムをアクチブセルにセットできますよ。

jk_beck
質問者

お礼

アドバイスありがとうございました。 やっぱり駄目みたでした。 結局、一度シートに書き出してそのセルを 指定した場合に可能な事が判りました。 それでトライしてみます。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

#2です。 >ExcelのVBAでコンボボックスを設定したのですが 質問の表題が適当でないですね。 やっておられることは、エクセルでは「入力規則」の設定です。入力規則といってもらえれば、#2のような回答は上げません。 (1)#1の補足を見ましたが、標準ではType:=xlValidateList はセル範囲を指定するのでは(Excel2000) 2002,3でそれ以外の指定が出来ることは確実に可能ですか。 (2)ForNrxtでカウンタCntを使わず、30回セルA1に対し繰り返しているが、少なくとも、Addメソッドを30回繰り返すのはおかしくないですか。 私が未熟なのかも知れないが、理解できない。 (3)12桁以内なら、マクロの記録で Range("A1").Select With Selection.Validation .Delete .Add Type:=xlValidateTextLength, AlertStyle:=xlValidAlertStop, _ Operator:=xlBetween, Formula1:="1", Formula2:="12" End With でよいのでは。リストは使わない。 (4) >12桁の文字を30個設定するように 入力規則との関連で、何が(どういうチェックや入力制限が)したいのですか。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

Sheet1にコンロトールツールボックスから1つコンボボックスを貼り付けました。 下記を実行しました。 Sub test01() n = 123456789012# For i = 1 To 30 Worksheets("sheet1").ComboBox1.AddItem n n = n + 10 Next i End Sub エクセル2000ですが、旨く行きました。 これと質問者のコードと「原理的に」どう違いますか。 このコードを2002で実行してエラーに成りますか。 エラーの原因を聞くのに、コード例を上げないのは解せないです。

jk_beck
質問者

補足

原理的に違うことは コントロールツールボックスでの追加ではなく コードでコンボボックスを作成します。 説明不足でした。申し訳ありません。 コードはANo.#1さんの補足にあげました。 もしよろしければアドバイスを頂けませんか

  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.1

普通はアプリ側がバグっていると思うのではなく、コードの方が間違っているのではと疑います。 そのコードが絶対間違っていないという確信があるということは、Office2000だと正常に動作していたという根拠があるということでしょうか? またエラーとはどういうエラーなのでしょう。 具体的なコードも示されていないのでアドバイスは困難です。

jk_beck
質問者

補足

コードは間違っていない事は確認しています。 Office2003ではエラーが発生しないのですが 実際はコンボボックスの中が半分くらいで 消えてしまっているのです。 コードは Private Sub CommandButton1_Click() Dim cnt As Integer Dim strText As String strText = "" For cnt = 0 To 30 - 1 strText = strText + ",123456789012" Next Sheet1.Cells(1, 1).Select For cnt = 0 To 30 - 1 Sheet1.Range(Cells(1, 1), Cells(1, 1)).Validation.Delete Sheet1.Range(Cells(1, 1), Cells(1, 1)).Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=strText Sheet1.Range(Cells(1, 1), Cells(1, 1)).Validation.IgnoreBlank = True Sheet1.Range(Cells(1, 1), Cells(1, 1)).Validation.InCellDropdown = True Sheet1.Range(Cells(1, 1), Cells(1, 1)).Validation.IMEMode = xlIMEModeNoControl Sheet1.Range(Cells(1, 1), Cells(1, 1)).Validation.ShowInput = True Sheet1.Range(Cells(1, 1), Cells(1, 1)).Validation.ShowError = False Next End Sub なのですが。。。 アドバイスを頂けたら幸いです。