はじめまして。Excel勉強中の者です。
Excel VBAで
マクロボタンを押した後、
ユーザーに別のファイルとシートを選択して
選択したシートをコピーするという処理をしたく
作成中です。
色々なサイトを見ながら作ってみたのですが
現在のわたしの力では
シートを手入力する処理までしか作れないのと
キャンセル後の処理がうまくできないようです。
現在は以下のようになってます。
------------------------
Sub test()
Dim ret As Boolean
Dim myPath, msg, shName As String
Dim wb_A As Workbook, Sh As Worksheet
'ファイルを選んでもらう
myPath = Application. GetOpenFilename ("Microsoft Excelブック, *.xls?")
If myPath = "False" Then Exit Sub
Set wb_A = Workbooks. Open (myPath)
For Each Sh In wb_A. Worksheets
msg = msg & Sh. Name & Chr(10)
Next
msg = msg & "シート名を入力してください"
Do
ShName = InputBox (msg, "シート選択" )
For Each Sh In wb_A. Worksheets
If shName = Sh. Name Then Flag = True
Next
If Not Flag Then shName =""
Loop While Len (shName) = 0
wb_A. Worksheets(shName). Copy before := ThisWorkbook. Sheets(1)
wb_A. Saved = True
wb_A.Close
Set wb_A = Nothing
End Sub
-----------------------
です。(誤字があったら申し訳ございません)
現在マクロは一応動くのですが
シート名を手入力するのではなく、選択できるように変更したいのと(For Eachでダイアログボックスに入れる?)
フォルダの選択をキャンセルした時に
キャンセルしましたの文言をmsgBoxで出したいのと
シートの選択をキャンセルすると、
なにか入力するまで永遠に入力欄が表示され続けるのをどうにかしたいのですが
色々工夫してもどうにもうまく処理できず
わたしの技術ではここまでが限界でした。
どうか、お力を貸していただければと思います。
よろしくお願い致します。
No.2ベストアンサー
- 回答日時:
>UserFormを教えていただけたら嬉しいです。
先ずコードから
標準モジュールに
Option Explicit
Public Buf As String
Sub test()
Dim ret As Boolean, Flag As Boolean
Dim myPath, msg, shName As String
Dim wb_A As Workbook, Sh As Worksheet
'ファイルを選んでもらう
myPath = Application.GetOpenFilename("Microsoft Excelブック, *.xls?")
If myPath = "False" Then
MsgBox ("キャンセルしました")
Exit Sub
End If
Set wb_A = Workbooks.Open(myPath)
Buf = ""
With UserForm1
For Each Sh In ActiveWorkbook.Worksheets
.ListBox1.AddItem Sh.Name
Next
.CommandButton1.Caption = "キャンセル"
.Caption = "ワークシート選択"
.Show
End With
If Buf = "" Then
MsgBox ("シート選択がキャンセルされました")
Else
wb_A.Worksheets(Buf).Copy before:=ThisWorkbook.Sheets(1)
End If
wb_A.Saved = True
wb_A.Close
Set wb_A = Nothing
End Sub
Formモジュールに
Option Explicit
Private Sub CommandButton1_Click()
Unload Me
End Sub
Private Sub ListBox1_Click()
Buf = ListBox1.List(ListBox1.ListIndex) 'ワークシート名を取得
Unload Me
End Sub
UserForm1は、添付図のような感じで
いかがでしょう?
とてもわかりやすく書いていただきありがとうございます。
Formモジュールが初めてだったため理解に時間がかかりすみません。
実際に試してみたところ、UesrFormの
.ListBox1のところでコンパイルエラーが起きてしまい
メソッドまたはデータメンバーが見つかりません
と表示されてしまうのですが、どう改善したらよいのでしょうか(無知で申し訳ないです)
No.4
- 回答日時:
#2です。
ユーザーフォームは作成されたと言う事でよろしかったでしょうか
一応、参考サイト https://www.sejuku.net/blog/37407
ユーザーフォームを挿入して ツールボックスで
リストボックス と コマンドボタンを 作成します。
UserForm1やListBox1などの数字部分は、自動的に作成されますが、念のため確認してください。
>.ListBox1のところでコンパイルエラー
上のUserForm1でエラーではないので
ListBox1オブジェクト自体を取得できていない可能性が高いと思います。
一度、下記でUserForm1が表示されリストボックスとコマンドボタンが表示されるか試してください。
Sub test1()
UserForm1.Show
End Sub
ユーザーフォームについて理解しきれてませんでした。参考サイトのおかげで理解することができました。
そして、やりたかった操作ができました。
とてもわかりやすく書いていただき勉強になりました。
ありがとうございます!!
No.3
- 回答日時:
こんにちは
Formを使わなくてすむような、簡単な方法はないものかと考えてみました。
エクセルには「シート選択ダイアログ」があるので、GetOpenFilenameと同様に、これを利用できないものかと考えましたが、どうやら組み込みダイアログにはリストアップされていないようです。
「シート選択ダイアログ」を表示するのに、以下の方法をみつけましたが、戻り値が無いため、残念ながらCancelを判別することはできません。
とは言っても、シートを選択する際に十分利用できるのではと思います。
以下は、シート選択部分のみの例ですが、ご参考にでもなれば。
(アクティブなブックに対して処理されます)
' シート選択
With CommandBars.Add(Temporary:=True)
.Controls.Add(ID:=957).Execute
.Delete
End With
No.1
- 回答日時:
こんばんは、
InputBoxでは、シート選択が出来ないのでUserFormを使うのが簡単ですね
UserForm作りますか? 取り敢えずエラー対策を付け足してみました。
Sub test()
Dim ret As Boolean, Flag As Boolean
Dim myPath, msg, shName As String
Dim wb_A As Workbook, Sh As Worksheet
'ファイルを選んでもらう
myPath = Application.GetOpenFilename("Microsoft Excelブック, *.xls?")
If myPath = "False" Then
MsgBox ("キャンセルしました")
Exit Sub
End If
Set wb_A = Workbooks.Open(myPath)
For Each Sh In wb_A.Worksheets
msg = msg & Sh.Name & Chr(10)
Next
msg = msg & "シート名を入力してください"
Do
shName = InputBox(msg, "シート選択")
If shName = "" Then GoTo sheet_cancel
For Each Sh In wb_A.Worksheets
If shName = Sh.Name Then Flag = True
Next
If Not Flag Then shName = ""
Loop While Len(shName) = 0
wb_A.Worksheets(shName).Copy before:=ThisWorkbook.Sheets(1)
sheet_cancel:
If Flag = False Then MsgBox ("シート選択がキャンセルされました")
wb_A.Saved = True
wb_A.Close
Set wb_A = Nothing
End Sub
こんばんは。
遅い時間に申し訳ありません。
エラー対策ありがとうございます。
とても勉強になります…!
InputBoxだからできなかったのですね。
勉強不足でした…
もしお手数じゃなかったら、
UserFormを教えていただけたら嬉しいです。
よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
あるあるbotに投稿したけど採用されなかったあるある募集
あるあるbotに投稿したけど採用されなかったあるあるをこちらに投稿してください
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
【Excel VBA】データ貼り付け先のシート名選択
Excel(エクセル)
-
VBAでどうプログラムしたらいいのか教えてください
Word(ワード)
-
エクセルVBAでファイル・シート名を指定して、現在のブックのシートにコピーしたい
Visual Basic(VBA)
-
-
4
別ブックをダイアログボックスで指定してそこにあるシートをコピーしたい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで複数のシートを一度に「...
-
エクセルでブック内の倍率がバ...
-
特定のシートのみ再計算させな...
-
【ExcelVBA】マクロの入ったシ...
-
ハイパーリンクでジャンプした...
-
Excelで条件に一致したものだけ...
-
EXCELの図形(テキストボックス)...
-
エクセルのシー名を二段表示に...
-
エクセルで複数のシートに画像...
-
エクセルで誤ってF11キーを押す...
-
Excel 全シート上のボタンを削...
-
エクセル、別のシートの表をポ...
-
vba Listviewでのチェックボッ...
-
指定したシート名以外を非表示...
-
Excelでマクロ設定したが反映さ...
-
ワークシートそのものの色を変...
-
エクセルのシート連番の振り直し
-
エクセルで開くページを指定したい
-
EXCELで存在しないシート...
-
エクセルの複数シートでのリン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで複数のシートを一度に「...
-
エクセルでブック内の倍率がバ...
-
ハイパーリンクでジャンプした...
-
エクセルで複数のシートに画像...
-
特定のシートのみ再計算させな...
-
【ExcelVBA】マクロの入ったシ...
-
EXCELの図形(テキストボックス)...
-
エクセルのシート連番の振り直し
-
エクセルのシー名を二段表示に...
-
Accessのテーブルを既存のExcel...
-
ワークシートそのものの色を変...
-
Wordで差し込み印刷時に表示す...
-
エクセルの2つのシートを並び...
-
エクセル、特定のシートにパス...
-
EXCELで存在しないシート...
-
エクセルVBAでエラー!
-
エクセルで誤ってF11キーを押す...
-
指定したシート名以外を非表示...
-
アクセスからエクセルのシート...
-
エクセルマクロでシート名を条...
おすすめ情報