Excel VBA(Excel2000)で実行時エラー'1004'が発生する原因について

このQ&Aのポイント
  • Excel VBA(Excel2000)において、セルの入力規則を設定するvalidationプロパティ設定時にエラーが発生することがあります。
  • 特に、ボタンやチェックボックスなどを配置したシートにおいて、validation.addメソッドを使用するとエラーが発生することが確認されています。
  • このエラーの具体的な原因は不明ですが、他の方法を使用することで回避することができます。詳細な情報が必要な場合は、Excel VBAの専門家に相談してください。
回答を見る
  • ベストアンサー

実行時エラー'1004': アプリケーション定義またはオブジェクト定義のエラーです。

Excel VBA(Excel2000)について質問です。 セルの入力規則を設定するvalidationプロパティ設定時に表記エラーが起こるのですが、どういった原因なのか知りたいです。 そのエラーを起こす手順ですが、 1. 新規ブックを作成する 2. Visual Basic Editorを使用して、Sheet1に以下のコードを埋めこむ: Private Sub Worksheet_Activate()   With Cells(1, 1).Validation     .Delete     .Add Type:=xlValidateList, Formula1:="test1,test2"   End With End Sub 3. Sheet1 ←→ Sheet2 or Sheet3をタブで切り替える   → 問題なく作動する 4. Sheet1の任意の場所に、コントロール ツールボックスのコマンドボタンを配置する 5. Sheet1 ←→ Sheet2 or Sheet3をタブで切り替える   → これも問題なく作動する 6. 4.で配置したコマンドボタンを押す 7. Sheet1 ←→ Sheet2 or Sheet3をタブで切り替える   → 表題のエラーが発生する といったように、ボタンやチェックボックス等を配置したシートにおいてvalidation.addメソッドを使用すると、何故かエラーが発生します。この発生パターンが見つかるまでずっと悩んでいました。 今現在は、一応、他の方法で回避できてはいますが、どうしてこのエラーが出るのかはっきりしたいので、ご存知の方はどうぞご指導お願い致します。

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

  • ベストアンサー
  • wildcard
  • ベストアンサー率54% (54/100)
回答No.1

> 6. 4.で配置したコマンドボタンを押す この操作でコマンドボタンがアクティブ状態になってしまうのが原因のようですね。これはチェックボックスとかリストボックス等でも起こると思います。 最も簡単な対処方法としては、Cells(1,1).SelectとかRange("A1").SelectをWith Cells(1, 1).Validation の前に記述し、特定のセルをアクティブにする方法でしょう。

secky_martha
質問者

お礼

早速のご回答、どうもありがとうございます。 > この操作でコマンドボタンがアクティブ状態になってしまうのが原因のようですね。これはチェックボックスとかリストボックス等でも起こると思います。 なるほど、そういうことがあるのですか。 私が手順で挙げたようなパターンは良くあると思い、他にも同じ現象で困っている人がいるのではないかと、色々なサイトを探しまわったのですが、ヒントが全然見つかりませんでした。 > 最も簡単な対処方法としては、Cells(1,1).SelectとかRange("A1").SelectをWith Cells(1, 1).Validation の前に記述し、特定のセルをアクティブにする方法でしょう。 実は私の回避策も、該当するセルをSelectし、With Selection.Validation...End Withのようにしています。 とにかく、頂いた回答で大方すっきり致しました。どうもありがとうございました。

関連するQ&A

  • アプリケーションまたはオブジェクト定義のエラーです

    データを入力するシート「input]、データを格納するシート 「data」とがあり、 新規のレコードを追加入力するために 新規入力ボタン(CommandButton2)を作成しましたが、 実行しようとすると、表記のエラーが出てしまします。 コードの確認、とそして、どこがいけないのかをご指摘いただけないでしょうか?どうかよろしくお願いいたします。 以下コードです。 Private Sub CommandButton2_Click() '新規入力 Dim row As Integer row = Sheets("data").Cells(Rows.Count, 2).End(xlUp).Offset(1) Sheets("data").Cells(row, 2).Value = Sheets("data").Cells(row - 1, 2).Value Range("AL1") = Sheets("data").Cells(row, 2).Value End Sub

  • 実行時エラー'1004': アプリケーション定義またはオブジェクト定義

    実行時エラー'1004': アプリケーション定義またはオブジェクト定義について Dim code As String Dim lastrow As Integer Dim i As Integer Sub calc() Dim code As String Dim day_s As Integer, month_s As Integer, year_s As Integer Dim day_e As Integer, month_e As Integer, year_e As Integer Dim row_length As Integer code = "998407.o" day_e = 31 month_e = 12 year_e = 2005 day_s = 1 month_ = 1 year_s = 2005 Range("B4:H65536").ClearContents For i = 0 To 365 * 0.65 Step 50 URL = "URL;http://table.yahoo.co.jp/t?s=" & code & "&a=" & month_s & "&b=" & day_s & "&c=" & year_s & "&d=" & month_e & "&e=" & day_e & "&f=" & year_e & "&g=d&q=t&y=" & i & "&z=" & code & "&x=.csv" If i = 0 Then lastrow = 4 Call GETデータ If Range("B4") = "" Then Exit Sub End If Else lastrow = Range("B4").End(xlDown).Row + 1 Call GETデータ Range("B" & lastrow, "H" & lastrow).Delete row_length = Range("B4").End(xlDown).Row If row_length - lastrow < 49 Then Exit For End If End If Next Range("B5:H65536").Sort key1:=Columns("B") lastrow = Range("B4").End(xlDown).Row Range("B5", "B" & lastrow).NumberFormatLocal = "yyyy/mm/dd" Range("A1").Select End Sub もうひとつ Sub GETデータ() With ActiveSheet.QueryTables.Add(Connection:=URL, Destination:=Cells(lastrow, 2)) ↑ここにデバックで黄色になります。 .Name = "t?s=998407.o&g=d" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .WebSelectionType = xlSpecifiedTables .WebFormatting = xlWebFormattingNone .WebTables = "10" .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .WebSingleBlockTextImport = False .WebDisableDateRecognition = False .WebDisableRedirections = False .Refresh BackgroundQuery:=False End With End Subになります。Excel2007です。

  • .Add Type:=xlValidateInpu

    VbaでA列のみ入力規則でひらがなにしたいのですが、 Sub test() With Columns(“a”).Validation .Delete .IMEMode = xlIMEModeHiragana End With End Sub にすると、実行時エラー1004になります。 .Delete .Add Type:=xlValidateInputOnly .IMEMode = xlIMEModeHiragana にすると、問題ないです。 .Add Type:=xlValidateInputOnly がどういう意味なのか知りたいのですが Validationのヘルプを見ても、 Add Typeに関する記載がありません。 なぜ、Add Typeがないとエラーになるのでしょうか?

  • オブジェクト名をVBAで指定する方法を教えてくださ

    VBAでワークシートにOLEObjectsのコマンドボタンを設置してるのですが ボタンのオブジェクト名をVBAで指定するにはどうすればいいでしょうか? Private Sub CommandButton1_Click() With ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False, DisplayAsIcon:=False) .Object.Name = "ボタン1" .Object.Caption = "ボタン" .Object.Font.Size = 9 .Width = ActiveCell.Width .Height = ActiveCell.Height End With End Sub を実行すると、 .Object.Name = "ボタン1" の部分で 「オブジェクトは、このプロパティまたはメソッドをサポートしていません。(Error 438)」というエラーになります。 他のコードは大丈夫です。 オブジェクト名をVBAで指定する方法を教えてください。 当方エクセル2003です。

  • ユーザーフォームが表示前にエラーになります。

    お世話になります。 Excelのシート上にコマンドボタンを配置して それをクリックするとユーザーフォームが表示されるようにしたいのですが、下記のコードだと「フォーカスがありません」と1行目でエラーで止まってしまいます。 解決方法を教えてください。 Private Sub コマンドボタン_Click() ユーザーフォーム.Show End Sub よろしくお願いします!

  • VBA アプリケーション・オブジェクト定義のエラー

    ある行と別の行と同じ内容の文章が入っている場合、それを削除するマクロをくんでいますが、 アプリケーション・オブジェクト定義のエラーとのことで作動してくれません。。。 以下のような記述なのですが、アドバイスをいただけたら幸いです。 よろしくお願いいたします。 Sub 重複削除() Dim dataend Cells(Rows.Count, 5).End(xlUp).Select dataend = ActiveCell.Row For i = 2 To dataend - 1 For k = 1 To dataend - i If Cells(2, i).Value = Cells(2, i + k).Value Then '''''''''''''''''''''ここでひっかかる Rows(i + 1).Select Selection.Delete End If Next Next End Sub

  • 入力規則 ひらがな VBA うまくできない

    シート全体を入力規則でひらがな入力するvbaコードを実行したいのですが Sub Macro2() With Cells.Validation .Delete .IMEMode = xlIMEModeHiragana End With End Sub これだと実行時エラー1004が発生するのですが、何かが間違ってると思うのですが、 どこが変でしょうか? ご教授よろしくお願いします。

  • 実行時エラー1004 Pasteの失敗

    シート(式マスタ)に、それぞれの追加したいシートに合わせた式を入力した行を複数用意しておき, 行を追加したいシート(資産A)またはシート(資産B)に、以下のようなVBAを登録したボタンを置いておきます。 このシート(資産A)またはシート(資産B)のボタンを押すごとに、シート(式マスタ)に入力してあるそれぞれのシートにあった行を、1行ずつ追加されるようにしたつもりでした。 このボタンは1回目は無事動くのですが、もう一行増やそうとボタンを押すと、     実行時エラー1004      WorlsheetクラスのPasteメソッドが失敗しました と表示されます。 初めからできないのならまだわかるのですが。。 どのようにしたらいいかご教示していただけたら幸いです。 Sub 行追加() Application.ScreenUpdating = False Dim SHlast As Long '各シートの最終行を取得 With Sheets("式マスタ") Select Case ActiveSheet.Name Case "資産A" .Range("B5:FO5").Copy Case "資産B" .Range("B7:FO7").Copy End Select End With With ActiveSheet .Unprotect SHlast = .Cells(.Rows.Count, 2).End(xlUp).Row .Paste Destination:=.Range(.Cells(SHlast + 1, 2), .Cells(SHlast + 1, 171)) .Protect UserInterfaceOnly:=True End With Application.CutCopyMode = False Application.ScreenUpdating = True End Sub

  • VBA アプリケーション定義またはオブジェクト定義エラーについて

    doc_wbkというブックのSheets(2)の内容をdoc_wbk2のActiveSheetにコピーしようとしています。 以下のコードの5行目で「アプリケーション定義またはオブジェクト定義エラー」が出てしまいます。ブックやシートまで指定しないといけないのかと思い doc_wbk.Sheets(2) を5行目行頭に追加しましたが変わりません。逆に5行目行頭の . を外してやるとアクティブシートの内容をコピーしてしまいます。Sheets(2)の内容をコピーしてやるにはどうしたらよいでしょうか?よろしくお願いします。 Set doc_wbk = Workbooks.Open(doc_dir + doc_file, 0) With Sheets(2) If .Range("A4").Value <> "" Then row_num = .Range("a65536").End(xlUp).Row .Range(Cells(4, 1), Cells(row_num, 11)).Copy doc_wbk2.ActiveSheet.Cells(row_num2 + 1, 1) End If End With

  • VBA 実行時エラー 424 の表示が出る

    下記のVBAを作成していてエラーが出てしまいます 8行目でオブジェクトが必要ですと表示が出るのはなぜでしょうか? やりたいこととしてはボタンを選択すると特定のシート[ADDR_TO]を 同一階層上に[ADDR_TO]のファイル名でCSVとして保存することです ---- Private Sub CommandButton2_Click() Dim strNewBookName As String strNewBookName = "ADDR_TO" Workbooks.Add.SaveAs Filename:=ThisWorkbook.Path & "\" & strNewBookName, FileFormat:=xlCSV SheetCSV.Cells.Copy With Workbooks(strNewBookName & ".csv") .Worksheets(strNewBookName).Range("A1").PasteSpecial Paste:=xlPasteAll .Worksheets(strNewBookName).Range("A1").Select .Save .Close End With Call MsgBox("出力完了", vbInformation) End Sub

専門家に質問してみよう