[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『コンボボックスで選択したシートをコピー』(まだ悩んでる36歳)
2回目の質問です。 前回は『アクティブセルと同行の値を取得』でお世話になりました。
現在、白紙の帳票に既存の別ブックのデータを入力するマクロを作成しています。 (前回はこれの”採番”の為のマクロでした) 通常のデータは、ユーザーフォームに読み込んでます。 この、データを呼び込むユーザーフォーム上にコンボボックスを配置し、呼び出して あるブックのシートを選択して、選択したシートを白紙の帳票があるブックに挿入し たいのです。 コマンドボックスにはシート名が読み込まれ、クリックすると選択したシートがアク ティブになっています。 現在のコードは以下の通りです。
Private Sub CommandButton1_Click() ActiveWorkbook.Sheets(ComboBox1.Value).Copy after:=Workbooks("業務依頼書.xls").Sheets(2) End Sub
コマンドボタンをクリックすると ”インデックスが有効範囲にありません”
Sheets(ComboBox1.Value)をactivesheetにしても同じです。
勉強不足で申し訳ございませんが、教えていただけると幸いです。
コピー元が正しいのならば疑うのはコピー先ではないでしょうか? 業務依頼書.xlsは開いてますか? Sheets(2)は存在しますか? (やっちん)
タスクバーが出ているので、開いているとは思います。 Sheets(2)については、5枚のシートからなるブックなので、問題ないかと思って いるのですが。 因みに、Sheet(2)の代わりに2枚目のシート名である、Worksheets("新依頼書") で指定しても同様なエラーが生じます。 ActiveWorkbook.Sheets(ComboBox1.Value).Copy after:=Workbooks("業務依頼書.xls").WorkSheets("新依頼書")
また、コンボボックスで選択した時にselectで、コピー対象のシートをアクティブ にしてある為、Activesheets.copyで指定してもだめでした。
エクセルのバージョンとOSを書き忘れていました。 Excel2003 Windows XP
(まだ悩んでる36歳)
これ動かして確認していただけますか?
Private Sub CommandButton1_Click() With Me.ComboBox1 If .ListIndex = -1 Then Exit Sub Sheets(.Value).Select End With End Sub (seiya)
seiya様
駄目でした。 頂いたコードが良く判らないので、そのままコピーしてみましたが、何も起こらない 状態でした。(コマンドボタンを押しただけ) 因みに、既存のコードの下に付け足すと、今までのエラーと同じでした。 (まだ悩んでる36歳)
これは、ComboBox1 の値が付いたシートが存在しない場合 エラーになりますのでその確認でした。
恐らくComboBox1にある値がシート名と一致していないものと思います。 ComboBox1のListFillRange, RowSource に値が入力されていたら削除してください。
下記コードをUserForm Moduleに貼り付けると、フォームが表示された時点で ComboBox1にリストを作成します。
CommandButton1 のコードを元に戻して、実行してください。
Private Sub UserForm_Initialize() Dim ws As Worksheet With Me.ComboBox1 For Each ws In Sheets .AddItem ws.Name Next End With End Sub (seiya)
seiya様 現在以下のコードでコンボボックスに呼び込んでいます。 Private Sub UserForm_Initialize() Dim mySht As Worksheet For Each mySht In Worksheets ComboBox1.AddItem mySht.Name Next End Sub
ご教示いただいたコードを実行すると、何故か1行目に 00000 と表示されましたので、 せっかく教えていただいたのですが、現在元に戻しています。
因みにコピーを試すと、やはり同じエラーになります。
シート名は数字のみですか?
ComboBox1.Value を ComboBox1.Text にしてはどうでしょうか? (やっちん)
皆様。
先の書き込みに名前を付けるの忘れてました。(まだ悩んでる36歳)です。
やっちん様 textでも駄目でした。
今思いついたのですが、シート名を指定する場合 Worksheet("領収書") の様に、 ()の中に名前を入れる場合は、"" で挟みますよね?ひょっとして "" が無いの が原因でしょうか? "" を加える事はできますか?
(まだ悩んでる36歳)
変数を使う場合はそれは必要ないのです。 ""で挟むのはプログラム中の""で挟んだ部分を文字列だと認識させるためのものです。
そうするとActiveWorkbookが怪しく思えてきますね。 エラーのときの ActiveWorkbook.Name を調べてみてください。 ComboBox1.Value のシートがあるブックですか? (やっちん)
やっちん様 >エラーのときの ActiveWorkbook.Name を調べてみてください。 どの様に調べればよいのでしょうか? 因みに、開いているブックはコピー元と、コピー先の2つのみで、コンボボックス にはコピー元のシート名(元と先ではシート名が違います。)が出てきますので、 多分大丈夫だと思っているのですが・・・ (まだ悩んでいる36歳)
多分では困るのです。 一つ一つ可能性をつぶして行かないと何が原因なのかはわかりません。
>どの様に調べればよいのでしょうか? 一番簡単なのはストップする行の前に Msgbox ActiveWorkbook.Name と入れて実行してみてください。ブック名が表示されます。 予想通りのブック名が表示されましたか? (やっちん)
ご教授ありがとうございます。
やはり、ちゃんとコピー元の名前が出てきました・・・
むぅ・・・
(まだ悩んでる36歳)
追加でComboBox1.Valueも何が入っているのか確認してください。 同様に Msgbox ComboBox1.Value (やっちん)
やっちん様 コマンドボックスで選択したシート名が表示されました。 後はコピー先でしょうか・・・ (まだ悩んでる36歳)
ちょっと実検していたら同じエラーが出ました。 もしや「業務依頼書.xls」は新規ブックで保存されていない? (やっちん)
実検した結果で言うとブック名の指定のときに 保存していないブックには「.xls」はいりません。 保存しているブックには「.xls」が必要です。 (やっちん)
「業務依頼書.xls」は、新規ブックではありません。
立ち上げから順に追っていくと、「業務依頼書.xls」を開く。 ユーザーフォーム(今問題になっているフォームとは別)が開き、 データを呼び出す元になるブックを選択します。 ブックが開くとデータの元となるシートを選択します。 この次に件のフォームが出てきます。 このフォームは複数のテキストボックスとスピンボタン、コマンドボックス及び スプレッドシートコントロールに問題のコンボボックスが一つ配置されており ます。 現在ここに至るまで、何回も上書き保存しています。 故に新規ブックでは無い筈です。 因みに私も先程「.xls」無しを試しましたが駄目でした・・・
また、別のフォームにコンボボックスとコマンドボタンを配置して試しましたが 駄目でした。
(まだ悩んでる36歳)
コピーがダメだというエラーメッセージではないので一つ一つ試してみては? ActiveWorkbook.Sheets(ComboBox1.Value).Activate Workbooks("業務依頼書.xls").Activate Workbooks("業務依頼書.xls").Sheets(2).Activate どれで止まりますか? (やっちん)
やっちん様
Workbooks("業務依頼書.xls").Activate で止まりました。
と言うことはこのコードに原因が? (まだ悩んでる36歳)
やっちん様
誠に言いにくいのですが、解決いたしました。 一昨日このコード作成する前、ブックを保存する際に、会社の同僚が誤ってブック名を 改変していました・・・・・ 本当に申し訳ございません。そしてありがとうございました。 (お陰様で悩みが解消した36歳)
まさかなところを疑うのも大事ですね(^^ 今回のようにエラーになっている行をばらばらにして確認していくと 原因を切り分けやすいですよ。 (やっちん)
ありがとうございました。m(_ _)m
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.