【先着1,000名様!】1,000円分をプレゼント!

マクロ実行時に、エラー’1004RangeクラスのPasteSpecialメソッドが失敗と表記され、マクロが実行されません。

マクロの内容は、任意の範囲をコピー、新規book追加し、
新規bookに(1)Paste:=xlPasteValues (2)Paste:=xlPasteColumnWidths (3)Paste:=xlPasteFormats の順に貼り付けし保存するものです。

いろいろ調べては見たのですが、当方初心者の為、わからずじまいです。お手数ではございますが、どなたかご教授願います。
下記にマクロ内容全部記載します。
よろしくお願いします。

*********************************************************
*********************************************************
Sub 日報別ファイルに保存したい1()
Worksheets("日報").Range("A3:AF36").Copy
With Workbooks.Add
Cells.Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Cells.Select
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

ApplicationDisplayAlerts = True '同名FILEが存在する場合'
ActiveWorkbook.SaveAs Filename:= _
"c:\日報\" & ActiveSheet.Range("J2") & "年" & ActiveSheet.Range("l2") & "月" & ActiveSheet.Range("n2") & "日_日報.xls" _
, FileFormat:=xlNormal
.Close file


End With

End Sub

このQ&Aに関連する最新のQ&A

A 回答 (2件)

こんにちは。



>結果、「ThisWorkbook」上の下記のマクロを削除すると、正常に動きだしました。
それは、Copy 範囲が、消えてしまうことで、PasteSpecial が利かなくなってしまうからです。

まず、シート名の長いコードは、これだけでよいはずです。

Private Sub Workbook_Activate()
 Select Case StrConv(Trim(ActiveSheet.Name), vbNarrow)
 Case "1" To "30", "日報"
  Application.Calculation = xlCalculationManual
 End Select
End Sub


-------------------------------------------
''もし、そのままでダメでしたら、 ' Application.EnableEvents = False 'イベントの介入を阻止する のところのコメント・ブロック('コードの手前のアポストロフィ)を外して、再度試してみてください。

Sub 日報別ファイルに保存したい2()
Dim myRng As Range
Set myRng = Worksheets("日報").Range("A3:AF36")
 ' Application.EnableEvents = False 'イベントの介入を阻止する

With Workbooks.Add
  myRng.Copy
 .ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteValues, _
             Operation:=xlNone, SkipBlanks:=False, Transpose:=False
  myRng.Copy
 .ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteColumnWidths, _
             Operation:=xlNone, SkipBlanks:=False, Transpose:=False
  myRng.Copy
 .ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteFormats, _
             Operation:=xlNone, SkipBlanks:=False, Transpose:=False
 
  Application.CutCopyMode = False
 
 ApplicationDisplayAlerts = True '**これは、そのままでは必要ないはずです。'
 
 ActiveWorkbook.SaveAs Filename:="c:\日報\" & ActiveSheet.Range("J2") & "年" & _
                 ActiveSheet.Range("l2") & "月" & _
                 ActiveSheet.Range("n2") & "日_日報.xls", _
                 FileFormat:=xlNormal
 .Close file
End With
Set myRng = Nothing
'Application.EnableEvents = True 'イベントマクロの活動を戻す

End Sub
    • good
    • 3
この回答へのお礼

Wendy02さん!ありがとうございます!
Wendy02さんに教えていただいたマクロで、正常に動きました!
本当に助かりました!

VBAの難しさも再認識です・・・。

初心者の私みたいなもんにご丁寧に対応いただき本当にありがとうございました。
また、何かあったときには、投稿させていただきたいと思います。
もちろん、自分なりに調べた上で・・・。

ありがとうございました。

お礼日時:2009/08/26 11:10

こんばんは。



何が原因かは分かりません。
Excelのバージョンはいくつでしょうか。

最初、シートモジュールに書いたものだと思いましたが、どうもそうではないようです。

当面、このように考えてみました。

'-------------------------------------------
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
'-------------------------------------------

xlPasteColumnWidths 

ステップ・マクロを動かしてみて、「xlPasteColumnWidths」マウスをここにおいてみてください。
「8」という数字が出てきていますか?定数が取れていない可能性があります。

もしそうなら、

Selection.PasteSpecial Paste:= 8, Operation:=xlNone, _

と入れてみてください。

この回答への補足

Wendy02さん、御回答ありがとうございます。
Excelのバージョンは2003です。
マクロ自体は標準モジュールに記載しております。

いろいろ情報が不足してしまい申し訳ありません。
さらに補足させていただきます。

コピー、新規book追加、cells.selectまでは実行されており、
一つ目のPaste部分でエラーとなります。
また、他のマクロが影響しているのではと思い、いろいろいじってみた
結果、「ThisWorkbook」上の下記のマクロを削除すると、正常に動きだしました。
****************************************************************
****************************************************************
Private Sub Workbook_Open()
If ActiveSheet.Name = "1" Then _
Application.Calculation = xlCalculationManual
End Sub
---------------------------------------------------------------
Private Sub Workbook_Activate()
If ActiveSheet.Name = "1" Or ActiveSheet.Name = "日報" Or
ActiveSheet.Name = "2" Or ActiveSheet.Name = "3" Or ActiveSheet.Name = "4" Or ActiveSheet.Name = "5" Or
ActiveSheet.Name = "6" Or ActiveSheet.Name = "7" Or ActiveSheet.Name = "8" Or ActiveSheet.Name = "9" Or
ActiveSheet.Name = "10" Or ActiveSheet.Name = "11" Or ActiveSheet.Name = "12" Or ActiveSheet.Name = "13" Or
ActiveSheet.Name = "14" Or ActiveSheet.Name = "15" Or ActiveSheet.Name = "16" Or ActiveSheet.Name = "17" Or
ActiveSheet.Name = "18" Or ActiveSheet.Name = "19" Or ActiveSheet.Name = "20" Or ActiveSheet.Name = "21" Or
ActiveSheet.Name = "22" Or ActiveSheet.Name = "23" Or ActiveSheet.Name = "24" Or ActiveSheet.Name = "25" Or
ActiveSheet.Name = "26" Or ActiveSheet.Name = "27" Or ActiveSheet.Name = "28" Or ActiveSheet.Name = "29" Or
ActiveSheet.Name = "30" Then _
Application.Calculation = xlCalculationManual
End Sub
---------------------------------------------------------------
Private Sub Workbook_Deactivate()
Application.Calculation = xlCalculationAutomatic
End Sub
---------------------------------------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.Calculation = xlCalculationAutomatic
End Sub
****************************************************************
****************************************************************
マクロ内容は自動計算の設定です。
何か関係はあると思うのですが・・・。

補足日時:2009/08/25 10:39
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVBAでの値のコピーのエラーについて

お世話になっております。
現在、マクロを作成し、実行すると毎回ある部分で
エラーが生じ、にっちもさっちも行かない状態です。以下の内容を記述してあります。
**********************************************
Sheets("C").Select
Cells.Select
Selection.Copy
Sheets("A").Select
Cells.Select
Selection.PasteSpecial Paste:=xlPasteValues
対象列 = InputBox("対象列を入力")
Sheets("A").Select
If 対象列 = "L" Then
Range("L12:L243").Select
Selection.Copy
Sheets("B").Select
ActiveSheet.Unprotect Password:="1111"
  ↓この部分が毎回エラーをおこしています
Range("L12").PasteSpecial Paste:=xlPasteValues
  ↑この部分が毎回エラーを起こしています
ActiveSheet.Protect Password:="1111"
  Application.DisplayAlerts = False
Worksheets("A").Delete
***********************************************
実施したい事は、”A”とあるシートより、シート”B”に値を貼り付けるというものですが、常に貼り付けの部分でエラーが生じております。エラーが生じた際に、表示されるエクセルのヘルプには、以下のような事がかかれているのですが、シートBには値が入力されていないことが原因なのでしょうか?
*****以下エクセルのエラーメッセージ************************
実行時エラー”1004”
RangeクラスのPastespecialメソッドが失敗しました************************
*****以下エクセルのヘルプ内容************************
適用された状況ではメソッドを使用できません。特に、Range オブジェクトの一部のメソッドでは、対象となる範囲にデータが入力されている必要があります。範囲にデータが入力されていない場合は、メソッドの実行に失敗します。

お忙しい所申し訳ありませんが、宜しくお願いいたします。

お世話になっております。
現在、マクロを作成し、実行すると毎回ある部分で
エラーが生じ、にっちもさっちも行かない状態です。以下の内容を記述してあります。
**********************************************
Sheets("C").Select
Cells.Select
Selection.Copy
Sheets("A").Select
Cells.Select
Selection.PasteSpecial Paste:=xlPasteValues
対象列 = InputBox("対象列を入力")
Sheets("A").Select
If 対象列 = "L" Then
Range("L12:L243").Select
Selection.Copy
Sheets("B").Se...続きを読む

Aベストアンサー

Sheets("A").Select
If 対象列 = "L" Then
Range("L12:L243").Select
Selection.Copy
Sheets("B").Select
ActiveSheet.Unprotect Password:="1111"
Range("L12").PasteSpecial Paste:=xlPasteValues
ActiveSheet.Protect Password:="1111"
の部分を
If 対象列 = "L" Then
Sheets("B").Unprotect Password:="1111"
Sheets("A").Range("L12:L243").copy
Sheets("B").Range("L12").PasteSpecial Paste:=xlPasteValues
Sheets("B").Protect Password:="1111"
の様にして下さい。
どうもコピーとペーストのタイミングの様です

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

Qエクセル:マクロ「Application.CutCopyMode = False」って?

エクセルのマクロを記録していると

「Application.CutCopyMode = False」

というものがよく出てきますが、これは何でしょう?
どういう意味のものかわかりません。
削除しても差し支えないのもでしょうか?

Aベストアンサー

「Application.CutCopyMode = False」の前で
セルのコピー、または切り取りを行っていると思います。
これは、その操作(セルのコピー、または切り取り)を無効にしているだけです。
------------
Range("A1").Select
Selection.Copy ← これを無効にしている
Range("A2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
------------
上記の場合であれば、「Application.CutCopyMode = False」を削除しても問題ありませんが、
以下の場合、貼り付け処理でエラーになります。
------------
Range("A1").Select
Selection.Copy
Range("A2").Select
Application.CutCopyMode = False
ActiveSheet.Paste ← ココでエラー
------------
ご自分で、セルをコピーしてみると分かると思いますが、コピーした範囲が点線で点滅されます。
「Application.CutCopyMode = False」をすると、
その点滅がなくなります。

「Application.CutCopyMode = False」の前で
セルのコピー、または切り取りを行っていると思います。
これは、その操作(セルのコピー、または切り取り)を無効にしているだけです。
------------
Range("A1").Select
Selection.Copy ← これを無効にしている
Range("A2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
------------
上記の場合であれば、「Application.CutCopyMode = False」を削除しても問題ありませんが、
以下の場合、貼り付け処理でエラーになります。
------------
...続きを読む

QVBA 実行時エラー1004 rangeメソッドは失敗しました。globalオブジェクトのエラー

始めまして、VBA初心者のものです。
ただいまエクセルでグラフを作成しています。作業自体は単純作業の繰り返しなのでVBAを用いてやりたいのですが、マクロを実行したときに実行時エラー’1004’rangeメソッドは失敗しました。’_global’オブジェクトとメッセージが出て、実行できません。 デバックをすると以下の5行目で黄色のバーが出ていました。自分なりに原因を考えたのですがrangeの関係するところに、Range("A8:A1587,e8:e1587")というような変数を用いないやり方でやると上手くいくので、変数に関する定義がまずいと思うのですが、それ以上の事は分かりません。どなたか、分かる方がおりましたら、よろしくお願いします。また、プログラムは以下のようになります。

Sub 繰り返し()
'繰り返し
Dim s As Integer
For s = 0 To 17
Range("cells(8,1):cells(1580,1),cells(8,s+2):cells(1580,s+2)").Select
Range("cells(8,s+2)").Activate
Charts.Add
ActiveChart.ChartType = xlXYScatter
ActiveChart.SetSourceData Source:=Sheets("20081216_210647").Range( _
"cells(8,1):cells(1580,1),cells(8,s+2):cells(1580,s+2)"), PlotBy:=xlColumns
ActiveChart.SeriesCollection(1).Name = "=""0810p2x"""
ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="0810p2x"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "0810p2x"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "t"
.Axes(xlValue, xlPrimary).HasTitle = False
End With
Next
End Sub

始めまして、VBA初心者のものです。
ただいまエクセルでグラフを作成しています。作業自体は単純作業の繰り返しなのでVBAを用いてやりたいのですが、マクロを実行したときに実行時エラー’1004’rangeメソッドは失敗しました。’_global’オブジェクトとメッセージが出て、実行できません。 デバックをすると以下の5行目で黄色のバーが出ていました。自分なりに原因を考えたのですがrangeの関係するところに、Range("A8:A1587,e8:e1587")というような変数を用いないやり方でやると上手くいくので、変数に関する定義...続きを読む

Aベストアンサー

>ご指摘を受けたところを書き換えて回してみた結果、書き換えた箇所
>でエラーがでます。(実行時エラー’1004’’cells’メソッドは失敗
>しました。’global’オブジェクト)
>しかし、何が原因でエラーになるか自分では分かりません。

≪例1≫
Range(Cells(8, 1), Cells(1587, 2)).Select
上記の例では、RangeとかCellsの上位オブジェクトであるシート名が省略されています。
ActiveSheet.Range(ActiveSheet.Cells(8, 1), ActiveSheet.Cells(1587, 2)).Select
というわけです。
マクロ実行時に、Activeな(Excelで表示されている)シートが上位オブジェクトとして、自動的に認識されます。

≪例2≫
Sheets("Sheet2").Range(Cells(8, 1), Cells(1587, 2)).Select
上記の例では、Rangeのみシート名が記述されています。
Sheets("Sheet2").Range(ActiveSheet.Cells(8, 1), ActiveSheet.Cells(1587, 2)).Select
というわけです。
Activeなシートが、Sheet2の場合はエラーになりません。
しかし、ActiveなシートがSheet2以外の場合、エラーが発生します。
直前に、
Sheets("Sheet1").Select
などとしていれば、ActiveシートがSheet1になっていますから、エラーになります。

Sheets("Sheet2").Range(Sheets("Sheet2").Cells(8, 1), Sheets("Sheet2").Cells(1587, 2)).Select
と書いておけば安心です。
Withステートメントを使えばスッキリ纏めることができます。
With Sheets("Sheet2")
  .Range(.Cells(8, 1), .Cells(1587, 2)).Select
End With

# Sheets("Sheet2")の上位オブジェクトが省略されていることにも気がついてください。

>そこで自分で基礎を勉強したいのですが推薦できる参考書などがござ
>いましたら、教えていただけませんか?
私自身は、入門書程度の雑誌を1冊買っただけです。どれが良いとかはよく分かりません。
「マクロの記録」を活用して、参考コードを取得し、汎用性のあるコードに編集しています。
新しい単語があれば、文字カーソルを単語の上に置き、F1キーを押してVBAのヘルプを必ず見るようにしています。
躓いた時は、Web検索して欲しい情報を得たり、あるいは、こうした掲示板で先輩方のお力をお借りしています。

Excel(エクセル)VBA入門:目次
http://oshiete1.goo.ne.jp/kotaeru_reply.php3?q=4651404
エクセル入門・初級編
http://www.kenzo30.com/excel_kiso.htm

>ご指摘を受けたところを書き換えて回してみた結果、書き換えた箇所
>でエラーがでます。(実行時エラー’1004’’cells’メソッドは失敗
>しました。’global’オブジェクト)
>しかし、何が原因でエラーになるか自分では分かりません。

≪例1≫
Range(Cells(8, 1), Cells(1587, 2)).Select
上記の例では、RangeとかCellsの上位オブジェクトであるシート名が省略されています。
ActiveSheet.Range(ActiveSheet.Cells(8, 1), ActiveSheet.Cells(1587, 2)).Select
というわけです。
マクロ実行時に、Activeな...続きを読む

QVBAマクロ 実行時エラーが出たり出なかったり

実行時エラー '1004'「RangeクラスのPasteSpecialメソッドが失敗」
というエラーが実行時に出たり出なかったりします。
常にエラーが出てくれればそれはそれで(?)いいのですが、普通に実行できることもあるので自分には対処できませんでした。。。

ある形式に沿って保存されている大きめのファイル(4つで1組)をマクロによって数式処理させるマクロとなります。
このデータが大きく、マシンパワーもあまりないため開いたり閉じたり、またコピーペーストにと各所で処理に多少時間が掛かるので、それが問題かなとも思い処理の間に待ち時間を挿入したりしてみたのですが、その際にはエラーが出る確率は有意に低くはなりましたが、まだ出てしまいます。

エラーした際にデバッグすると下のような処理の中でのPasteSpecialにハイライトが掛かっており、4つのうちどれでも起こりうるようです。

原因とその解決策を教えて頂きたいと思います。宜しくお願いします。

----------------------------------------


'対象のファイルを開いてコピー、その後閉じる
Workbooks.Open Filename:=ActiveWorkbook.Path & "\" & ActiveCell.Offset(i, 0).Range("A1").Value
Range("E1:E500000").Select
Selection.Copy
Application.DisplayAlerts = False
ActiveWindow.Close
Application.DisplayAlerts = True
'myfileに4つを貼り付け(今回は省略してますがForで回して4つ出揃った後、それらで数式処理)
Workbooks(myfile).Activate
If j = 1 Then
 Range("G3").Select
 Selection.PasteSpecial
ElseIf j = 2 Then
 Range("H3").Select
 Selection.PasteSpecial
ElseIf j = 3 Then
 Range("I3").Select
 Selection.PasteSpecial
ElseIf j = 4 Then
 Range("J3").Select
 Selection.PasteSpecial
End If

実行時エラー '1004'「RangeクラスのPasteSpecialメソッドが失敗」
というエラーが実行時に出たり出なかったりします。
常にエラーが出てくれればそれはそれで(?)いいのですが、普通に実行できることもあるので自分には対処できませんでした。。。

ある形式に沿って保存されている大きめのファイル(4つで1組)をマクロによって数式処理させるマクロとなります。
このデータが大きく、マシンパワーもあまりないため開いたり閉じたり、またコピーペーストにと各所で処理に多少時間が掛かるので、それが問題かな...続きを読む

Aベストアンサー

> 原因とその解決策を教えて頂きたいと思います。

遅すぎたかもしれませんが(汗)、自分の知っている範囲で・・・
(自分は専らAccess VBAばかり扱っているので)

【原因】
PasteSpecialを実行する前に、その参照元となるブックが
閉じられたことにより、その前に行った「Select」による選択が
無効化してしまっています。
(エラーにならないことがあるのは・・・別のブックが「Active
 Workbook」と判断されて閉じられていたりしないでしょうか(汗))

【解決策】
PasteSpecialを実行する前の「ActiveWindow.Close」を
やめて、PasteSpecialの実行後に、コピー元のブックを
閉じるようにします。

このとき、閉じる対象を確実に「コピー元のブック」とするために、
コピー元を開く際の「Workbooks.Open」の戻り値を、変数に
記録しておき、これを使用してブックを閉じます。

【コード】
'コピー元を記録するための変数を宣言
Dim Wkb As Workbook, Rng As Range

'変数「Wkb」に、コピー元を記録
'(Workbookなどの「オブジェクト」と総称されるものに値を記録する
' 場合は、先頭に「Set 」をつける必要があります。また、その際は、
' Openメソッドの引数(ここではファイルパス)は「( )」で囲みます)
Set Wkb = Workbooks.Open(Filename:=ActiveWorkbook.Path & "\" & ActiveCell.Offset(i, 0).Range("A1").Value)

'先頭に「Wkb.」をつけて、同ブックの「E1~E500000」であることを
'明示して変数に格納した後、コピー
'(ここではSelectは省略した方が効率的です)
Set Rng = Wkb.Range("E1:E500000")
Rng.Copy

'できればここも「myfile」用の変数を別に用意して、上と同様に
'対象を明示するとともに、Selectは省略した方がよいかと思います。
Workbooks(myfile).Activate
If j = 1 Then
 Range("G3").Select
 Selection.PasteSpecial
ElseIf j = 2 Then
 Range("H3").Select
 Selection.PasteSpecial
ElseIf j = 3 Then
 Range("I3").Select
 Selection.PasteSpecial
ElseIf j = 4 Then
 Range("J3").Select
 Selection.PasteSpecial
End If

'コピー用の選択状態を解除
'(これにより、「クリップボードに~」のメッセージが表示されなくなる
' ので、DisplayAlertsの切り替えが不要になります)
Application.CutCopyMode = False

'コピー元を閉じる
Wkb.Close

'念のため、明示的に変数を初期化してメモリを解放
Set Rng = Nothing
Set Wkb = Nothing


・・・以上です。

> 原因とその解決策を教えて頂きたいと思います。

遅すぎたかもしれませんが(汗)、自分の知っている範囲で・・・
(自分は専らAccess VBAばかり扱っているので)

【原因】
PasteSpecialを実行する前に、その参照元となるブックが
閉じられたことにより、その前に行った「Select」による選択が
無効化してしまっています。
(エラーにならないことがあるのは・・・別のブックが「Active
 Workbook」と判断されて閉じられていたりしないでしょうか(汗))

【解決策】
PasteSpecialを実行する前の「ActiveWindow.Close...続きを読む

Qエクセル マクロ実行時エラー’1004’

For~Next構文内でシートコピーしていると途中で、
実行時エラー'1004’
WorksheetクラスのCopyメソッドが失敗しました。
が表示されることがあります。

該当のFor~Next文は10回以上実行されているので、コードの誤りではないと思うのですが、なぜ「Copyメソッドが失敗」するのかわかりません。
理由/対処方法がわかればありがたいと思い質問させていただきます。

**該当コード**
Sub 評価シート作成()
  Sheets(社員一覧).Select
  行 = 1
  Do
    ReDim Preserve 社員CD(行)
    ReDim Preserve 氏名(行)
    社員CD(行) = Cells(行 + 1, 1).Value
    氏名(行) = Cells(行 + 1, 2).Value
    行 = 行 + 1
  Loop Until Cells(行, 1) = ""
  人数 = 行 - 2
  For 回数 = 1 To 人数
    Sheets(評価シート).Select
    Sheets(評価シート).Copy after:=Sheets(評価シート)
    ActiveSheet.Name = 氏名(回数)
    Cells(4, 5) = 氏名(回数)
    Cells(4, 3) = 社員CD(回数)
  Next 回数
End Sub
*****************************
よろしくお願いします

For~Next構文内でシートコピーしていると途中で、
実行時エラー'1004’
WorksheetクラスのCopyメソッドが失敗しました。
が表示されることがあります。

該当のFor~Next文は10回以上実行されているので、コードの誤りではないと思うのですが、なぜ「Copyメソッドが失敗」するのかわかりません。
理由/対処方法がわかればありがたいと思い質問させていただきます。

**該当コード**
Sub 評価シート作成()
  Sheets(社員一覧).Select
  行 = 1
  Do
    ReDim Preserve 社員CD(行)
   ...続きを読む

Aベストアンサー

ひょっとしてこれに該当するのかな?

Excel でプログラムを使用してワークシートをコピーするとランタイム エラー 1004 が発生する
http://support.microsoft.com/kb/210684/ja

QエクセルVBAでクリップボード内容をクリア

こんにちは。
エクセルのVBAの処理の中で、ある部分をコピーしてそれを、
貼り付けする処理をしています。
処理終了後、ファイルを閉じるときに、クリップボードに
コピーの内容が残っている旨のメッセージがでてきます。
このメッセージを出さない様に、クリップボードの内容を
クリアするにはどのようにすればよろしいでしょうか?
申し訳ありませんが、お教え頂きますようお願いいたします。

Aベストアンサー

Excel.Application.CutCopyMode = False
Workbooks(fName).Close savechanges:=False

かな。1行目だけでいいかも。

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub

QEXCEL VBAで全選択範囲の解除

EXCEL VBAで
Cells.Select
と書くと、全セルが選択状態になりますが、
これを解除するには、どう書けばよいのでしょうか?

Aベストアンサー

その1
A1 など、適当なセルを選択する。
(回答#1と同じ)

その2
全選択する前の選択範囲に戻る。

全選択前に
変数 = Selection.Address で記憶

全選択後
Range(変数).Select で元の選択範囲を選択


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング