• ベストアンサー

リストボックスに表示後、選択したシートを削除する

初歩的な質問で恐縮ですが、ご教示ください。 リストボックスにすべてのシート名を表示させ、選択したシートのみ削除するマクロを作成したいのですが、エラーメッセージ「オブジェクトが必要」と表示されエラーとなります。どのように変更したらよいのでしょうか?  Private Sub CommandButton1_Click() 'Selectedプロパティを使って、選択されているかどうかを判断して、選択されていたらメッセージボックスにその内容を表示します。 'このメッセージボックスを表示される全シートのうち、選択したシートのみ、削除処理する。 Dim i As Integer With ListBox1 For i = 0 To .ListCount - 1 If .Selected(i) Then MsgBox .List(i) End If Next i End With ' 選択シート削除 '「はい」「いいえ」のアイコンを表示する Btn = MsgBox("選択されたシートが全て消去されます。元にもどりません いいですか?", vbYesNo + vbQuestion, "確認") '「いいえ」の場合は終了します。 If Btn = vbNo Then Exit Sub End If 'リストのうち、選択したシートだけ削除する 'オブジェクトが必要? Workbook.Sheet.[(List(i))].Delete End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.3

下記のようにしてみてください。 Private Sub CommandButton1_Click() Dim i As Integer Dim btn Dim wsname As String With ListBox1 For i = 0 To .ListCount - 1 If .Selected(i) Then wsname = .List(i) '選択されたリストを変数に格納 MsgBox wsname End If Next i End With  '↓無くてもExcel本体が警告してくれますがどうでしょうか?  '----------------ここから---------------------------------- btn = MsgBox("選択されたシートが全て消去されます。元にもどりません いいですか?", _ vbYesNo + vbQuestion, "確認") If btn = vbNo Then Exit Sub End If  '----------------ここまで---------------------------------- 'Workbook.Sheet.[(List(i))].Delete ActiveWorkbook.Sheets(wsname).Delete End Sub ところで、ListBox1で複数のリストが選択できるのですか? 複数選択された場合、上手くいくかどうか未検証です。

pureko99
質問者

お礼

ありがとうございました。 休日の貴重な時間を割いていただいてありあがとうございました。 OKですうまく動作しました。 複数行はできませんでしたので、とりあえず ListBox1.MultiSelect = 2 として単数行で完結しました。

その他の回答 (3)

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.4

これではダメ? Private Sub CommandButton1_Click() MsgBox ListBox1.Value If MsgBox("選択されたシートが全て消去されます。元にもどりません いいですか?", vbYesNo + vbQuestion, "確認") = vbNo Then Exit Sub ActiveWorkbook.Sheets(ListBox1.Value).Delete End Sub

pureko99
質問者

お礼

ありがとうごさいます。 こんなシンプルなマクロもありですね 早速ためしてみます。

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.2

>回答番号:No.1 この回答への補足 修正されたコード全文を提示していただけないでしょうか。

pureko99
質問者

補足

下記のとおりです。よろしくお願いします。 Private Sub CommandButton1_Click() 'Selectedプロパティを使って、選択されているかどうかを判断して、選択されていたらメッセージボックスにその内容を表示します。 'このメッセージボックスを表示する部分を、印刷処理や削除処理にするなどして応用することができます。 Dim i As Integer With ListBox1 For i = 0 To .ListCount - 1 If .Selected(i) Then MsgBox .List(i) End If Next i End With ' 選択シート削除 '「はい」「いいえ」のアイコンを表示する Btn = MsgBox("選択されたシートが全て消去されます。元にもどりません いいですか?", vbYesNo + vbQuestion, "確認") '「いいえ」の場合は終了します。 If Btn = vbNo Then Exit Sub End If 'リストの選択したシートだけ削除する 'オブジェクトが必要? 'ActiveWorkbook.Sheet.[(List(i))].Delete wsName = List(i) ActiveWorkbook.Sheets(wsName).Delete End Sub

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

変数にシート名を格納して wsName = .List(i) 削除するようにすればどうでしょうか。 ActiveWorkbook.Sheets(wsName).Delete

pureko99
質問者

補足

再度の質問で恐縮ですが 回答のとおり修正すると コンパイルエラー「SubまたはFunctionが定義されていません」と表示されるので、色々試行しましまたがエラーは直りません。どうしたら?

関連するQ&A

  • リストボックスからシート削除のマクロを合体したい

    Windows7 Excel2007でマクロ作成中の初心者です。 やりたいことは、リストボックスからシートを選択し、そのシートを削除する。 削除したら、リストボックスの中の、シート選択状態を解除し、その項目だけを 削除することです。 以下のコードで出来たのですが、これを統合して一個のコードにしたいです。 どうしたらよろしいでしょうか。 Private Sub 顧客削除_Click() Dim i As Integer Dim btn Dim name As String With 顧客リスト For i = 0 To .ListCount - 1 If .Selected(i) Then name = .list(i) '選択されたリストを変数に格納 btn = MsgBox("本当に、 " & name & " さんを削除していいですか?", _ vbYesNo, "削除の確認") If btn = vbYes Then Application.DisplayAlerts = False Worksheets(Mid(.list(.ListIndex - 0), InStr(.list(.ListIndex - 0), " ") + 1)).Delete Application.DisplayAlerts = True リストボックスの項目削除 End If End If Next i Worksheets(1).Activate End With ActiveWorkbook.Save Application.ScreenUpdating = True End Sub ----------------------------- Sub リストボックスの項目削除() Dim i As Integer For i = 顧客リスト.ListCount - 1 To 0 Step -1 If 顧客リスト.Selected(i) Then 顧客リスト.RemoveItem (i) Exit For End If Next i End Sub

  • リストボックスから削除、「いいえ」でも削除される

    Windows7 Excel2007でマクロ作成中の初心者です。 リストボックスから、シート(顧客名)を選んで削除するマクロです。 削除がうまくいくのですが、「いいえボタン」を押しても シートが削除されてしまいます。どう修正したらよろしいでしょうか。 Private Sub 顧客削除_Click() Dim i As Integer Dim btn Dim name As String With 顧客リスト For i = 0 To .ListCount - 1 If .Selected(i) Then name = .list(i) '選択されたリストを変数に格納 btn = MsgBox("本当に、 " & name & " さんを削除していいですか?", _ vbYesNo, "削除の確認") End If Next i Application.DisplayAlerts = False Worksheets(Mid(.list(.ListIndex - 0), InStr(.list(.ListIndex - 0), " ") + 1)).Delete Application.DisplayAlerts = True '顧客リスト.RemoveItem (顧客リスト.ListIndex) '顧客リスト.ListIndex = -1 リストボックスの項目削除 Worksheets(1).Activate End With If btn = vbYesNo Then Exit Sub End If ActiveWorkbook.Save End Sub ----------------------------------------------- Sub リストボックスの項目削除() Dim i As Integer For i = 顧客リスト.ListCount - 1 To 0 Step -1 If 顧客リスト.Selected(i) Then 顧客リスト.RemoveItem (i) Exit For End If Next i End Sub

  • リストボックスからシート選んで削除したい

    Excel2007でマクロ作成中の初心者です。 以下のマクロを実行すると、最終行でコンパイルエラーがでて 「参照が不正または不完全です」と表示され削除ができません。 どうしたら、削除できるでしょうか。 Private Sub 顧客削除_Click() Dim i As Integer Dim btn Dim name As String With 顧客リスト For i = 0 To .ListCount - 1 If .Selected(i) Then name = .list(i) '選択されたリストを変数に格納 btn = MsgBox("本当に、" & name & "さんを削除していいですか?", _ vbYesNo + vbQuestion, "削除の確認をする") End If Next i End With If btn = vbNo Then Exit Sub End If 'Worksheets(Mid(.list(.ListIndex - 0), InStr(.list(.ListIndex - 0), " ") + 1)).Delete 'ActiveWorkbook.Sheet.[(List(i))].Delete 'ActiveWorkbook.Sheets(name).Delete Worksheets(Split(.list(.ListIndex - 0), " ")(1)).Delete ' End Sub

  • リストボックスから選択したシートを削除したい

    Excel2007でマクロ作成の初心者です。 リストボックスの選択項目のワークシートを削除したいのですが、 「インデックスが有効範囲にありません。」のエラーが発生し、 先に進めません。どうしたらよろしいでしょうか? ’--------------------- Private Sub 顧客削除_Click() Application.ScreenUpdating = False Unload Me Unload DS請求フォーム Dim i As Integer With 顧客リスト For i = 0 To .ListCount - 1 If .Selected(i) Then ' Worksheets(.list(.ListIndex)).Delete Worksheets(Split(.list(.ListIndex - 0), " ")(1)).Activate '←ここでエラー発生 ActiveSheet.Delete End If Next i End With MsgBox "選択の顧客を削除しました。" End Sub ’------------------------- Private Sub UserForm_Initialize() Workbooks("請求.xls").Activate Dim i As Integer Const EXCEPT_NAME = "経理●一覧●基本●" For i = 1 To Worksheets.Count If InStr(EXCEPT_NAME, Worksheets(i).Name & "●") = 0 Then 顧客リスト.AddItem i & " " & Worksheets(i).Name End If Next i End Sub ’----------------------

  • リストボックスでの選択項目分削除について。

    こんばんは。 リストボックスでのマルチセレクトで選択した項目を削除する 方法で悩んでいます。 (リストボックスで3項目選択したとして、この3項目を削除する方法) 解答は現在勉強している本に掲載されているのですが意味が分からず。 解答のコードの方にはリストを後ろから削除しているみたいなのですが、 前から削除しても大丈夫だと思いやってみましたが、エラーが出てしまいます。 解説には、先頭から削除するとその時点でリストのインデックス値がずれて しまう。と書いてあるのですが、後ろから削除しても一緒だと考えこんでいます。 解答コード ********************************************************** Private Sub Command2_Click() Dim i As Integer '選択状態(Selected=true)の項目だけ削除 For i = List1.ListCount - 1 To 0 Step -1 If List1.Selected(i) = True Then List1.RemoveItem i End If Next i End Sub ********************************************************* と言う解答コードを自分は、前から削除するように 自分なりのコード ********************************************************* Private Sub Command2_Click() Dim i As Integer For i = 0 To listcount-1 If List1.Selected(i) = True Then List1.RemoveItem i End If Next i End Sub ************************************************************* で作成してみましたが、やっぱりエラーが。 なぜ、前から削除するとエラーになってしまうのか、 もう少し具体的に教えてくれると助かります。 よろしくお願いします。m(__)m

  • リストボックスのリストを削除する

    リストボックスのリストを削除する アドバイスをお願いします。 下の構文でユーザーフォーム内のリストボックスに リストを表示させるようにしました。 Private Sub UserForm_Initialize()  With ListBox1 .RowSource = "データー!B3:B33" End With End Sub 表示されたリスト内で、不要になったリストをコマンドボタンの押下したときに データーシートのB3からB33の中から選択したリストと同じデーターを 探して削除する方法をお教えください。

  • リストボックスからシートを選びアクティブにしたい

    Excel2007でマクロ作成の初心者です。 リストボックスで選択した、リスト項目のワークシートを表示したいのですが、 「インデックスが有効範囲にありません」というエラーがでます。 どうしたらよろしいでしょうか? よろしくお願いします。 ’-------------------------------- Private Sub 顧客リスト_Click() With 顧客リスト Worksheets(.list(.ListIndex - 0)).Activate’----ここでエラー発生します End With End Sub ----------------------------- Private Sub UserForm_Initialize() Workbooks("請求.xls").Activate Dim i As Integer Const EXCEPT_NAME = "経理●一覧●基本●" For i = 1 To Worksheets.Count If InStr(EXCEPT_NAME, Worksheets(i).Name & "●") = 0 Then 顧客リスト.AddItem i & " " & Worksheets(i).Name End If Next i End Sub ’---------------------------

  • リストボックスの1行目を選択状態にする

    リストボックス 何も選択していないのなら、1行目を選択状態にする というようにするにはどうすればいいでしょうか? 今は無理やり Sub test() If IsNull(Sheets("Sheet2").ListBox1.Value) = True Then Sheets("Sheet2").ListBox1.Value = "a" End If End Sub としていますが、 「リストボックスの1行目を選択状態にする」 にはどうすればいいですか? リストボックスがどの業も選択してない時に、 画像のようにしたいです。

  • シート名を変更すると、そのシートのデータがリストボックスに表示されない

    Vista SP1 ExcelXPでマクロ作成中の超初心者です。 シートA会社のセルを、右クリックすると、ユーザーフォームが現れ、その中のリストボックスにsheet1の データが表示されます。sheet2 sheet3 も同様に、正常にリストボックスが表示できています。 ところが、シートの名前 「sheet1」を、「関係データ1」に変更すると フォームにリストボックスが表示されますが、中身は表示されません。 シート名を変更しても、右クリックでリストが正常に表示できるようにするにはどうすればよろしいでしょうか。             1)ブックには,13枚のシートがあります。  1)シート名が  A会社からJ会社           sheet1 sheet2 sheet3 2)会社シートにはそれぞれ以下のコードを記入してあります。  Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) Cancel = True 'プロシージャ終了後に表示されるショートカットメニューの非表示 If Target.Row > 14 And Target.Row < 45 And Target.Column > 13 And Target.Column < 15 Then UserForm1.Show End If If Target.Row > 14 And Target.Row < 45 And Target.Column > 19 And Target.Column < 21 Then UserForm2.Show End If ユーザーフォームには、次のコードがあります。 Option Explicit Private Sub CommandButton1_Click() 'With ListBox1 'If .ListIndex = -1 Then 'MsgBox "項目を選択してくだい" 'Else ActiveCell.Value = ListBox1.list(ListBox1.ListIndex) End If End With Unload UserForm1 End Sub ------------------------------------------ Private Sub CommandButton2_Click() Unload UserForm1 End Sub 'Private Sub UserForm_Initialize() 'Me.StartUpPosition = 0 ' Me.Left = 200 ' Me.Top = 100 ' Me.Height = 400 ' Me.Width = 230 'End Sub Private Sub 閉じる_Click() Unload UserForm1 End Sub Private Sub ListBox1_Click() With ListBox1 If .ListIndex = -1 Then MsgBox "項目を選択してくだい" Else ActiveCell.Value = ListBox1.list(ListBox1.ListIndex) ActiveCell.Offset(0, 7).Value = ListBox1.list(ListBox1.ListIndex, 1) Selection.Offset(0, 7).Select End If End With Unload UserForm1 End Sub -------------------------------------------

  • リストボックスから項目を選択してセルに入力したいのです

    EXcel2003でマクロ作成中です。エクセルシートのN列を右クリックすると、ユーザーォームが現れ、その中のリストボックスから項目を選択すると選択文字が白色に反転します。 ユーザーホームの下方に設置した「入力する」ボタンをクリックする、アクティブセルにテキスト文字列が挿入されます。 Option Explicit Private Sub CommandButton1_Click() With ListBox1 If .ListIndex = -1 Then MsgBox "項目を選択してくだい" Else ActiveCell.Value = ListBox1.list(ListBox1.ListIndex) End If End With Unload UserForm1 End Sub --------------------------- Private Sub CommandButton2_Click() Unload UserForm1 End Sub ------------------------------ これと同じものをB列につくりました。エクセルシートのB列を右クリックすると、リストボックスが表示されますが、その中の項目を選択しようとすると、一瞬にしてユーザーフォーム自体が消えてしまい項目を 選択できません。 Private Sub CommandButton1_Click() With ListBox2 If .ListIndex = -1 Then MsgBox "項目を選択してくだい" Else ActiveCell.Value = ListBox2.list(ListBox2.ListIndex) End If End With Unload UserForm2 End Sub ----------------------------- Private Sub CommandButton2_Click() Unload UserForm2 End Sub ------------------------------------------ まったく同じものを作って内容だけかえたのですが、できません。 どうしてでしょうか?ご教授おねがいします。

専門家に質問してみよう