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

このQ&Aに関連する最新のQ&A

A 回答 (4件)

> LS1.Name = "ログ"


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

Sheets(Worksheets.Count)="ログ"

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


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

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

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

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

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

> 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

このQ&Aに関連する人気のQ&A

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

このQ&Aと関連する良く見られている質問

QExcelの列'A' 'B' 'C'...や、行'1' '2' '3'...の文字の大きさや種類

Excel2002を使っていますが、Excelの上にある列'A' 'B' 'C'...や、左にある行'1' '2' '3'...の文字の大きさや種類は変えることはできるのでしょうか?もし、変えれるのでしたらどうやって変えるのですか?

Aベストアンサー

「書式」「スタイル」「標準」の状態で「変更」を押して「フォント」の内容を変更してください。
列と行の文字フォントとサイズが変更されます。

Qエクセルのウインドウを閉じる時にファイルによっては「'ファイル名'の変更を保存しますか」ってダイアログが出てしまいます

エクセル(97)のウインドウを閉じる時に、ファイルによっては(どこもデータの変更をしてないのに)「'ファイル名'の変更を保存しますか」ってダイアログが出てしまいますけど、これはなぜなのでしょう?

Aベストアンサー

こんにちは。maruru01です。

どこかに、TODAYなどの再計算関数があると、何もしていないのに、変更されたと判断されます。
これらの関数は、シート上だけでなく、名前定義や入力規則などで使用されている可能性もあります。

Qexcelの’-’が’月 日’になってしまいます。

excelをしようしているときに’-(ハイフン)’が日付として出てきてしまって困っています。1-19→1月19日となってしまうので、解決の仕方がわかる人お願いします。

Aベストアンサー

[書式]-[セル]-[表示形式]を「文字列」に変更してから入力する、
または、'(シングルクォーテーション)を先頭に入力する。

QWorksheetの範囲指定した部分のみCSVで作成するマクロを教えてください。

エクセルシートにdatabase1とdatabase2があり、
resultシートに関数をいれて2つのdatabaseの結果をかえてしています。
A2からN73までを範囲してしてCSVを作成したいのですが
どのようにしたらよいでしょうか。
できれば実行ボタンを押すと名前を付けて保存が出るようにしたいです。
当方マクロ初心者のためご教授の程よろしくお願いいたします。

Aベストアンサー

>file filterを変更すればいいのでしょうか?
はい。それで大丈夫です(すいません。細かいところの考慮が漏れていましたね)。
プログラムコードの4~5行目ですが、次のように InitialFileName:="*.csv" を入れた方が、さらに良いかもしれません。お試しください。

fileSaveName = Application.GetSaveAsFilename( _
InitialFileName:="*.csv", _
fileFilter:="CSV Files (*.csv), *.csv")

QExcellでシート1にシート2の部分を埋め込むには

例えばシート1行の高さを9ピクセルくらいにしてあるとします。
このシートに表を入れる場合、フォント11で入力すると文字が収まりきれず欠けた表示になってしまいます。
それを回避するには行を結合して表示できる行高さにするなどが考えられますが、以前テキストBoxの様な範囲内にシート2に作った表を表示させてシート1のセルのサイズに関係なく埋め込んだ様なファイルを見たことがあります。
もちろんシート2の内容を変更すればシート1へ反映されます。
このようにセルの1:1の関係の参照ではないやり方を使いたいのですが、分かる方いらっしゃいますでしょうか?

よろしくお願いします。

Aベストアンサー

1.シート2の表示したい範囲を指定して、コピーします。
2.シート1に移り、シート1の貼り付けたい場所をクリックし、シフトキーを押しながら「編集」をクリック。
3.すると「図のリンク貼付」というメニューが現れるので、それをクリックして貼り付けます。


人気Q&Aランキング

おすすめ情報