• 締切済み

EXCEL VBA エラーメッセージ「「Moveメソッドに失敗しました」の対応方法

いつも拝見しています。 あるブック(A.xls)にある10個のシートのうち"Sheet1"以外のシートを別のブック(B.xls)に移動しようとしたところ「Moveメソッドに失敗しました」とエラーが出てしまいました。 何が原因なのか見当がつきません。 このメッセージを過去ご覧になった方がいらっしゃいましたら、どのように対応されたか教えてください。よろしくお願いします。 以下が考え中のソースです。///////////////////// 'ケースに移動する(今はコピー) Dim cnt As Integer cnt = 0 For Each pWS In Workbooks("A.xls").Worksheets If pWS.Name <> "Sheet1" Then pWS.Move after:=Workbooks("B.xls").Sheets(cnt+1) cnt = cnt + 1 End If Next

みんなの回答

回答No.2

MOVEが失敗するということは、 (1) 移動先に書き込めない (2) 移動元を変更できない のどちらかだと思います。 確認して欲しいことは、 (1) 「B.xls」を同時に開いているか? (2) 「A.xls」または「B.xls」が読み込み専用になっていないか。あるいはブックに保護がかかっていないか。同じファイルを他にも開いていて共有違反になっていないか。 とりあえず、思いつくところはこんなとこです。 まったく外しているかもしれませんが。

hakku
質問者

お礼

お答えいただいてありがとうございます。 説明不足だったのですが、シートの移動はボタンイベントなのですが、このボタンを1回押して処理するだけではエラーにならずに正常にB.xlsに移動できるのですが、5、6回繰り返して動かすとエラーがでます。 エラーの全文は「Moveメソッドは失敗しました_Worksheetオブジェクト」となっています。 またブックを一度閉じればこのエラーはなくなり、また5.6回動かすとエラーが出ました。 何かを解放処理すれば良いとも思うのですが、どうすればいいのかわからない状態です…。

全文を見る
すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

B.xlsに同じ名前のシートがあるということでは?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルVBA 無駄な部分をおしえてください

    VBA初心者です。 多数のシートを条件によって二つのブックに分ける、というVBAを作ろうとしています。 なにぶん素人なので、無駄な文章が多いのではないかと心配で、 お知恵を拝借できればと思い投稿いたしました。どうぞよろしくお願いいたします。 やりたいこと:Book1のA列に100程度の文字列があり、そのいずれかと一致するシート名(Book1のSheets(2)以降)を持つシートはBook2の最終シートの後ろへ、どの文字列ともシート名が一致しないシートはBook3の最終シートの後ろへ移動。(「最終シートの後ろへ移動」がうまくいっていません) VBAの内容:Book1のH1に「=countif(A:A,G1)」と入力しておき、G1にシート名を入力させ H1>0ならば該当シートをBook2へ、それ以外はBook3へ移動 の繰り返し   Application.ScreenUpdating = False Dim j As Integer, k As Integer j = Workbooks("Book2.xls").Worksheets.Count k = Workbooks("Book3.xls").Worksheets.Count Do While Workbooks("Book1.xls").Sheets.Count > 1 Range("G1").Value = Worksheets(2).Name If Range("H1").Value > 0 Then Worksheets(2).Move after:=Workbooks("Book2.xls").Sheets(j) Else Worksheets(2).Move after:=Workbooks("Book3.xls").Sheets(k) End If Loop

  • Excel VBA 指定シートの取込

    こんにちは。 ExcelのVBAを使用して、異なるBookのシートを取込みたいのですが、 シートが無かった場合の処理方法がわかりません。 現在のコードは下記の様になっております。 With Workbooks.Open"BOOK1.xls" .Worksheets("Sh1").Cells.Copy ThisWorkbook.Sheets("Sheet1").Range("A1") .Worksheets("Sh2").Cells.Copy ThisWorkbook.Sheets("Sheet2").Range("A1") .Worksheets("Sh3").Cells.Copy ThisWorkbook.Sheets("Sheet3").Range("A1") .Close End With Book1に指定したシートが無い場合、何もしないようにしたいのですが、 どの様に書き換えれば宜しいでしょうか? よろしくお願いします。

  • 「 VBA の 宣言 」 がない場合の問題点は ?

    下記例で、 「 宣言 」 なしでも、現在のところ、問題は発生してませんが、 今後、「 宣言 」 がなかった場合の 「 問題点の例 」 を教えて下さいませ。 ------------------------------- Sub ブックA*の全シートをコピー() Dim Wb As Workbook '宣言 For Each Wb In Workbooks If Wb.Name Like "ブックA*.xls" Then With Workbooks("ブックB.xls") Wb.Worksheets _ .Copy after:=.Sheets(.Sheets.Count) End With End If Next Worksheets(Worksheets.Count).Activate MsgBox ActiveSheet.Index Worksheets("Sheet1").Select End Sub

  • ブック間のシート移動

    EXCEL VBA初心者です。 ブックAのシートAをブックBのシートの一番左側に移動させようと思います。 以下を実行するとエラーが出ますがなぜでしょうか? エラーの原因と対策方法を教えて下さい。 Sub シート移動() Worksheets("シートA").Move _ Before:=Workbooks("ブックB.xls").Sheets(1) End Sub ブックAはブック名が毎回変わります。 ブックAはメール添付を開いたブックです。 ブックAはシートがシートAしかありません。 シートAは名前が変わりません。 マクロコードはブックBあるいは個人用マクロブックに置きます。 よろしくお願いします。

  • ExcelのVBAについてです。

    例えば"Book1.xls"という名前のブックの"Sheet1"という名前のシートの一部を削除する。 これをVBAでやらせようと思うんですが、"Book1.xls"を開かずに行うことはできるんでしょうか。 Workbooks("Book1.xls").Worksheets("Sheet1").Range("C7:M51").ClearContents のようにしてるんですがうまくいきません。 "Book1.xls"はLAN上のブックで実際はフルパスで指定してます。 よろしくお願いします。

  • excel vba

    テーブル情報に基づきシートをコピーするVBAマクロを記述したい。 ExcelのBook111のSheet1に次のような データが入っています。 (1、2)セルにn=3という数字が入っているものとします。 その数値に合わせて、この場合は3なので Sub Sample01() Workbooks("Book3.xls").Worksheets("booksheet3").Copy After:=Workbooks("Book111.xls").Sheet(1) End Sub のようなつまり、booksheet3なるシートをBook111(固定なBOOK)にコピーしようとしています。 このようなことをVBAで書くにはどうすればいいのでしょうか。 ただしBook名とシート名はあくまでデータの値にもとづいたデータをもってくることになります。 要するに間接参照したデータに基づき処理するのをどのように記述するかという質問です。 A列 B列 1 回数 n=3 2     3     4 Book1.xls book1sheet ←n=1 5 Book2.xls book2sheet ←n=2 6 Book3.xls book3sheet ←n=3 7 Book4.xls book4sheet 8 Book5.xls book5sheet 9 Book6.xls book6sheet ←n=6 10 Abc,xls Defsheet ←n=7

  • シートを別のブックに移動させたいのですが、

    シートを別のブックに移動させたいのですが、 マクロで作成するとこうなりました。 Workbooks.Open Filename:= _ "C:\Documents and Settings\YUUKORON\My Documents\YYYY.xls" Windows("GGGG.xls").Activate Sheets("2010.4YY").Select Sheets("2010.4YY").Move Before:=Workbooks("YYYY.xls").Sheets(1) が、移動先のブック名が移動させたいシートのセルF1に入力されているので、ブック名YYYYをどのようにすればよいのか教えてください。  Workbooks.Open Filename:= _   "C:\Documents and Settings\YUMIKO\My Documents\" & Range("F1").Value & ".xls" Windows("GGGG.xls").Activate Sheets("2010.4YY").Select  Sheets("2010.4YY").Move Before:=Workbooks("YYYY.xls").Sheets(1) 試してみた方法 Sheets("2010.4YY").Move Before:=Workbooks("("2010.4YY").Range("F1").Value.xls").Sheets(1)  Sheets("2010.4YY").Move Before:=Workbooks _ ("C:\Documents and Settings\YUMIKO\My Documents\" & Range("F1").Value & ".xls").Sheets(1) どれもダメでした。 あと、今は、Sheet(1)の前となっていますが、常にブックの先頭に移動させることはできるのでしょうか? シート名は、2010.5YY、2010.6YY というふうに毎月増えていく予定です。 初心者です。よろしくお願いします。

  • エクセルVBA セルを参照した文字検索でシートをアクティブにする

    VBA初心者で困っています。 ブックAのシート1の“A1”の値が、同一ブック内の違うシートにあるかどうか検索し、あればそのセルをアクティブにして黄色に色づけ、なければメッセージを返すという処理をVBAで行いたいです。 似たような質問があってそれを参考にしてみましたが どうも上手く動いてくれません。 参考にさせていただいたのは   Set r = Workbooks("ブックB.xls").Sheets("シート1").Columns("A") _     .Find(What:=Workbooks("ブックA.xls").Sheets("シート1").Range("A1").Value, _        LookIn:=xlValues, _        LookAt:=xlWhole, _        SearchOrder:=xlByColumns, _        SearchDirection:=xlNext, _        MatchCase:=True)   If r Is Nothing Then     MsgBox "no data"   Else     Application.Goto r     Set r = Nothing   End If End Sub というコードです どなたか、わかる方教えてください。

  • VBA Excel処理の追加を2点教えてください

    Office2003(SP3) 以下は、昔、教えてもらったExcel VBAスクリプトで、よく使わせて もらってます。「C:\mybooks\」にあるxlsファイル(a001.xls、a002.xls、 a003.xls・・・・)を片っ端から開き、 1つのBookに束ねる動作をします。 これだけでも大変便利なのですが、もう少し改善いたしたく。 (1) 束ねられたBookのSheet名が、Sheet1、Sheet1 (2)、Sheet1 (3)、 Sheet1 (4)・・・ になってしまいます。そこで、ファイル名から拡張子を落 とした文字列をSheet名にセットする記述をご教示下さい。 (2) a001.xls、a002.xls、a003.xls・・・は、それぞれSheet1、Sheet2、 Sheet3を含みます。Sheet1だけが抜き取られてSheet2、Sheet3が残された大量 の残骸Bookが開きっぱなしになります。これら、保存せずに閉じる記述を追加 したいのですが。 よろしくお願い致します。 Sub OpenFiles() Dim i As Integer Dim wb As Workbook Dim fname Dim dirname As String ' i = 1 dirname = "C:\mybooks\" fname = Dir(dirname + "*.htm") If fname <> "" Then Do While fname <> "" If fname <> "." And fname <> ".." Then If i = 1 Then ' 最初のファイルを開く Workbooks.OpenText FileName:=dirname + fname Set wb = ActiveWorkbook ' 最初のファイルを新規ブックに複製して閉じる。 ActiveSheet.Copy wb.Close Set wb = ActiveWorkbook Else ' 2番目以降のファイルは複製した最初のファイルに追加 Workbooks.OpenText FileName:=dirname + fname ActiveSheet.Move After:=wb.Worksheets(wb.Worksheets.Count) End If i = i + 1 End If fname = Dir Loop Else MsgBox "検索条件を満たすファイルはありません。" End If Set wb = Nothing End Sub

  • エクセルVBAの転記処理について

    2つのエクセルのブックがあり、 ブックAの[シート1]には、 A列    B列     C列    D列  E列 コード   社名    品名    注文  合計 12345  グルメ社  カレー  400  800 78910  AA社    豆     100  250 12345  グルメ社  カレー  400  800 44123  ラック社  にんじん  350  400 のように、過去の注文データが1万件近くならんでおります。 ブックBの[現在]シートには、同じ列に同じ項目が並んでいるのですが、 A列    B列     C列    D列  E列 コード   社名    品名    注文  合計 12345  グルメ社  カレー  400  800 89123               100  250 55158                    800 44123  ラック社  にんじん  350  400 のように、コード以外空欄というセルがあり、それが4千件あります。 ブックBにてB列が空欄の場合、ブックAのB・C・D列の値を転記する方法がわからず 困っております。 Sub ああ() Dim lRow As Long Dim i As Long Dim エラーコード(25000) Workbooks.Open Filename:=("C:\Documents and Settings\PC01\デスクトップ\bookA.xls") Workbooks("C:\Documents and Settings\PC01\デスクトップ\bookA").Activate Sheets("sheet1").Select lRow = Cells(Rows.Count, 4).End(xlUp).Row x = "" cnt = 0 For i = 4 To lRow Workbooks("C:\Documents and Settings\PC01\デスクトップ\bookA").Activate Sheets("sheet1").Select If Cells(i, 2).Value = "" Then JAN = Cells(i, 1) Windows("book2.xls").Activate Sheets("現在").Select 商品datarec = Cells(Rows.Count, 1).End(xlUp).Row x = "" Set 範囲 = Range(Cells(2, 1), Cells(商品datarec, 1)) 検索 = JAN On Error Resume Next x = Application.WorksheetFunction.match(検索, 範囲, 0) On Error GoTo 0 If x = "" Then cnt = cnt + 1 エラーコード(cnt) = JAN Else Windows("book2.xls").Activate Sheets("現在").Select メーカー名 = Cells(x + 1, 5).Value 品名 = Cells(x + 1, 6).Value Workbooks("C:\Documents and Settings\PC01\デスクトップ\bookA").Activate Sheets("sheet1").Select Cells(i, 2) = 社名 Cells(i, 3) = 品名 End If End If Next i If cnt <> 0 Then MsgBox "リストにない商品が" + Str(cnt) + "件ありました。" + vbCrLf End If End Sub というプログラムを組みました。宣言は強制させておりません。 途中で混乱してきたためおかしなコードになっております。 すみませんが、お願い致します。

専門家に質問してみよう