[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『コピーする雛形を非表示で操作』(ゆき)
いつもお世話になっています。
出荷データブックを作成して、未出荷リストや未売上リスト、出荷予定リストなどいろいろな シートを作成しています。
元のデータシートから各種シートを作成するのに「未出荷_雛形」「未売上_雛形」というような 雛形シートを用意してそれをコピーして同じブックの後ろに追加するようにしています。
(ほとんどがユーザーフォームから条件指定して条件に一致したデータを抽出して作成しています)
それで、やることが増えるにつれ「雛形」シートが増え、一画面に表示されるシートのタブが 「雛形」でいっぱいになり、シートの選択をするのに逐一スクロールしたり右クリックでシート一覧から選択したり、 ちょっと見づらくなってきました、
「雛形」シートを非表示にしてそれをコピーできればいいのですが、普通に非表示にしただけでは 雛形がコピーできません。
非表示にした雛形をコピーするにはどうしたらいいでしょうか。
現在のコピー部分のコードは下記のような感じです
Option Explicit Public lsh As Worksheet Public myRow As Long
Dim cnt As Long Dim shName As String Dim bName As String Dim ws1 As Worksheet Dim ws2 As Worksheet Dim lRow As Long Dim z As Long Dim i As Long Dim j As Long Dim DataCnt As Long
Set ws1 = ThisWorkbook.Worksheets("物件データ")
z = ws1.Range("B" & ws1.Rows.Count).End(xlUp).Row
DataCnt = 0 cnt = 1 bName = "未売上リスト_全件" ThisWorkbook.Sheets("未計上_雛形").Copy After:=Sheets(Sheets.Count)
shName = bName
Do If Not IsObject(Evaluate("'" & shName & "'!A1")) Then Exit Do cnt = cnt + 1 shName = bName & "(" & cnt & ")" Loop
ActiveSheet.Name = shName Set lsh = ThisWorkbook.Sheets(Sheets.Count)
(以下略)
よろしくお願いします。
非表示シートをコピーしたり、指定した場合の挙動は通常と異なるようなので、 コピー時だけ表示にしてはどうでしょうか。
必要な部分だけに絞りましたけれど、サンプルです。 (Mook)
Option Explicit Sub Sample() Dim cnt As Long Dim shName As String Dim bName As String Dim ws1 As Worksheet Dim ws2 As Worksheet
cnt = 1 bName = "未売上リスト_全件"
Application.ScreenUpdating = False With ThisWorkbook.Worksheets("未計上_雛形") .Visible = xlSheetVisible .Copy After:=Worksheets(Worksheets.Count) Set ws2 = ActiveSheet .Visible = xlSheetHidden End With Application.ScreenUpdating = True
shName = bName Do While IsObject(Evaluate("'" & shName & "'!A1")) = True cnt = cnt + 1 shName = bName & "(" & cnt & ")" Loop
ws2.Name = shName End Sub
雛形のシートをコピーするのではなくて、 シートテンプレートを外部においておき、適時にテンプレートを挿入する 運用にしてはいかがでしょう? (みやほりん)
Mook様ありがとうございます。
やはりコピーする際は表示させる必要があったのですね。 でも、これなら普段は非表示でOKなので大丈夫そうです。
みやほりん様、アイデアをありがとうございます。
やってみて、例えば「雛形ブック.xlsm」というテンプレート用のブックを用意して
Workbooks("雛形ブック.xlsm").Worksheets("未計上_雛形").Copy After:=Sheets(Sheets.Count)
このようにした場合、ちゃんと「雛形ブック」が開かれているときはシートをコピーできたのですが、 もし開いていなかった場合に「インデックスが有効範囲にありません」のエラーになります。
例えば、「雛形ブック」を開いていなかった場合「雛形ブックが開かれていません」というメッセージを出すか、 ブックを開くダイアログを表示させるとかしたいのですが、 「対象のブックが開かれているかどうか」 の判定はどのようにしたらよいのでしょうか?
初歩的な質問ですみません
(ゆき)
「シートテンプレート」は雛形のブックを用意しておくのとは また違った使い方です。 「名前をつけて保存」はご存知だと思いますが、 ファイル形式の中に「テンプレート」という類のものがあります。 私の言っているものはこれです。 「新規シート」をブックに作成することはたびたびありますよね。 「新規シート」の代わりに、「ユーザーが作成したシート」を 挿入することが出来ます。下記を参考にしてください。 [Office.com:ブックまたはワークシートをテンプレートとして保存する]http://office.microsoft.com/ja-jp/excel-help/HA010218874.aspx現在参照不可 操作をマクロ記録することである程度のコードは作成できます。 (みやほりん)
一応の補足ですけれど上記のテンプレートファイル(拡張子xlt, 2007以降 xltx)を 使う場合はファイルを開くのではなく、下記のようにTypeでファイルパスを指定します。 Sheets.Add After:=Worksheets(Sheets.Count), Type:="D:\MyTemplate\未計上.xltx"
この方がすっきりですね。 (Mook)
みやほりん様、Mook様、再度のご回答ありがとうございます。
テンプレートは使ったことがなかったので試しにやってみました。
しかし、まずデフォルトで保存された場所にエクスプローラからなかなか行き着くことができず(「最近使ったファイル」の履歴から ファイルのフルパスを辿って行けましたが、エクスプローラでは表示されない…) 更にそこでは不便なので自分で操作しやすいフォルダに置いたら「テンプレートの挿入」に保存したテンプレートが 表示されなくなりました。
また、雛形の数が多いのでまとめて一つのテンプレートブックとして保存(とりあえずデフォルトの場所)して 「テンプレートの挿入」をしたところ、全てのシートがまとめて挿入されてしまいました。 (テンプレートブックの中から更にシートを選択して挿入できるものかと…)
なかなか使いこなすのが難しいです…
(ゆき)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.