• ベストアンサー

VBAが得意な方 助けてください Rangeについて

入門書を読みながらVBAを勉強しています。 3日以上繰り返して、ぜんぜんすすみません。困っています。お願いします。ご協力お願いします。 コードの内容は (1)マクロから別のエクセルファイルを開く (2)開いたファイルのシート1を選択 (3)Endプロパティを使ってRange("A65536")から上にジャンプするものです。 本に書いてあったコード通りうち実行しても4行目で以下のエラーメッセージが表示されます。 --出るエラー-- 実行時エラー'1004 'RangeクラスのActivateメソッドが失敗しました。 --使っているコード-- Application.DisplayAlerts = False Workbooks.Open Filename:= "C:\1班.xls" Worksheets("Sheet1").Select Range("A65536").End(xlUp).Activate 使っているものはExcel2000です。 ご協力お願いします。

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

  • ベストアンサー
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.2

Worksheets("Sheet1").Select Worksheets("Sheet1").Range("A65536").End(xlUp).Activate 上記のように、エラー行にも、Selectしたシート名を記述してみてください。 これで通れば、コードが記述されている場所の問題だとおもいます。 多分、シートモジュールに記述されているのではないでしょうか? 標準モジュールに記述されているなら、シート名を記述していないコードでも通るとおもいます。 標準モジュールとシートモジュールの違いは解りますか? モジュールとイベントについて http://www.sanynet.ne.jp/~awa/excelvba/kouza/chapt_01/sec08_01.html Excel(エクセル) VBA入門:VBE(Visual Basic Editor/VBエディタ)の使い方 http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_vbe.html

bitter140307
質問者

お礼

ありがとうございます。シート名を追加したらうまくいきました!! ずっと考えていたことで解決して凄くうれしかったです。ありがとうございます。 記述する場所によって違うんですね。モジュールのによって違いがあるとは始めて知りました。教えていただいたサイトも勉強になりました。ありがとうございます。

その他の回答 (2)

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

私の場合下記でもうまく行きました。 Sub test02() 'Application.DisplayAlerts = False Set wb = Workbooks.Open(Filename:="01化.xls") Set Sh = wb.Worksheets("Sheet1") Sh.Range("A65536").End(xlUp).Activate End Sub でやってみてください。 ーー 質問のコードを考える上で、次の2つのブックが出てきます (1)モジュールを書いたブック・シート (2)開いたブックのシート これらを上記のように明示的にするほうが、今後色々なVBAコードで安全だと思います。 実行時エラー'1004  の後に、「Globalオブジェクト」と出ていると、これが原因でしょう。後に出ているエラーコメントも、もし在れば書いておくべきだ。 質問のエラー原因がこれかどうか、判りません。私も質問のコードでやってみると、エラーは出ませんでした。

bitter140307
質問者

お礼

アドバイスありがとうございます。 今後はシートの場所を書いてみます。

  • rukuku
  • ベストアンサー率42% (401/933)
回答No.1

こんばんは bitter140307さんと同じExcel2000を使っていますが、 状況を再現できませんでした。 A列にどんな値が入っているのか教えてください。 また、4行目を以下のように変更すると、 メッセージが出ます。 そのメッセージがどのような物になるのかを教えてください。 MsgBox (Range("A65536").End(xlUp).Address)

bitter140307
質問者

お礼

わざわざ再現していただいてありがとうございます。 内容が不足していてすみません。

関連するQ&A

  • VBA 他のエクセルファイルデータを読み込む

    エクセルのVBAに関する質問です。 かじった程度の知識でがんばってはみたのですが、以下のことがどうしてもできません。 集計ファイルと、それぞれが入力するファイルがいくつか(具体的には1A.xls、1B.xls、2A.xls、2B.xlsといった数字とアルファベットの組み合わせ)あります。 入力ファイルに書かれているデータを集計ファイルに取り込もうと考えています。 入力ファイル名が(1.xls,2.xls・・・)の様に数字だけの取り込みはできました。 m = Val(UserForm2.TextBox1.Text) For i = 1 To m On Error GoTo myError Workbooks.Open Filename:="C:" & i & ".xls", UpdateLinks:=0 Range("f65536").End(xlUp).Activate Workbooks(i & ".xls").Activate Sheets("入力ファイル").Select Range("A3:X52").Select Application.CutCopyMode = False Selection.Copy Workbooks("集計ファイル.xls").Activate Sheets("DB").Activate Range("a65536").End(xlUp).Activate Selection.Offset(1).Select ActiveSheet.Paste Range("a65536").End(xlUp).Select   Workbooks(i & ".xls").Close SaveChanges:=False myError: Next i Application.DisplayAlerts = True こんな感じです。 これを、数字だけでなく数字+アルファベット.xlsのファイル名にしてデータを取り込むにはどうすればいいのでしょうか?色々と試行錯誤をしたり、ネットで調べたりしたのですが、詰んでしまいました。 どなたかお助け下さい。

  • エクセルVBAの変数利用

    シートのC1セルに入力したブック名をアクティブにするための 変数なのですが、アクティブになりません。 下のようにしていますが、とのようにすればよいでしょうか? Sub test() Dim FileName As Range FileName = ThisWorkbook.Path & "\" & Sheets("sheet1").Range("C1") & ".xls" Workbooks.FileName.Activate End Sub

  • ワードのマクロからエクセルシートを開きデータを読み込む

    ワードマクロからエクセルシートのデータを読み込みたいのですが、マクロを実行すると「コンパイルエラー:変数が定義されていません。」というエラーが出てしまいます。変数xlUpで引っかかってるようなんですが、どのように定義すればよいですか? コードは以下です。 Dim Workbooks As Object Dim ecell As Integer Workbooks.Open FileName:="namesheet.xls" ecell = Workbooks("namesheet.xls").Worksheets(1).Range("B100").End(xlUp).Row よろしくお願いいたします。

  • VBAの書き方を教えてください 3

    何度も申し訳ございません。 以前にもこちらで質問させて頂いている者です。 Sheet1のrange("A1")をVLOOKUPで検索後の文字を取得し、同じ名前のシートを検索し、さらにrange("A1000")をアクティブにしてここからコードをつなげて処理しています。 range("A1")の処理が終わったら、range("A2")の処理に入り、range("A3") range("A4")を続けて処理を行っているのですが、range("A4")でVLOOKUPの検索が空白の場合、On Error GoTo myErrorで次のrange("A5")の処理に入りますが、On Error Gotoは1回のみの処理しかできないみたいで、range("A5")が空白の場合、実行時エラー9が発生してしまいます。 教えて頂いたコードを解読し、On Error Resume Nextなどを使おうとしているのですが、上手くできません。 1から10まで質問しっぱなしなのですが、どなたかご協力を頂けないでしょうか。 とりあえず自分の必要なコードはある程度省いて、2つ分のみ記載します。 本来この後、10回同じ処理を行います。 よろしくお願い致します。 Private Sub 記帳_Click()  On Error GoTo myError1  Dim i As Long  Dim myFlg As Boolean    For i = 1 To worksheets.Count If worksheets(i).Name = Range("A1").Value Then myFlg = True Exit For End If Next i If myFlg = True Then With worksheets(i) .Activate .Range("A1000").End(xlUp).Select    ActiveCell.Offset(1, 0).Select   ActiveCell = Range("J1") ActiveCell.Offset(0, 1).Select ActiveCell = Range("K1") End With Else MsgBox "該当シートなし" End If myError1: On Error GoTo myError2 For i = 1 To worksheets.Count If worksheets(i).Name = Range("A2").Value Then myFlg = True Exit For End If Next i If myFlg = True Then With worksheets(i) .Activate .Range("A1000").End(xlUp).Select ActiveCell.Offset(1, 0).Select   ActiveCell = Range("J1") ActiveCell.Offset(0, 1).Select ActiveCell = Range("K1") End With Else MsgBox "該当シートなし" End If End sub

  • 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のように定義したファイル名はどのように記述すればよいのでしょうか。 どなたかご教示いただけましたら幸いです。

  • VBAで実行時エラー 1004 がでる

    Excel2013です。以下のコードでエラーがでます。 どのシートがアクティブでもデータを閉じる時に特定のシート(sheet1)のA行の最終行の一つ下をアクティブにし上書き保存して閉じるようにしたいです。 以下記述したコードです。 Sub Auto_Close() Worksheets(1).Activate Range("A60000").End(xlUp).Offset(1).Select 'Aセル60000から最終行のセルの一つ下に下がる ActiveWorkbook.Save End Sub 閉じるときは問題ないのですが、開いたときにエラーがでます。 以下エラー文です。 実行時エラー 1004 'Worksheets'メソッドは失敗しました'_Global'オブジェクト どこを直せばいいのでしょうか? アドバイス願います。

  • ECXEL VBA - Selectメソッドの失敗

    Rangeを指定するのに、 Workbooks("abc").Sheets("Sheet1").Range("A1").Select と言う風に指定したいのですが、これを行なうと -------------------------------------------- 実行時エラー '1004': RangeクラスのSelectメソッドが失敗しました。 -------------------------------------------- となってしまう為、いつもわざわざ下記のようにしています。 Workbooks("abc").Activate Sheets("Sheet1").Select Range("A1").Select Selectだけでなく、Copyの貼り付け等の時も同様で かなりの手間と、コードの長さになってしまっています。 どこかの設定を変えると出来たりするのでしょうか? 又、他に良い方法がありましたらお教え下さい。 よろしくお願いします。

  • エクセル2000VBAで質問です。

    デスクトップ上に「T」というフォルダがあり、そこに「x05.txt」という カンマ区切りファイルがあるのですが、 そのファイルの内容を デスクトップ上の実績フォルダ内の「book1.xls」sheet1に、 カンマ区切りで貼り付けていく処理をしたいのです。 「x05.txt」の05は、作成した日付が?月5日という意味です。 貼り付けも、上書きではなくA1に1日のデータ、その続きの行の1列目に2日目のデータを貼り付ける という風にしたいのですが・・・さっぱりです。 OSは、WindowsXPです。 どうか、よろしくお願いいたします。 以下、作っている途中のプログラムです。 * 変数の宣言を抜いております。 Sub データ結合() SYSBASE = ActiveWorkbook.Name res = MsgBox("累積処理を開始します。", vbOKCancel) If res = vbCancel Then Exit Sub End If Workbooks(SYSBASE).Sheets("累積データ").Activate Cells.Delete For h = 1 To 31 メインパス名 = ActiveWorkbook.Path 日付パス名 = Right("00" + Mid(Str(h), 2), 2) On Error GoTo オープンエラー ChDir メインパス名 + "\" + 日付パス名 On Error GoTo 0 If ermsg = 1 Then ermsg = 0 Else ermsg = 0 For i = 1 To 10 ファイル名 = "T-LOG1_" + Right("00" + Mid(Str(i), 2), 2) On Error GoTo オープンエラー Workbooks.Open Filename:=メインパス名 + "\" + 日付パス名 + "\" + "個別" + _ "\" + ファイル名 + ".txt" On Error GoTo 0 If ermsg = 1 Then ermsg = 0 Exit For End If Workbooks(SYSBASE).Sheets("累積データ").Activate datarec = Range("A1").CurrentRegion.Rows.Count If datarec = 1 And Cells(1, 1) = "" Then Workbooks(ファイル名 + ".txt").Activate Range(Cells(1, 1), Cells(1, 20)).Copy Workbooks(SYSBASE).Sheets("累積データ").Activate Cells(1, 1).Select ActiveSheet.Paste End If Workbooks(ファイル名 + ".txt").Activate D_datarec = Range("A1").CurrentRegion.Rows.Count If D_datarec <= 1 Then ActiveWorkbook.Close savechanges:=False Else Range(Cells(2, 1), Cells(D_datarec, 20)).Copy Workbooks(SYSBASE).Sheets("累積データ").Activate datarec = Range("A1").CurrentRegion.Rows.Count Cells(datarec + 1, 1).Select ActiveSheet.Paste Workbooks(ファイル名 + ".txt").Activate Application.DisplayAlerts = False ActiveWorkbook.Close savechanges:=False Application.DisplayAlerts = True End If Next i End If Next h Exit Sub オープンエラー: ermsg = 1 Resume Next End Sub

  • このVBAの処理を速くしたいのですが…

    お世話になります data.xlsmとBook1-Book25.xlsxの 合計26ファイルを開いた状態で 以下のマクロを実行しています 私が使っているマシンでは 10分くらいかかるのですが この時間を短くすることは 出来ますでしょうか? Sub copy() Application.ScreenUpdating = False Workbooks("Book1.xlsx").Worksheets("Sheet1").Range("A1:D1048576").copy Workbooks("data.xlsm").Worksheets("Sheet1").Range("A1").PasteSpecial Paste:=xlPasteValues Range("G1:K1048576").Clear Range("A1:E1048576").copy Range("G1:K1048576").PasteSpecial Paste:=xlPasteValues Range("I2").ClearContents Range("I1048576").End(xlUp).ClearContents Range("A2:D1048576").Clear Range("O1:Q1").copy Range("S1048576").End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues あとは上記をBook2,Book3と変えてBook25まで同じ式を記入 End Sub

  • エクセルVBA

    こんばんは! エクセルマクロ初心者です。 エクセルVBAについて教えてください! パス(?)を指定して、ファイルを開けてから実行する マクロを書きたいのですが、エラーになってしまいます。 Dim Filename as string (1)Workbooks.Open Filename:= "\D\MyDocument\●●.xls" (●●はファイル名) (2)Workbooks("●●").Activate (1)の部分は実行されて目的のファイルは開くのですが(2)でエラーになってしまいます。 どなたか教えてください! 以前までは、このマクロ実行できていたのですが、突然できなくなりました。 困ってます。

専門家に質問してみよう