• ベストアンサー

入力規則、ValidateListの使い方

Windows Vista/Excel2007/VB6.5 では動作しますが、 Windows XP/Excel2000/VB6.0 ではエラーとなります。 どこが悪いかご教示下さい。 <エラー内容> 実行時エラー'1004' アプリケーション定義又はオブジェクト定義のエラーです。 <コード(ボタンのサブに書いています。)> Dim FM1 As String FM1 = "=$A$10:$A$20" ' 選択肢の範囲 ' i は行数、Fは列名です。 For i = 8 To 18 Posi = "F" + CStr(i) With Range(Posi).Validation .Delete .Add Type:=xlValidateList, Formula1:=FM1 End With Next

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

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

2002で Sub test01() Dim FM1 As String FM1 = "=$A$10:$A$20" ' 選択肢の範囲 ' i は行数、Fは列名です。 For i = 8 To 18 posi = "F" + CStr(i) MsgBox posi With Range(posi).Validation .Delete .Add Type:=xlValidateList, Formula1:=FM1 End With Next End Sub で動きますね。 結果もおかしくないようだ。 原因はわからないが、とりあえず報告します。

iso27001
質問者

お礼

2002での確認、ありがとうございました。 ボタンのプロパティの設定変更で問題解決しましたが 2002でも動作することが確認でき、ありがたいです。

その他の回答 (1)

  • hotosys
  • ベストアンサー率67% (97/143)
回答No.1

Excelのバージョンの問題ではなく、シート以外(例えばボタンとかシェープやグラフ)がフォーカス持ってませんか? http://o-mita.cocolog-nifty.com/blog/2008/10/excelvba-bf69.html

iso27001
質問者

お礼

ありがとうございました。問題解決しました。 問題のコードはボタンのサブルーチンに書いてありましたが ボタンのプロパティのTakeFoucusOnClickをTrueからFalseに 変更したら動作するようになりました。 VBA独学中の私が独力で解決しようとしたら何年もかっかて いたでしょう。 感謝!感謝!です。

関連するQ&A

  • VBAで入力規則の設定がうまくいかない・・・

    VBAで入力規則の設定がうまくいきません どなたかご教示ください。 Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) Dim A As String If Target.Column = 3 And Target.Row >= 77 And Target.Row <= 65536 Then If Target.Value <> "" Then Worksheets("Sheet2").Range("A1:Z5").Copy _ Destination:=Target.Offset(5, -1) For i = 5 To 9 For k = 5 To 23 Step 2 A = "=INDIRECT(" & Target.Offset(0, 3).Address & ")" Target.Offset(i, k).Validation.Delete Target.Offset(i, k).Validation.Add Type:=xlValidateList, Formula1:=A Next Next End If End If End Sub 「実行時エラー '1004' : アプリケーションの定義またはオブジェクト定義のエラー」が出てしまします。 A = "=INDIRECT(" & Target.Offset(0, 3).Address & ")" Target.Offset(i, k).Validation.Delete Target.Offset(i, k).Validation.Add Type:=xlValidateList, Formula1:=A "=INDIRECT(""" & Target.Offset(0, 3).Address & """)"こうすることや"INDIRECT(" & Target.Offset(0, 3).Address & ")"こうするとエラーは発生しません。これはバグなのでしょうか? 上記だとリストに値がうまく設定されません。 このプログラムの意味ですが・・・ ttp://www.relief.jp/itnote/archives/000822.php こちらにあるような物を参考にしています。 ドロップダウンリストを連動させて使いたいのです。

  • 入力規則 日付をリストのプルダウンで選択したい

    エクセルの入力規則をVBAでやる時に日付をリストのプルダウンで選択したいのですが Sub test() With Range("A1").Validation .Delete .Add Type:=xlValidateList, Formula1:="2014/1/1,2014/1/2" End With End Sub をすると、 1/1/2014 1/2/2014 にとプルダウン上で表示されてしまい、なおかつ文字列になってしまいます。 .Add Type:=xlValidateList, Formula1:=#1/1/2014# & "," & #1/2/2014# .Add Type:=xlValidateList, Formula1:=Format(#1/1/2014#, "yyyy/mm/dd") & "," & Format(#1/2/2014#, "yyyy/mm/dd") これでも同じでした。 2014/1/1 2014/1/2 と表示させるにはどうすればいいでしょう?

  • 【EXCEL2007 VBA】Validation入力規則→編集

    【EXCEL2007 VBA】Validation入力規則→編集 こんにちは。 通常Validation入力規則を使用すると、入力したセルデータはそのまま使用しますが、例えば↓のようなコードで"山梨県"を選択し、その同一セル内で"山梨県"に加えて"甲府市"と入力するとエラーが現れます。 そのエラーが現れなく方法はあるのでしょうか? Sub ChooseThenEdit() With Range("D2").Validation .Delete .Add Type:=xlValidateList, _ Formula1:="福岡県,岡山県,山梨県" End With End Sub Validationの使用にはこだわりませんが、とにかく 1.選択肢の表示 2。選択 3.編集 を素早くやりたいのです。 注1.上の例であれば隣のセルで山梨県の市を選べるようにすればいいじゃないか、という指摘があるかもしれませんが、あくまでも例なので、それはナシとして下さい。 注2.ListBoxを使用すればまあ出来ますが、ちょっと素早くできないと思うので、ご勘弁ください。 ではでは。ご回答ありがとうございます。

  • excel2003 vba の入力規則リスト

    入力規則でリスト登録する記述について、教えていただけないでしょうか。 例えば変数(long)で、a=1,b=5 というものがあったとします。 シート1のA1セルに、1,2,3,4,5 でそれぞれ数値選択できる入力リスト を作成したいのですが、うまくいきません。どのように修正したらよいか教えて欲しいです。 Dim a As long Dim b As long a=1 b=5 With Worksheets("Sheet1").Range("A1").Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=a, Formula2:=b End With だと、何も設定されません。

  • VBAでセルに入力規則(選択し)を設定する

    VBAでセルに入力規則(選択し)を設定する EXCELのシート上のボタンに下のようなコードを書いて実行すると 「アプリケーション定義又はオブジェクト定義のエラー」が矢印のところで出てしまいます。 独学でチャレンジしていますが、原因がわかりません。どなたか原因と対策を教えて下さい。     //ボタンの中のコード  //セル、$E$147:$E$158 にセットした「選択し」をセル E7 へセットする。  Dim CRng As Range  Set CRng = Range("E7")  With CRng.Validation   .Delete  .Add Type:=xlValidateList, Formula1:="=$E$147:$E$158"  ←ここでエラー End With

  • ExcelVBA2000で入力規則の設定

    こんにちは。 ExcelVBA2000を使用して入力規則を設定しようと思うのですが、エラーが発生してしまい困っています。 ”1004 アプリケーション定義またはオブジェクト定義のエラーです。” が発生します。 ↓マクロの保存で取得できた内容は With Selection.Validation .Delete .Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=AND(A1=JIS(A1),LENB(A1)<=70)" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .IMEMode = xlIMEModeNoControl .ShowInput = True .ShowError = True End With なのですが、これを再び実行させようとすると、エラーが発生します。 ご存知の方いらっしゃいましたら宜しくお願い致します。

  • エクセル2010で入力規則をVBAで記述

    エクセル2010で入力規則をVBAで記述したいです。 まずは、マクロの自動記録すると以下のコードが保存できました。 Selectionをrange("A1")に変更したのですが、エラーが出てきました。 With Selection.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="東京,ニューヨーク" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .IMEMode = xlIMEModeNoControl .ShowInput = True .ShowError = True End With 調べると Operator:=xlBetweenではなくて、Operator:=xlEqualだと思うのですが、 それでもだめでした。

  • VBAで入力規則 エラーでも入れたい

    Excel2003を使っています。 Range("B1").Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=INDIRECT(A1)" これを使って「=INDIRECT(A1)」を入力規則のリストとして、セルのA1が空欄の状態で入れたいのですが、実行時エラー1004となってしまいます。 セルのA1には複数ある定義された名前のどれか一つが入るようにします。そして、そのどれか一つが入っていれば、エラーは起こることなく入力規則は設定されます。 ただ、A1は後々この資料を使うときに打ち込みたいため、VBAを走らせている段階では空欄のままにしておきたいのです。 これ、VBAを使わず直接入力規則を設定するときも、A1が空欄だと「元の値はエラーと判断されます。続けますか?」というメッセージが出ますよね? たぶん、これが原因だと思いますが、直接入れるときはそのメッセージを「はい」で強行することができます。 これをVBAで入れるときにもできないものかなと思っています。 VBAで強行して設定する方法はないものでしょうか? ちなみに「On Error Resume Next」をつけてみましたが、その場合はエラーは出ないものの入力規則も設定されませんでした・・・。

  • エクセルでchangeプロジェクトを複数設定する場

    すみません、マクロの基本的な部分を分かっておらず、Google検索などで知識を得た程度のど素人なのですが。 A1にあ・い A2にう・え A3にお・か をプルダウンで選べるように設定していて 【い】を選んだ場合は選択肢を【う】と【お】のみにする 【あ】を選んだら選択肢を戻す 【え】を選んだ場合は選択肢を【あ】と【お】のみにする 【う】を選んだら選択肢を戻す 【か】を選んだ場合は選択肢を【あ】と【う】のみにする 【う】を選んだら選択肢を戻す という挙動を設定したく、複数のchangeプロジェクトを書いてみたのですが、どうしても1箇所のみうまくいきません。(下のマクロでは【え】を選んだ場合、A3の選択肢が消えない。) 書き方・考え方自体が間違っているのかもしれませんが、教えていただけませんでしょうか。 Private Sub Worksheet_Change(ByVal Target As Range) 処理1 Target 処理2 Target 処理3 Target End Sub Private Sub 処理1(ByVal Target As Range) If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub Else If Range("A1").Value = "い" Then With Range("A2").Validation .Delete .Add _ Type:=xlValidateList, _ Formula1:="う" End With Range("A2") = "う" With Range("A3").Validation .Delete .Add _ Type:=xlValidateList, _ Formula1:="お" End With Range("A3") = "お" MsgBox "入場区分を【い】に設定した場合は、分配フラグは【え】、お客様情報取得フラグは【お】に固定となります。" ElseIf Range("A1").Value = "あ" Then With Range("A3").Validation .Delete .Add _ Type:=xlValidateList, _ Formula1:="お,か" End With With Range("A2").Validation .Delete .Add _ Type:=xlValidateList, _ Formula1:="=INDIRECT(A1)" End With End If End If End Sub Private Sub 処理2(ByVal Target As Range) If Intersect(Target, Range("A2")) Is Nothing Then Exit Sub Else If Range("A2").Value = "え" Then With Range("A3").Validation .Delete .Add _ Type:=xlValidateList, _ Formula1:="お" End With Range("A3") = "お" With Range("A1").Validation .Delete .Add _ Type:=xlValidateList, _ Formula1:="あ" End With Range("A1") = "あ" MsgBox "分配フラグを【え】に設定した場合は、入場認証区分は【あ】、お客様情報取得フラグは【お】に固定となります。" ElseIf Range("A2").Value = "う" Then With Range("A3").Validation .Delete .Add _ Type:=xlValidateList, _ Formula1:="お,か" End With With Range("A1").Validation .Delete .Add _ Type:=xlValidateList, _ Formula1:="=INDIRECT(A3)" End With End If End If End Sub Private Sub 処理3(ByVal Target As Range) Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("A3")) Is Nothing Then Exit Sub Else If Range("A3").Value = "か" Then With Range("A1").Validation .Delete .Add _ Type:=xlValidateList, _ Formula1:="あ" End With Range("A1") = "あ" With Range("A2").Validation .Delete .Add _ Type:=xlValidateList, _ Formula1:="う" End With Range("A2") = "う" MsgBox "お客さま情報をかに設定した場合は、入場区分は【あ】、分配フラグは【う】に固定となります。" ElseIf Range("A3").Value = "お" Then With Range("A1").Validation .Delete .Add _ Type:=xlValidateList, _ Formula1:="あ,い" End With With Range("A2").Validation .Delete .Add _ Type:=xlValidateList, _ Formula1:="=INDIRECT(A1)" End With End If End If End Sub

  • Excel VBA 入力規則のリスト化

    Excel VBAにて入力規則でリスト化しようと思っています。 通常セルを範囲指定によってリスト化する場合、 以下のようなコードになると思うのですが、 (セルA1にセルB1~B10の内容がリスト化される) Range("A1").Select With Selection.Validation .Add Type:=xlValidateList, Formula1:="=B1:B10" End With 例えばB1~B3, B6~B10などのような不連続な範囲をリスト化 する方法はありませんでしょうか? 宜しくご教示の程お願い致します。