[[20041012213728]] 『VBA シート重複』(さんきち) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBA シート重複』(さんきち)

いつもお世話になっております。「手回し」と言うシートのコピーを行い、シート名をHTDとしたい時に、すでに「手回し(2)」のシートが存在したときに、Errorでメッセージを出して、シート自体を削除させていましたが、4〜6回程度使用した時点で、ありもしない「HTDシートがある」メッセージが出て、VBAが止まってしまうようになってしまいましたがなぜでしょうか?・・・・最初は、うまく動作していたのですが、突然出るようになってしまったのです。なにか、おかしな事をやっているのでしょうか?
エクセル2000/Win2000のIE5.5の環境です。

If Sheets("工具管理表").Cells(3, 9) > 0 Then ''''''手回し

 Sheets("手回し").Activate
 Sheets("手回し").Copy Before:=Sheets(1)
 On Error GoTo REE3                             ''''ダブリシート名エラーループ
 Sheets("手回し 2)").Name = "HTD"

その後の処理・・・・抜粋

REE3:

 Application.DisplayAlerts = False ''''''エラーメッセージ非表示
  MsgBox "Hシートがすでにある。処理中止"
  Sheets("手回し (2)").Delete
  Application.DisplayAlerts = True
  Exit Sub 
 
どなたか、よきアドバイスをお願いします。


 シートの存在を調べてあったら削除したらどうですか?
v(=∩_∩=)v
(SoulMan)
Sub てすと()
Dim Wsh As Worksheet
Dim MyFlag As Boolean
Const MyName = "HTD"
MyFlag = False
    For Each Wsh In Worksheets
        If Wsh.Name = "HTD" Then
            MyFlag = True: Exit For
        End If
    Next
    If MyFlag = True Then
        With Application
            .DisplayAlerts = False
                Worksheets(MyName).Delete
            .DisplayAlerts = True
        End With
    Else
        With Worksheets
            .Add After:=Worksheets(.Count)
            ActiveSheet.Name = MyName
        End With
    End If
End Sub


(SoulMan)さん、早速のアドバイスありがとうございます。非常に高いレベルの構文で、私ごときが、書き込めるレベルではありませんが、勉強になります。今しばらくお付き合いお願いいたします。
削除する部分については問題ありません、基本的に、このものを使う人たちは、PCに不慣れでエラーやメッセージに対する、処置が不慣れで、時に作業中でも保存して終了してしまう人もいるために、Sheetをコピーした時点で終了する時があります。次に作業するときに、必ずエラーメッセージが発生する事を防止したく、このようなVBAが必要となります。ですから強制的に削除する部分には問題がありません。私なりに(勉強不足ですが)解釈し、MsgBoxを出す部分を削除した物を、下記に記載しますがOKでしょうか? 

Sub てすと() 
 

Dim Wsh As Worksheet 

Dim MyFlag As Boolean '''''Boolean→使ったことがありません勉強します。 

Const MyName = "HTD"   ''''' ユーザー定義定数でHTDのシート名を定義している?
MyFlag = False       ''''''??????

    For Each Wsh In Worksheets  ''''''シート名を検索し
        If Wsh.Name = "HTD" Then   '''''''HTDがあった場合、Next以降に
            MyFlag = True: Exit For   ''''''HTDが無かった場合は、次のシートへ検索

        End If
    Next
    If MyFlag = True Then
        MsgBox "HTDはあります。"  ''''''If Wsh.Name = "HTD" Then 有る場合
    Else
        MsgBox "HTDはありません。" ''''''無い場合
    End If 

End Sub

MsgBoxを出さないで処理するには。

MsgBox "HTDはあります。"  のところに不要SheetをDeleteして

MsgBox "HTDはありません。" のところに、通常の処理を、入れればいいのでしょうか?

解釈はこんな感じで、大体あってますでしょうか?


 おはようございます。
 >非常に高いレベル
高くないっす( ̄□ ̄;)!!
 >解釈はこんな感じで、大体あってますでしょうか?
うぅ〜〜〜ん。。どうだろう???
わからないところがあったらね。そこを選択してF1を押すの。
そうするとエクセル君が色々と教えてくれるわ。
でも、時々間違ってるそうだけど、、(^^;)
なんか今回のコードは、この手のコードの定番というかぁ、、、
おきまりの文句ばっかりね。。
さんきちさんが、これからいくつもコードを書いていくとしたら、きっと何度となく使う
構文ばっかりじゃないでしょうか??多分???
というわけで、私の下手な説明をつけようとしましたが、、
エクセル君に聞いてちょ。みたいな感じで、お願いします。
ではでは、、
あっ!上のコードをちょっと直しておきました。
v(=∩_∩=)v
(SoulMan)


(SoulMan)さん、ありがとうございました。手直しまでして頂いて、早速印刷し、後日勉強しながら、組み込んで見ます。本当にありがとうございました。
v(=∩_∩=)v

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.