VBAを使い、レポートを作成しようと考えています。
レポートを作成するに当たり、
今まで作成しておいたフォームを利用し、
新しいシートを作成していきます。
※実行するにあたり、フォームで実行される
メッセージボックスが邪魔です…
例) 作成されたシート名
出荷数
累計
レベル
効果
ランク
そして、そのシートを
新しいブックにコピーしようと考えています。
コピーしたいブックは、
レベル・効果・ランク のみになります。
最初は、ブックをコピーして保存し、
シートを削除してく方向を考えましたが
ブックごとコピーしてしまったために、マクロまでコピーされてしまいました。
マクロは必要ありません。
シートの作成、コピーを色々考えていくうちに
良くわからなくなってしまったため、質問いたしました。
できれば、そのシートのみコピーしたいと思っています。
(新規作成したときのSheet1,Sheet2などは要らないです)
上のほうで書いた、メッセージボックスが邪魔という件ですが、
これは改善方法があれば回答いただけるとうれしいです。
(調べたところ、そういった情報はありませんでした)
回答よろしくお願いいたします!
No.7ベストアンサー
- 回答日時:
シートコピーはすっかりどっか行っちゃって、結局「どーでもいい」方に集中しちゃってますよね。
>全フォームに回避策(フラグを立てる)などする必要があります。
先の回答がまぁそのパターンなワケですが、他のフォームに手を入れたくないなら、これも回答の再掲になりますけど
NewForm:
Private Sub CommandButton1_Click()
UserForm1.ComboBox1.Value = Me.ComboBox1.Value
Call UserForm1.DATA_CHANGE'データ変更
Call UserForm1.Graph_Make'グラフ作成
Call UserForm1.Graph_Setting'グラフの目盛りなどの設定
UserForm2.ComboBox1.Value = Me.ComboBox1.Value
Call UserForm2.DATA_EDIT
Call UserForm2.Graph_MakeUser'グラフ作成
Call UserForm2.Graph_Setting'グラフの目盛りなどの設定
MsgBox Me.ComboBox1.Value & vbCrLf & "レポート出力が完了しました。"
End Sub
といった具合に、「迂回路」で処理するだけです。
回答ありがとうございます。
シートコピーはお蔭様で上手くいきました。
この質問も、もうそろそろ締め切りですかね。
そのUserForm2などの内容まで見て、全部記入していく方式ですね!
その方法も良いのですが、転記で失敗?してしまいそうなのと、
行数が結構あるため、迷っています…
頑張って、間違えないように転記したいと思います!
上記プログラムは見本用としてなので、
実際はもっと膨大なプログラムを書いています。
(プログラム組むの下手なので・・・)
では、回答ありがとうございました!
参考に頑張ります!
No.6
- 回答日時:
#2です。
MsgBoxの件の詳細拝見しました。
あまりスマートな方法ではないかもしれませんが、
もし自分が同じものを作成するとしたら、クリックイベント自体をを呼び出すのではなく
Msgboxを除いたクリックイベントの「内容」を転記しますかね。。。
Private Sub CommandButton1_Click() 'NewFormクリックイベント
UserForm1.ComboBox1.Value = Me.ComboBox1.Value
Call DATA_CHANGE'データ変更
Call Graph_Make'グラフ作成
Call Graph_Setting'グラフの目盛りなどの設定
UserForm2.ComboBox1.Value = Me.ComboBox1.Value
Call DATA_EDIT
Call Graph_MakeUser'グラフ作成
Call Graph_Setting'グラフの目盛りなどの設定
~・・・
但し、元のフォームの処理内容が変更された時はNewFormの内容も同時に修正しないといけなくなりますが。。。
回答ありがとうございます。
内容を転記というのは、そのままフォームに書き込むのでしょうか?
膨大な量なため、
転記するのが難しい状況にあります。
No.5
- 回答日時:
こーいうことですかね。
標準モジュール:
public flg as boolean
sub macro1()
userform1.show vbmodeless
newform.show vbmodeless
end sub
NewFormのシート:
private sub CommandButton1_Click()
module1.flg = true
userform1.commandbutton1_click
module1.flg = false
end sub
UserForm1のシート:
public sub CommandButton1_Click()
if not module1.flg then
msgbox "me origin"
else
’msgbox "from newform"
end if
end sub
#結局全部答えを聞かなきゃ納まらないんだから、最初っからそれぞれの質問に分けて投稿してほしいものです。
>UserForm1で出るようにしていたMsgboxや
:
>等必ず出てしまいます。
どういう段取りで(UserFormをイニシャライズした時?コマンドボタンをクリックしたとき??)msgboxを表示させているのか不明なので、「具体的にこのようなマクロにしましょう」とお話し出来るネタがありません。
>UserForm上のMsgboxを削除すればいいかと思うのですが、
>それでは、UserFormのみを実行したとき
>Msgboxが表示されなくなってしまうので、困っています。
基本的な概念としては、次の二通りが考えられます。
1.「必要」な時にのみmsgboxを表示する
2.「不要」な時は迂回路を実行する
あなたのマクロが何をしているのか不明、つまり、いつが必要でどういうときが不要なのか、さっぱりお答えできません。
この回答への補足
ユーザーフォーム:NewForm
Private Sub CommandButton1_Click()
UserForm1.ComboBox1.Value = Me.ComboBox1.Value
Call UserForm1.CommandButton1_Click 'チャート作成!
UserForm2.ComboBox1.Value = Me.ComboBox1.Value
Call UserForm2.CommandButton1_Click 'チャート作成!
MsgBox Me.ComboBox1.Value & vbCrLf & "レポート出力が完了しました。"
End Sub
'================================
ユーザーフォーム:UserForm1
Public Sub CommandButton1_Click()
Call DATA_CHANGE'データ変更
Call Graph_Make'グラフ作成
Call Graph_Setting'グラフの目盛りなどの設定
Msgbox "完了しました。"
End sub
'================================
ユーザーフォーム:UserForm2
Public Sub CommandButton1_Click()
Call DATA_EDIT
MsgBox "修正処理が完了しました。"
Call Graph_MakeUser'グラフ作成
Call Graph_Setting'グラフの目盛りなどの設定
Msgbox "完了しました。"
End sub
'================================
フォーム上にコンボボックスやコマンドボタンを配置し
実行するようにしています。
上記マクロを実行する際に、
UserForm1のMsgbox "完了しました"
UserFOrm2のMsgbox "修正処理が完了しました" と "完了しました"
の合計3回、メッセージボックスが表示されます。
これを回避するには全フォームに回避策(フラグを立てる)
などする必要があります。
しかし、UserFormは10以上あり、手作業でやるには
面倒に感じたため、質問させて頂きました。
語彙力不足・説明力不足で本当に申し訳ありません。
"あったらいいな~"という内容でしたので、
無ければ無いでかまわない事でした。
なので、合わせて質問させて頂きました。
No.4
- 回答日時:
補足を拝見しましたが、なおさら意味が分からなくなりした。
>ブックごとコピーしてしまったために、マクロまでコピーされてしまいました。
>マクロは必要ありません。
これだけを手掛かりにですが、Office2007以上であれば
保存するときに .Xlsx マクロなしのタイプを選択して保存すれば
マクロの部分は、全てなくなります。
No.3
- 回答日時:
ヤリタイ事:
目的のシートだけ複写した新しいブックを作りたい
sub macro1()
worksheets(array("レベル","効果","ランク").copy
end sub
以上です。
>フォームで実行されるメッセージボックス
イミフメイです。
そのメッセージボックスを「あなたのマクロが表示させてる」のなら、単にそうしないだけですからそんな事を聞いてるんじゃありませんよね。
参考:
マクロで実行するメッセージボックスとはこういう事を言います
sub macro2()
msgbox "メッセージです"
end sub
一体全体「どのタイミングで」「どんな内容の」メッセージボックスが現れるのか、必要なら具体的に目に見えるように状況を補足して「別途」ご相談として投稿してみて下さい。
この回答への補足
例えば、
UserForm1
UserForm2
UserForm3
NewForm
があるとします。
UserForm1~3までのコンボボックスに
NewFormのコンボボックスの内容を入力し、
UserForm1~3のCommandbutton1_Clickのイベントを
実行するようにプログラムしました。
その場合、UserForm1で出るようにしていたMsgboxや
UserForm2で出るようにしていたMsgbox等
必ず出てしまいます。
これを出ないようにするためには
UserForm上のMsgboxを削除すればいいかと思うのですが、
それでは、UserFormのみを実行したとき
Msgboxが表示されなくなってしまうので、困っています。
No.2
- 回答日時:
VBAでシートのみコピーすることは可能です。
http://officetanaka.net/excel/vba/sheet/sheet05. …
新規作成時のシートが不要なのであれば、コピー後に削除する方法では駄目でしょうか。。
☆新規作成時のシートが3枚固定であれば
(こちらの方がコード的には分かりやすいかと思います)
Dim xlbook As Workbook
Application.DisplayAlerts = False 'シート削除時の警告解除
Set xlbook = Workbooks.Add
With xlbook
ThisWorkbook.Sheets("コピー元").Copy before:=.Sheets(1) 'シートのコピー
.Sheets(4).Delete 'Sheet3を削除
.Sheets(3).Delete 'Sheet2を削除
.Sheets(2).Delete 'Sheet1を削除
End With
Application.DisplayAlerts = True '警告表示を元に戻す
☆新規作成時のシート数を自動判定して削除する方法
Dim xlbook As Workbook
Dim i As Long
Application.DisplayAlerts = False
Set xlbook = Workbooks.Add
With xlbook
ThisWorkbook.Sheets("コピー元").Copy before:=.Sheets(1) 'シートのコピー
For i = .Sheets.Count To 2 Step -1 '新規ブックのシート数をカウントし、後ろから順に削除
.Sheets(i).Delete
Next
End With
Application.DisplayAlerts = True
- - -
「メッセージボックスが邪魔」というくだりがよく分からなかったのですが(理解力不足ですみません 苦笑)、その部分に関してももう少し詳細に教えて頂ければもしかしたらお答えできるかもしれません。。。
この回答への補足
回答ありがとうございます!
メッセージボックスが邪魔というのは、
自分で作成したフォーム上で実行させているメッセージボックスが邪魔なのです。
例えば、
UserForm1
UserForm2
UserForm3
NewForm
があるとします。
UserForm1~3までのコンボボックスに
NewFormのコンボボックスの内容を入力し、
UserForm1~3のCommandbutton1_Clickのイベントを
実行するようにプログラムしました。
その場合、UserForm1で出るようにしていたMsgboxや
UserForm2で出るようにしていたMsgbox等
必ず出てしまいます。
これを出ないようにするためには
UserForm上のMsgboxを削除すればいいかと思うのですが、
それでは、UserFormのみを実行したとき
Msgboxが表示されなくなってしまうので、困っています。
説明下手で本当に申し訳ないです。
No.1
- 回答日時:
やりたいことが今一理解できていませんが
とりあえずメッセージは以下を試してください
マクロの最初にこれを実行
Application.ScreenUpdating = False
抜けるときにもとに戻します
Application.ScreenUpdating = True
この回答への補足
回答ありあがとうございます。
本当に、説明不足で申し訳ありません。
例えば、
UserForm1
UserForm2
UserForm3
NewForm
があるとします。
UserForm1~3までのコンボボックスに
NewFormのコンボボックスの内容を入力し、
UserForm1~3のCommandbutton1_Clickのイベントを
実行するようにプログラムしました。
その場合、UserForm1で出るようにしていたMsgboxや
UserForm2で出るようにしていたMsgbox等
必ず出てしまいます。
これを出ないようにするためには
UserForm上のMsgboxを削除すればいいかと思うのですが、
それでは、UserFormのみを実行したとき
Msgboxが表示されなくなってしまうので、困っています。
上記内容の場合、
私が設定したMsgboxは表示されてしまいます。
調べたところ他に方法は無い模様ですが・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/05/24 08:33
- Visual Basic(VBA) VBAマクロでシートコピーした新シートにコピー元シートとの計算式の入れ方を教えて下さい。 5 2022/11/20 09:48
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) Excel VBA 最終行を取得しVlookup関数をコピーする方法をコーディングで教えてください。 3 2023/05/11 13:14
- Visual Basic(VBA) エクセルのマクロについて教えてください。 5 2023/06/02 08:44
- Visual Basic(VBA) エクセルVBA 2 2022/04/27 13:29
- Excel(エクセル) エクセルのマクロについて教えてください。 3 2023/02/07 14:47
- Excel(エクセル) マクロVBA別Excelブックにデータ転記 2 2022/07/10 23:35
- Visual Basic(VBA) Excel VBA シートを追加後に余分なシートを削除する、の意味 21 2022/05/19 22:46
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel 関数を使ってデータと一...
-
CSVファイルについて質問です。
-
エクセルの選択範囲以外を削除...
-
EXCELで別のブックから式をコピ...
-
EXCELのVBAでシートコピーをし...
-
【Excel】数式をそのまま他のシ...
-
エクセルのユーザーフォームを...
-
Excel 数式の保護をしたセルを...
-
エクセルのワークシートをUSBメ...
-
【VBA】コピー&複数個所のペー...
-
エクセルの1シートの内容を複...
-
Excel Selectは使わない? VBA
-
【エクセル】プルダウン設定の...
-
エクセルシートを別のエクセル...
-
ExcelのVBAで、application.inp...
-
ExcelVBAで、ユーザーフォーム...
-
ワークシートの移動またはコピ...
-
エクセルでシートを「移動また...
-
エクセルのページをシートごと...
-
エクセルでシート1に会員名簿を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 関数を使ってデータと一...
-
エクセルの選択範囲以外を削除...
-
EXCELのVBAでシートコピーをし...
-
EXCELで別のブックから式をコピ...
-
【Excel】数式をそのまま他のシ...
-
【VBA】コピー&複数個所のペー...
-
Excelの行をコピーして貼り付け...
-
CSVファイルについて質問です。
-
【エクセル】プルダウン設定の...
-
Excel シートのコピーの際、ペ...
-
Excel 数式の保護をしたセルを...
-
【Excel VBA】シートコピー時、...
-
エクセルの1シートの内容を複...
-
ExcelVBAで、ユーザーフォーム...
-
Excel シートに別のExcelシート...
-
シートが保護されていないのに...
-
PDFファイルをコピーしてエクセ...
-
エクセルシートを別のエクセル...
-
エクセルVBA 1行飛ばしで転記す...
-
エクセルでシートを「移動また...
おすすめ情報