-PR-
締切済み

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

  • すぐに回答を!
  • 質問No.221615
  • 閲覧数246
  • ありがとう数2
  • 気になる数0
  • 回答数4
  • コメント数0

環境は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週間悩んでいます。。。
助けて下さい。よろしくお願いします。。。
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

回答 (全4件)

  • 回答No.1
レベル14

ベストアンサー率 33% (1403/4213)

> LS1.Name = "ログ"
最後のシートを指すのだからSheets(Worksheets.Count)で良かったカナ?

Sheets(Worksheets.Count)="ログ"

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


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

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

一連の処理後にはScreenUpdating=Trueで復旧させてください。
ちらつきは無くなるし、再描画を行わない分処理速度が向上できます。
お礼コメント
noname#6248

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


  • 回答No.2
レベル7

ベストアンサー率 25% (7/27)

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

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…を使用しようと思います。
ありがとうございました。
投稿日時 - 2002-02-21 10:21:37
  • 回答No.3
レベル9

ベストアンサー率 69% (51/73)

シートが無い時の処理ですが
エラーコードは分かりませんが
エラー処理をしてはどうですか。

「エラーが発生したら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で必ず戻してください。
これでも少しちらつくカンジはしますが
これしかないですね。
  • 回答No.4
レベル14

ベストアンサー率 33% (1403/4213)

> ScreenUpdatingではなくApplication.ScreenUpdatingで解決しました。
ごめんなさい。

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

>Worksheets(元のシート名).Selectを書くといかがですか?
Sheets("データ").Select
ですよね…
画面が一瞬ちらつくんですよ。
ですのでこのちらつきをどうにか出来ないかという事です…
投稿日時 - 2002-02-25 14:18:29
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-

特集


専門家があなたの悩みに回答!

ピックアップ

ページ先頭へ