- ベストアンサー
リストボックスからシート削除のマクロを合体したい
- Windows7 Excel2007でマクロ作成中の初心者です。リストボックスからシートを選択し、そのシートを削除するマクロを作成したいです。
- 削除したら、リストボックスの中の、シート選択状態を解除し、その項目だけを削除することが目的です。
- 現在は2つのコードで処理していますが、これを統合して一つのコードにしたいです。どのようにすればよいでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>それぞれのシートの名前が顧客の名前になっています。 ですよね。 Dim i As Integer Dim btn Dim name As String With 顧客リスト Application.DisplayAlerts = False For i = 0 To .ListCount - 1 If .Selected(i) Then name = .list(i) '選択されたリストを変数に格納 btn = MsgBox("本当に、 " & name & " さんを削除していいですか?", _ vbYesNo, "削除の確認") If btn = vbYes Then Worksheets(name).Delete End If End If Next i .Clear For i = 2 To Worksheets.Count .AddItem Sheets(i).name Next Application.DisplayAlerts = True Worksheets(1).Activate End With と Private Sub UserForm_Initialize() With 顧客リスト For i = 2 To Worksheets.Count .AddItem Sheets(i).name Next End Sub で十分ではないでしょうか? Sheets(1)は削除しないものとしてです。 Application.DisplayAlerts = False もFor~Nextの外側で十分ですね。 位置側に書くと何度もパソコンに無駄な動作をさせてしまいますね。
その他の回答 (1)
- hallo-2007
- ベストアンサー率41% (888/2115)
前回回答したものです。少し補足をしてください。 顧客リストはどうやって取得しているのですか? どこかのセルにリストがあって、ROWSOURCEで指定しているのか Private Sub UserForm_Initialize() を使ってVBAで取得しているのか それと、顧客リスト=シート名ではないのか と云う疑問がありますが、違っていますか?
補足
すいません。Private Sub UserForm_Initialize() を使ってVBAで取得しています。 30以上のシートがあり、それぞれのシートの名前が顧客の名前になっています。
お礼
教えていただいた、コードを1行一句ためしてみました。 なんとうまくできました。ありがとうございました。
補足
お世話になります。今試してみました。 一番上のシート--顧客の名前が表示されませんが 削除等は完璧にできました。 Private Sub UserForm_Initialize() Dim i As Integer With 顧客リスト For i = 2 To Worksheets.Count - 3 .AddItem Sheets(i).name Next End With End Sub 今まで使っていたコードで修正していただくとあありがたいです。これだとすべての顧客がInitialize時に表示されるので・・以下のコードに入れ替えて実行するとエラーになります。 Private Sub UserForm_Initialize() Workbooks("請求").Activate Dim i As Integer Const EXCEPT_NAME = "分類●経理●一覧●" For i = 1 To Worksheets.Count - 3 If InStr(EXCEPT_NAME, Worksheets(i).name & "●") = 0 Then 顧客リスト.AddItem i & " " & Worksheets(i).name End If Next i End Sub