• 締切済み

Excel97・VBA『シートの操作』ついての質問

環境は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週間悩んでいます。。。 助けて下さい。よろしくお願いします。。。

みんなの回答

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.4

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

noname#6248
質問者

補足

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

回答No.3

シートが無い時の処理ですが エラーコードは分かりませんが エラー処理をしてはどうですか。 「エラーが発生したら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で必ず戻してください。 これでも少しちらつくカンジはしますが これしかないですね。

  • mitsu-s
  • ベストアンサー率25% (7/27)
回答No.2

実行時にブックの何番目かにログシートが有る場合の削除 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

noname#6248
質問者

お礼

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

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

> LS1.Name = "ログ" 最後のシートを指すのだからSheets(Worksheets.Count)で良かったカナ? Sheets(Worksheets.Count)="ログ" 試験してませんので間違ってたらごめんなさい。 > 画面がちらついてかっこ悪いんです。ですので画面をちらつかせない方法は知りませんか? 実行前にScreenUpdating=Falseを設定してください。 一連の処理後にはScreenUpdating=Trueで復旧させてください。 ちらつきは無くなるし、再描画を行わない分処理速度が向上できます。

noname#6248
質問者

お礼

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

関連するQ&A

専門家に質問してみよう