[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『シートの自動作成で・・・』(みほ)
エクセル2003を使っています。
また、わからない事がでてきましたので教えてください。
シート作成ボタンをシートに作り ユーザーフォームで翌月のシートを作成しています。
シート作成し シート名を翌月にするのまではできたのですが
前月のデータが残ったままになってしまいます。
シートの「平成24年○月」と表示されるF2部分は変更されています。
前月のデータをクリアにして翌月のシートを作るのには
どのようにすればいいのでしょうか?
以下、コードです。
標準モジュールに
Sub hannbai_Click()
ActiveSheet.Copy After:=ActiveSheet
UserForm4.Show
End Sub
ユーザーフォームに
Private Sub CommandButton1_Click()
ActiveSheet.Range("F2") = TextBox1.Value
ActiveSheet.Name = Format(Date, "ggge年m月")
Unload UserForm4
End Sub
Private Sub CommandButton2_Click()
ActiveSheet.Delete
Unload UserForm4
End Sub
Private Sub UserForm_Initialize()
TextBox1.Value = Format(Date, "ggge年m月")
End Sub
よろしくお願いします。
前月のデータをクリアにしたい、そのクリアにする場所はどことどこ? それとも、F2 以外をすべてクリアにしていいの?
それと、CommandButton2 だけど、これは、作ったけど、や〜めた 消しちゃおう というボタンだね。
あと、もし、ある月のシートができたとする。で、また処理をすると、同じシート名が作られようとして エラーになるね。作成すべきシート名有無を事前にチェックしたほうがいいかな?
(ぶらっと)
これが解れば何とかなりそうですね。 翌月 MsgBox Format(DateAdd("m", 1, Date), "ggge年m月")
先月 MsgBox Format(DateAdd("m", -1, Date), "ggge年m月") BJ
ぶらっとさん
クリアにしたい部分は A14:L23,B26:K47,I11:J12,L11:L12のセルになります。
いろいろ調べていて
下記のコードに変更したところ クリアしてシート作成が出来たのですが・・・
大丈夫でしょうか?
Sub hannbai_Click()
ActiveSheet.Copy After:=ActiveSheet
UserForm4.Show
クリア
ActiveSheet.Range("A1").Select
End Sub
Sub クリア()
ActiveSheet.Range("A14:L23,B26:K47,I11:J12,L11:L12").Select Selection.ClearContents
End Sub
ユーザーフォームは先ほどのままです。
それと、CommandButton2 だけど、これは、作ったけど、や〜めた 消しちゃおう というボタンだね。
そうです。
あと、もし、ある月のシートができたとする。で、また処理をすると、同じシート名が作られようとして エラーになるね。作成すべきシート名有無を事前にチェックしたほうがいいかな?
同じ月に再度シート作成を押してしまうと 平成24年○月(2)というようにシートが
作成されてしまいます。
これも作成できなくする方法ってあるのでしょうか?
お手数おかけします。
よろしくお願いします。
BJさん、すみません。
調べてみたのですが・・・ よくわかりませんでした。
> ActiveSheet.Range("A14:L23,B26:K47,I11:J12,L11:L12").Select > Selection.ClearContents
うん。これでもいいね。ActiveSheetなのでシート修飾はなくてもいいかな? でSelect/Selection はやめよう。
Range("A14:L23,B26:K47,I11:J12,L11:L12").ClearContents
この1行でいいね。
>同じ月に再度シート作成を押してしまうと 平成24年○月(2)というようにシートが >作成されてしまいます。 >これも作成できなくする方法ってあるのでしょうか?
その前に。 この処理は、標準モジュールがわのボタンを押したときに ActiveSheet.Copy After:=ActiveSheet
これで、とにかくシートを作ってしまうね。1回目であろうと2回目であろうと その時Activeだったシートのシート名(2) となるのはエクセルの仕様。 このタイミングでシートを作るのがだめとはいわないけど、ここでは UserForm4を表示させるだけにして Private Sub CommandButton1_Click() ここでシートを作成したらどうかな?そうしておくと、や〜めたというCommandButton2も不要になるよね。 シートはまだ作られていないんだから。
気になるのは
>シートの「平成24年○月」と表示されるF2部分は変更されています。
F2 は ActiveSheet.Range("F2") = TextBox1.Value
そうすると、シート名にすべき月は TextBox1 に入力するのでは? だけど、実際にシート名としてセットしようとしているのは
ActiveSheet.Name = Format(Date, "ggge年m月")
Date というのは、今日の日付。TextBox1の値は全く無視されているけど、それでいいの?
この回答をもらえれば、シート名重複の回避のコードをアップすることができる。
(ぶらっと)
ユーザーフォームのTextBox1には シートにあるシート作成ボタンを押して
ユーザーフォームを呼び出した時点で 今月だったら平成24年10月と入力されています。
Private Sub UserForm_Initialize()
TextBox1.Value = Format(Date, "ggge年m月")
End Sub
このコードそうなるのだと思ってました。
で、シート名変更で TextBox1の値をだして変更したかったのですが
うまくいかなかったので
ActiveSheet.Name = Format(Date, "ggge年m月") のコードを出したところ
シート名の変更もできたので それでいいのかな・・・と。
再度 コード書いておきます。
標準モジュール
Sub hannbai_Click()
ActiveSheet.Copy After:=ActiveSheet
UserForm4.Show
クリア
ActiveSheet.Range("A1").Select
End Sub
Sub クリア()
Range("A14:L23,B26:K47,I11:J12,L11:L12").ClearContents
End Sub
Private Sub CommandButton1_Click()
ActiveSheet.Range("F2") = TextBox1.Value
ActiveSheet.Name = Format(Date, "ggge年m月")
Unload UserForm4
End Sub
Private Sub CommandButton2_Click()
ActiveSheet.Delete
Unload UserForm4
End Sub
Private Sub UserForm_Initialize()
TextBox1.Value = Format(Date, "ggge年m月")
End Sub
お手数おかけします。
よろしくお願いします。
こんな構えではどうだろう。
標準モジュール
Sub hannbai_Click()
UserForm4.Show
End Sub
ユーザーフォームモジュール
Private Sub UserForm_Initialize()
TextBox1.Value = Format(DateAdd("m", 1, Date), "ggge年m月")
End Sub
Private Sub CommandButton1_Click() Dim shn As String
shn = TextBox1.Value If Len(shn) = 0 Then MsgBox "新規に作成するシート名を入力してください" Exit Sub End If
If IsObject(Evaluate("'" & shn & "'!A1")) Then MsgBox "シート:" & shn & "が既に存在します" Exit Sub End If
'現在のアクティブシートをその直後にコピー ActiveSheet.Copy After:=ActiveSheet
'以下は新規に作成されたシートに対する処理 ActiveSheet.Name = shn Range("F2") = TextBox1.Value Range("A14:L23,B26:K47,I11:J12,L11:L12").ClearContents
Unload Me
End Sub
Private Sub CommandButton2_Click() Unload Me End Sub
(ぶらっと)
シートがタブって作成される事もなくなりました。
とても勉強になります。
本当にありがとうございます。
みほさんの運用では既存(新規シート)のシートを新しい月の分として
コピーを作成しているようですが、この使い方だと常に一番使い込んだ
シートをコピーしていくため、ファイル容量の肥大化が気になります。
一度新規シートから作成したシートをSheetテンプレートとして作成して
おいて、それを挿入する方法をお勧めします。
【シートのテンプレート作成】
[[20060227142045]] 『シートの範囲の設定』(ひろ)
【シートテンプレートの挿入】
最後のMookさんのコメントにサンプルがあります。
[[20110127142226]] 『コピーして貼り付け時にセル範囲の名前も保持したい』
(みやほりん)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.