- ベストアンサー
エクセルマクロ実行時エラー'1004'とは?
- エクセルマクロ実行時に表示されるエラー'1004'は、For~Next構文内でシートのコピーが失敗したことを示しています。
- このエラーが発生する原因は、コードの誤りではなく、コピー先のシートの名前が既に存在する場合や、コピー元やコピー先のシートが保護されている場合などが考えられます。
- エラー'1004'が表示される場合は、まずコード内のシートコピー箇所を確認し、コピー先のシート名や保護状態などを適切に設定する必要があります。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
ひょっとしてこれに該当するのかな? Excel でプログラムを使用してワークシートをコピーするとランタイム エラー 1004 が発生する http://support.microsoft.com/kb/210684/ja
その他の回答 (3)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 コードとしては、失礼ですが、動的配列を使いながら、2バイト文字変数では、ものすごくバランスが悪いです。申し訳ないのですが、私には、修正とかいうレベルではないです。2バイト文字の変数のオンパレードはミスの元です。動的配列を使いたい気持ちは分からないわけではないけれども、そのためには、もう少し、初歩的な技術の蓄積が必要ではないでしょうか。 もともと、そのコードでは動くわけないのでしょうから、掲示板に載せるために、相当に省いているのか加工しているのだと思います。 Sheets("評価シート").Copy after:=Sheets("評価シート") "" のクォーテーションは、どうなっているのでしょうか? ActiveSheet.Name = 氏名(回数) これも、実にエラーが発生しやすいです。 それから、 For i = Rng.Rows.Count To 1 Step -1 左から順に入れていくなら、このように逆にしたほうがよいのではないでしょうか。これは一例です。 Sub EvaluationSheetMaking() Dim Sh1 As Worksheet Dim Sh2 As Worksheet Dim Rng As Range Dim i As Long Set Sh1 = Worksheets("社員一覧") Set Sh2 = Worksheets("評価シート") With Sh1 Set Rng = .Range("A2", .Range("A65536").End(xlUp).Offset(, 1)) End With For i = Rng.Rows.Count To 1 Step -1 On Error Resume Next Sh2.Copy After:=Sh2 With ActiveSheet .Name = Rng.Cells(i, 2).Value .Cells(4, 5) = Rng.Cells(i, 2).Value .Cells(4, 3) = Rng.Cells(i, 1).Value End With On Error GoTo 0 Next i Set Rng = Nothing End Sub
- pentium100
- ベストアンサー率45% (689/1517)
http://oshiete1.goo.ne.jp/qa1822561.html この辺が参考になるのかなー
- pentium100
- ベストアンサー率45% (689/1517)
> ActiveSheet.Name = 氏名(回数) のところが怪しい気がするんですが 実際はどの行でストップしてますか? コードの該当行が反転しているはずですが シート名に設定しようとしたデータ:氏名(回数)が空っぽとかではない?
補足
Sheets(評価シート).Copy after:=Sheets(評価シート で停止します。 何度か実行していますが同じ行数のところで失敗になります。 そうなるとワークシートから手作業でシートコピーしようとしてもできません。 一旦エクセルを終了→エクセルのみ再起動し、(シート名が重ならないよう)データを入替えて実行すれば、その前より少ない行数で失敗します。 なぜなのか見当もつきません。
お礼
テンプレートでの方法で無事対応できました。
補足
URL参考になります。 テンプレートでの方法を試してみようと思います。