プロが教えるわが家の防犯対策術!

環境はExcel97+Win2000を使用しています。
基本的に【データ】と【ログ】というシートがあって
動作は
データ入力後ボタン押下で結果をログに出力するという内容なのですが、
【ログ】シート作成部分の動作が思うようにいかないので2つ質問させてください。

''以下ログシート作成部分のVBAソース
' 既存のログシートを削除する
'☆↓
Set DS1 = Worksheets("ログ")
Application.DisplayAlerts = False
DS1.Delete
Application.DisplayAlerts = True
'☆↑
'ログシートを作成する
Set LS1 = Worksheets.Add(after:=Worksheets("データ"))
Sheets("データ").Select'★
LS1.Name = "ログ"


質問1
 このソースでは、あらかじめ空の【ログ】シートがないと「☆部分」でエラーになってしまうのですが、
『【ログ】シートが無い時は「☆部分」をパスする』とような関数ってありませんか?

質問2
 【ログ】シートを作成しても【データ】シートを表示のままでいて欲しいのですが『Set LS1 =・・・』の部分を実行すると【ログ】シートを表示してしまいます。
今は『★行』を書いて対応しているのですが
画面がちらついてかっこ悪いんです。ですので画面をちらつかせない方法は知りませんか?

この2つでもう2週間悩んでいます。。。
助けて下さい。よろしくお願いします。。。

A 回答 (4件)

> ScreenUpdatingではなくApplication.ScreenUpdatingで解決しました。


ごめんなさい。

> けど、【ログ】シートを消して書いた後は、どうしても【ログ】シートを表示してしまうんですね…
> 完了後に=Trueで復旧させたとたん待ってましたとばかりに…
マクロをキックするときに選択されているシート名を保存しておいて、
Application.ScreenUpdating=Trueの直前の行で
Worksheets(元のシート名).Selectを書くといかがですか?

この回答への補足

>Worksheets(元のシート名).Selectを書くといかがですか?
Sheets("データ").Select
ですよね…
画面が一瞬ちらつくんですよ。
ですのでこのちらつきをどうにか出来ないかという事です…

補足日時:2002/02/25 14:18
    • good
    • 0

シートが無い時の処理ですが


エラーコードは分かりませんが
エラー処理をしてはどうですか。

「エラーが発生したらAへ」
としてエラー監視を開始。

エラー時は、
エラー(シート削除エラー)なら
処理をして
a.次の行から先に進む
b.もう一度やり直す
c.指定行からすすむ(たしか)
のうちひとつを選ぶということができます。

エラー監視スタート
On Error GoTo エラー処理名

エラー監視解除
On Error GoTo 0

エラー判断
Select Case Err.Number
Case 53 '53 not fonund

エラーからの戻り方
Resume Next



ちらつきは#1の方に賛成です。
画面更新ストップ
ScreenUpdating=False
復旧
ScreenUpdating=True

trueで必ず戻してください。
これでも少しちらつくカンジはしますが
これしかないですね。
    • good
    • 0

実行時にブックの何番目かにログシートが有る場合の削除



Dim i As Integer
For i = 1 To Worksheets.Count
If Worksheets(i).Name = "ログ" Then
Worksheets(i).Delete
Exit For
End If
Next

または、ログシートがある場合必ず最後にあるという場合は
If Worksheets(Worksheets.Count).Name = "ログ" Then
Worksheets("ログ").Delete
End If

ログシートの作成
Worksheets.Add after:=Worksheets(Worksheets.Count)
Worksheets(Worksheets.Count).Name = "ログ"


データシートをアクティブ化
Worksheets("データ").Activate

データシート → ログシート → データシートと
アクティブになるのがカッコ悪いのであれば処理の最初に
ブックを閉じて最後にブックを開くという手は?

ブックの最小化
ActiveWindow.WindowState = xlMinimized
ブックの最大化
ActiveWindow.WindowState = xlMaximized
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
シートが複数なので
For i = 1 To Worksheets.Count…を使用しようと思います。
ありがとうございました。

お礼日時:2002/02/21 10:21

> LS1.Name = "ログ"


最後のシートを指すのだからSheets(Worksheets.Count)で良かったカナ?

Sheets(Worksheets.Count)="ログ"

試験してませんので間違ってたらごめんなさい。


> 画面がちらついてかっこ悪いんです。ですので画面をちらつかせない方法は知りませんか?

実行前にScreenUpdating=Falseを設定してください。

一連の処理後にはScreenUpdating=Trueで復旧させてください。
ちらつきは無くなるし、再描画を行わない分処理速度が向上できます。
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。
ScreenUpdatingではなくApplication.ScreenUpdatingで解決しました。
けど、【ログ】シートを消して書いた後は、どうしても【ログ】シートを表示してしまうんですね…
完了後に=Trueで復旧させたとたん待ってましたとばかりに…
もう少し考えてみます…

お礼日時:2002/02/21 10:19

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