• 締切済み

エクセルVBA 参照ファイルに書き込み出来ない

エクセル2016の振る舞いがエクセル2003と異なる 何とかしたいが、エクセル2003では何の問題も無い。 Workbooks(Csvbook).Worksheets(CSV_SHEET_NAME).Range(Cells(Line, 1), Cells(Line, 234)) = VAL() または Worksheets(CSV_SHEET_NAME).Cells(Line, N).Value = UserForm1.Controls("TextBox" & Format$(N)).Text 実行時エラー'1004':アプリケーション定義またはオブジェクト定義のエラーです。 で処理事止まるが継続で正常動作する。 プログラム変更後ビルド前では思ったように動作する。 別のエラー発報後はサクサク動作する。 2003と2016の見た目は 2003では参照CSVウインドウがActivateのままである 解決策ご教示頂けないでしょうか。

みんなの回答

  • kkkkkm
  • ベストアンサー率65% (1618/2457)
回答No.2

Cells(Line, 1), Cells(Line,234) がCSV_SHEET_NAMEがActiveでない場合エラーになると思います。

  • kkkkkm
  • ベストアンサー率65% (1618/2457)
回答No.1

VAL()がいまいち何か分かりませんが > 2003では参照CSVウインドウがActivateのままである 該当コードの前に参照CSVウインドウをActivateにしてみるとか、あとエラー時にLine, Nの値を見てみるとかはどうでしょうか。 "TextBox" & Format$(N)は"TextBox" & Nでもいけると思います。

関連するQ&A

  • VBA VLOOKUPとセルのコピーができません

    助けてください マクロでVLOOKUPを使い、データを持ってこようとしてますが上手くいきません やりたいこと:Sheet3(在庫を貼付)にある4列目の数値を、Sheet1のG列で照合し、Sheet1の9列目に持ってきたい Sheet1:cells(6,9)にVLOOKUPの式を入れる 関数で言えば=VLOOKUP($G,Sheet3!C:F,4,FALSE) cells(6,9)をcells(7,9)からcells(2000,9)までコピー これを実行すると 「アプリケーション定義またはオブジェクト定義のエラーです。」 とでて止まってしまいます ActivesheetsやWorkbooks、WorksheetsやSheetsで設定したりしてもエラーは変わりますが 止まってることには変わりありません どうしたら動くようになりますか? Sub vlook() Dim Nname As String macx = "ルーチンワーク20130223.xlsm" 'マクロ用ファイル「ルーチンワーク20130223.xlsm」がある Sheets(1).Select Workbooks(macx).Activate Worksheets(1).Activate ddir = Cells(33, 2) 'cells(33,2)にフォルダ情報がある Nname = Dir(ddir & "在庫推移.xlsx") '在庫推移.xlsxというVLOOKUPしたいファイルがある Workbooks.Open Filename:=ddir & Nname Workbooks(Nname).Activate Sheets(1).Select Worksheets(1).Activate 'VLOOKUPで在庫を持ってくる ActiveCell.FormulaR1C1 = "=VLOOKUP(RC7,'在庫を貼付'!C[-6]:C[-3],4,FALSE)"   '自動記録マクロから持ってきてます Worksheets(1).Activate Sheets(1).Select Range(Cells(6, 9)).Copy Destination:=Sheets(1).Range(Cells(7, 9)) 'この行でエラーが出る

  • EXCEL2000 VBA でエラートラップできません。

    次のスクリプトで”Select Case Workbooks(saki).Worksheets(z).Name”のところで変数zに存在しないワークシートのインデックスが入った時にはエラーが出るので、On Erroe Goto で回避しようと思うのですができません(そのままマクロが止まってしまう)。 なぜ回避できないのか教えてください。 また回避するいい方法があれば教えてください。 Private Sub UserForm_Activate() moto = Cells(2, 5) saki = Cells(1, 5) For z = 1 To 50 On Error GoTo e0 Select Case Workbooks(moto).Worksheets(z).Name Case "検索" Case "結果" Case "エフ" Case "ツール" Case "記憶" Case Else On Error GoTo e0 UserForm3.ComboBox1.AddItem Workbooks(moto).Worksheets(z).Name End Select Next e0: For z = 1 To 50 On Error GoTo e1 Select Case Workbooks(saki).Worksheets(z).Name    ’ここでエラーが出る(実行時エラー'9' インデックスが有効範囲にありません) Case "検索" Case "結果" Case "エフ" Case "ツール" Case "記憶" Case Else On Error GoTo e1 UserForm3.ComboBox2.AddItem Workbooks(saki).Worksheets(z).Name End Select Next e1: End Sub

  • VBAで B.xlsの番号と同じ番号がD.xlsにあればくっつけたい

    VBAで B.xlsの番号と同じ番号がD.xlsにあればくっつけたい  エクセル関数でいうとVlookUPをしたいのですが、1004エラーがかかってしまいます。 必要なところだけを抜き取っているので、分かりにくいかと思いますが、   Dim a, b, c, d, y, x, z, i, j, k, m, n, o, r As Long a = 2 '2 なのは、A2から数えるため。 b = 0 'BookBのレコードの数を数えるための変数。 Do While Workbooks("B.xls").Worksheets("Sheet1").Cells(a, 1) <> "" a = a + 1 b = b + 1 Loop Workbooks("B.xls").Activate For k = 2 To b For m = 2 To 300000 エラー⇒ If Workbooks("B.xls").Worksheets("Sheet1").Cells(k, 1) = Workbooks("D.xls").Worksheets("Sheet1").Cells(m, 1) Then Workbooks("B.xls").Worksheets("Sheet1").Cells(k, 12) = Workbooks("D.xls").Worksheets("Sheet1").Cells(m, 2) Workbooks("B.xls").Worksheets("Sheet1").Cells(k, 13) = Workbooks("D.xls").Worksheets("Sheet1").Cells(m, 3) End If Next m Next k   ・   ・   ・ の部分でつまっています><; 説明が不十分でしたら追加いたしますので、初心者の簡単なエラーだとは思うのですが、教えてください<(__)>

  • Excel vba selectが効かない

    2と3の2つのエクセルファイルがあります。縦の列を新しいファイルの横の行に コピーしていきたいプログラムです。 2のファイルの1シート目の"C8:C25" 3のファイルの1シート目の"C9:C65" を新しい1のファイルの1シート目の1行目にコピーするプログラムを 作っていますが1シート目はpasteされるのですが 3のファイル2シート目からselectの指定が"C9:C65"ではなく、B9からQ65の指定になってしまい思ったコピーができません(★のところ)、1シート目はうまくいっているのでどうして3のファイルの2シート目のからうまくいかないかわかりません。 5シートまででテストをしているのですが実際は各々255シートありもってくる列も 12列あります。とりあえずCの列だけ5シートで試してみています。 Dim i As Long Dim N As Long i = 1 N = 1 Do While i <= 5 ''C列''' Workbooks(2).Worksheets(i).Activate   '2のファイル Worksheets(i).Range("C8:C25").Select   'もってくるところ Selection.Copy Workbooks(1).Worksheets(1).Activate   '1新しいファイル Range("C" & N).Select   '貼り付けるところ Selection.PasteSpecial Paste:=xlPasteValues, operation:=xlNone, skipblanks:=False, Transpose:=True Workbooks(3).Worksheets(i).Activate   '3のファイル Workbooks(3).Worksheets(i).Range("C9:C65").Select  '★もってくるところ Selection.Copy Workbooks(1).Worksheets(1).Activate   '1新しいファイル Range("U" & N).Select   '貼り付けるところ Selection.PasteSpecial Paste:=xlPasteValues, operation:=xlNone, skipblanks:=False, Transpose:=True i=i+1 N=N+1 LOOP

  • Excel VBA

    今、Excel2000で作成したEXcelブックをExcel2007でも正常に動作するか確認しています。 伝票のようなもので、枠内に数字を記入後、保存する際に別のブックにセルの全コピーしてから保存するようになっているのですが、Excel2007で実行すると列幅と行幅がコピーされません。 Set NewBook = Workbooks.Add Workbooks(ThisWorkbook.Name).Sheets("伝票").Cells.Copy NewBook.Sheets("Sheet1").Activate ActiveSheet.Paste Excel2003で動かしたときは、大丈夫でした。 原因がわかりません。コピーの仕方がいけないのでしょうか。

  • VBA マクロ実行時エラー 1004

    すみません (1)Workbooks(p_addr_Name).Worksheets(sheet_check).Range(Cells(7, 2), Cells(19, 2)).Copy (2)Workbooks(p_SH_weekly).Worksheets("Sheet1").Range(Cells(7, i), Cells(19, i)).PasteSpecial Paste:=xlPasteAll その際(2)で「実行時エラー'1004'」が出ました、教えてください。 *上記引数は全部入りました 宜しくお願いします

  • Excel VBA .xlsm→.xls変換

    VBAマクロの初心者です。 Office2010で作ったプログラムをOffice2000で実行したいのですが、 *.xlsmなら問題なく実行できるプログラムが、*.xlsでは 「エラー1004 アプリケーション定義またはオブジェクト定義のエラーです。」となります。作ったプログラムの詳細は以下の通りです。 *.xlsmで実行した際も、繰り返しが多いせいかどうも遅いので、効率化できる方法がありましたら、併せてご教授いただけると幸いです。 よろしくお願いいたします。 目的:Sheet1にある表AをSheet2にある表Bに変換する。(添付画像参照)    ※年月と国名は、あらかじめSheet2に入力してあります。     また、空白にゼロを入れる作業は省いています。 以下、実行したプログラムです。 Sub paste() Dim name11 Dim name12 Dim name13 Dim name21 Dim name22 Dim name2k For i = 2 To 150 'Sheet1の行はiで定義し、2行目から150行目まで繰り返し For j = 2 To 300 'Sheet2の行はjで定義し、2行目から300行目まで繰り返し name11 = Worksheets("Sheet1").Cells(i, 1).Value 'Sheet1の"年" name12 = Worksheets("Sheet1").Cells(i, 2).Value 'Sheet1の"月" name13 = Worksheets("Sheet1").Cells(i, 3).Value 'Sheet1の"国名" name21 = Worksheets("Sheet2").Cells(j, 1).Value 'Sheet2の"年" name22 = Worksheets("Sheet2").Cells(j, 2).Value 'Sheet2の"月" For k = 3 To 100 'Sheet2の列はkで定義し、3列目から100列目まで繰り返し name2k = Worksheets("Sheet2").Cells(1, k).Value 'Sheet2の1行目(国名)※*.xlsで実行し、デバッグすると、この行がエラー1004になります。 If (name11 = name21 And name12 = name22 And name13 = name2k) Then '年と月が一致し、かつSheet1の3列目(国名)とSheet2の1行目(国名)が一致したら Worksheets("Sheet1").Cells(i, 4).Copy Destination:=Worksheets("Sheet2").Cells(j, k) 'Sheet1のi行4列目の"量"を、Sheet2のj行k列に貼り付ける。 '(j行は正しい年月の横、k列は正しい国名の下。) Exit For '検索→貼り付けのループを抜けて最初に戻る。 End If Next Next Next End Sub

  • エクセルVBAでSheet1.ActivateとSheet(n).Activate

    エクセル2000です。 VBAでの疑問点を教えてください。 Sub test1() Sheet1.Activate MsgBox ActiveSheet.Name End Sub これは問題なく作動します。 Sub test2() x = ThisWorkbook.Worksheets.Count For n = 1 To x Sheet(n).Activate MsgBox ActiveSheet.Name Next End Sub これは「SubまたはFunctionがていぎされていません」というエラーになります。 もちろん、 Sub test3() x = ThisWorkbook.Worksheets.Count For n = 1 To x Sheets(n).Activate MsgBox ActiveSheet.Name Next End Sub のように書けばOKなのは存じておりますが、これではSheet名に係らず、左から順番となってしまいます。 Sub test4() x = ThisWorkbook.Worksheets.Count For n = 1 To x Sheets("Sheet" & n).Activate MsgBox ActiveSheet.Name Next End Sub のように明確にシート名として記述すればOKなのですが、それでは、Test1のSheet1.Activate が通って、Sheet(n).Activate が通らないのはなぜでしょう? しょうもない質問でごめんさない。

  • Excel VBAでの関数入力

    お世話になっております。 ExcelのVBAに関する質問です。 やりたいこととしては  (1) CSVファイルを開き、そのファイル名を取得後  (2)「カウントマクロ.xlms」、「件数表」シートのB2から最終行まで、(1)のCSV(Sheet1)を参照先とするCOUNTIF関数を入力する。というものです。   Dim OpenFileName As String OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.csv?") Workbooks.Open OpenFileName Filename = Dir(OpenFileName) Workbooks("カウントマクロ.xlsm").Activate Worksheets("件数表").Activate LASTROW = Cells(Rows.Count, "A").End(xlUp).Row Range("B2").Select ActiveCell.FormulaR1C1 = _ "=COUNTIF(Filename.Sheet1!R2C10:R10C10,""*"" & RC[-1] & ""*"")" Range("B2").Select Selection.AutoFill Destination:=Range(Cells(2, "B"), Cells(LASTROW, "B")) End Sub 上記のように記述してみたのですが、 "=COUNTIF(Filename.Sheet1!R2C10:R10C10,""*"" & RC[-1] & ""*"")" の部分Filenameが件数表シートの関数にそのまま表示されており、うまく機能しませんでした。 このようにVBA上で関数を入力する場合、FileNameのように定義したファイル名はどのように記述すればよいのでしょうか。 どなたかご教示いただけましたら幸いです。

  • マクロでフォントサイズを縮小するには!?

    現在、エクセルのマクロを勉強しています。 文字数がある一定を超えるとフォントサイズを縮小したいのですが、 どうもうまくいきません。 下記のような場合はどうしたらいいのでしょうか?? file_name= "aa.xls" data_sheet= "data" Windows(file_name).Activate Worksheets(data_sheet).Activate Workbooks(file_name).Worksheets(data_sheet).Cells(i, 2).Select Selection.Copy Windows(file_name).Activate Worksheets(print_sheet).Activatee Workbooks(file_name).Worksheets(print_sheet).Range("J20").Select /* ここに フォントサイズを入れたらいいのでしょうか??*/ Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False

専門家に質問してみよう