Excel(97)で、ワークシートを削除する時に「選択したシートを削除します。一度削除したシートは・・・」という、警告ダイアログが出ますよね。これを出さずに強制削除する方法はあるのでしょうか?

現在、下記のようなプロシージャを用意し、シート名が要素になっているリストボックス(.MultiSelect = fmMultiSelectMulti)中で選択された全てのシートを削除するダイアログを作成しました。
ところが、選択した数だけ、前述の警告ダイアログが表示され、非常にうっとうしいのです。
どなたか、助けてください。お願いします。

'===現在使用しているプロシージャ===
For i = 0 To ListBox.ListCount - 1
 If ListBox.Selected(i) Then
  For Each AnySheet In ActiveWorkbook.Sheets
   If AnySheet.Name = ListBox.List(i) Then AnySheet.Delete
  Next AnySheet
 End If
Next i

このQ&Aに関連する最新のQ&A

A 回答 (2件)

こんにちは



 For~Nextを

Application.DisplayAlerts = False
Application.DisplayAlerts = True

で囲んでみたらいかがでしょうか?

参考URL:http://www2.odn.ne.jp/excel/
    • good
    • 0
この回答へのお礼

できました。DisplayAlertsプロパティですか。
このような機能はある筈だと思って調べていたのですが。。。。
まだまだ勉強不足です。ありがとうございました。

お礼日時:2001/03/08 19:23

代案です。



削除するシートを別のワークブックへ移動してワークブックをまとめて削除してください。
    • good
    • 0
この回答へのお礼

なるほど。これもアイディアですね。
いろいろ工夫してみます。

お礼日時:2001/03/08 19:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Q#If Then ~ #Else ~ #End If(エクセルVBA)

#If Then ~ #Else ~ #End If
って何ですか?
また、VBAのヘルプで検索する方法ってどうすればいいのですか?
どなたか?宜しくお願い致します。

Aベストアンサー

単純にヘルプのコピペです。

> #If Then ~ #Else ~ #End If
式の値に基づいて、条件付きのコンパイルを行います。

ヘルプの使用方法であれば、
VBAのコードを打つ画面で、#Ifの#またはIの後ろで「F1(ファンクション1)」を入力ください。

そうすると、参照先の先が自動的に出てきます。

今更聞きにくいヘルプの使用法ですね・・・。

HLPファイルの時は簡単に検索できたんですけどね。

Qシートに入力しようとするとダイアログを表示させたい

エクセルVBAでマクロを実行させて、他のシートの内容をシート1にコピーするようにしてあります。
標準モジュールのModule1でコードをかきました。
それとは別に、MicrosoftExcelObjectsのSheet1の部分に

Sub AutoClicked()
Worksheets("Sheet1").Activate
msg = "こちらのシートは入力は禁止しています"
End Sub

を追加して、シート1上(シート2以降は対象外)をクリックするとダイアログが表示される機能
を実現したかったのですが機能しませんでした。どこをどのように直せばよいのでしょうか?

Aベストアンサー

方法1 確実な方法(推奨)

シート1をシートの保護する
#ご利用のエクセルのバージョンが不明ですが,2003までではツールメニュー,2007以降では校閲タブ

標準モジュールのマクロを
sub macro1()
worksheets("Sheet1").protect userinterfaceonly:=true
’以下今のシート1に記入するマクロ

end sub
とする。


方法1’ご質問に書かれている内容に照らすと適切な方法
シート1を「非表示」にしてしまえば,シート1を「触る」ことは(わざわざ再表示しない限り)そもそも出来ません。
シート1を再表示させないためには,「ブックの保護」を行います。



方法2 あまりお奨めではない方法
シート1のシートモジュールの今のマクロを消して,次のマクロをコピー貼り付ける

private sub Worksheet_SelectionChange(byval Target as excel.range)
msgbox "DO NOT TOUCH"
end sub



方法3 あまりお奨めではない方法

標準モジュールのマクロを
sub macro1()
application.enableevents = false
’以下今のシート1に記入するマクロ

application.enableevents = true
end sub
とする。

さらにシート1のシートのモジュールの今のマクロを消して,次のマクロをコピー貼り付ける

private sub Worksheet_Change(byval Target as excel.range)
msgbox "forbidden"
application.enableevents = false
application.undo
application.enableevents = true
end sub



#参考として補足しておきます
方法2が,今のところアナタのオリジナルアイデアに一番近いアプローチです。
が,こういった手段では,たとえば「シート1を開く・そのままいきなり書き込む」を阻止できません。

方法3は,シート1への記入を阻止し,かつたとえば「シートが保護されていると出来ないこと」を特にシート1で許可したい場合に利用できる方法です。
しかしアナタのご相談は「シート1に触らせたくない」ですので,方法1’のようなアプローチが実は最も安全と言えます。

方法1 確実な方法(推奨)

シート1をシートの保護する
#ご利用のエクセルのバージョンが不明ですが,2003までではツールメニュー,2007以降では校閲タブ

標準モジュールのマクロを
sub macro1()
worksheets("Sheet1").protect userinterfaceonly:=true
’以下今のシート1に記入するマクロ

end sub
とする。


方法1’ご質問に書かれている内容に照らすと適切な方法
シート1を「非表示」にしてしまえば,シート1を「触る」ことは(わざわざ再表示しない限り)そもそも出来ません。
シート1を再表示させな...続きを読む

QエクセルVBAで If~ Then

If Range("A1") = "" Then Exit Sub と

If Range("A1") = "" Then
Exit Sub

では違うのですか?
通常改行すると思っていたのですが、改行したらエラーになってしまいました。

Aベストアンサー

ANo.#2の補足です。

Excel VBAのヘルプで『キーワードを入力してください』の所に"IF"と入れると、その下の『キーワードを選択してください』の下に"If...Then...Else"と選択肢がでますから、それをダブルクリック、その下の選択欄に『If...Then...Elseステートメントの使い方』というのが出ますので、読んでみてください。

・『1つのステートメントだけを実行するときは、If ... Then ... Elseステートメントの1行の構文を使います。』
・『複数行のコードを実行するには、複数行の構文を使用する必要があります。この構文には、次の例のようにEnd Ifステートメントが含まれます。』
(以上、VBAのヘルプから引用)

"Then"と"Else"の後に続く処理がそれぞれ1つずつであれば、1行に記述することが出来、"End If"は必要ありません。(厄介なことに、"End If"をつけるとエラーになります。)

If ... Then x = 1 Else x = 0

処理が2つ以上になると、複数行の記述になるので、最後に"End If"が必要になります。(ご質問のように"Then"の後ろで改行した場合も、VBAでは複数行の記述と解釈されてしまいます。)

If ... Then
  x = 1
Else
  x = 0
End If

>通常改行すると思っていたのですが、・・・

"If"だけでなく、改行した方がプログラム作成者以外の者にも処理がわかりやすいという観点から、VBA以外のプログラミング言語でも、改行した書き方が推奨されているので、その影響でしょうね。(VBAではないですが、私も改行するように教えられました。)

ANo.#2の補足です。

Excel VBAのヘルプで『キーワードを入力してください』の所に"IF"と入れると、その下の『キーワードを選択してください』の下に"If...Then...Else"と選択肢がでますから、それをダブルクリック、その下の選択欄に『If...Then...Elseステートメントの使い方』というのが出ますので、読んでみてください。

・『1つのステートメントだけを実行するときは、If ... Then ... Elseステートメントの1行の構文を使います。』
・『複数行のコードを実行するには、複数行の構文を使用する必要があ...続きを読む

Q引数付のFuncitonプロシージャと引数付のSUBプロシージャの違い

親プロシージャに数値を渡すときに、引数付のFuncitonプロシージャと引数付のSUBプロシージャは、結果を見ると同じ動きをするように思います。
このような場合、両者には、どのような違いがあるのでしょうか?

Sub 親プロシージャ()
Cells(1,MyNOend)=123
end Sub

・子プロシージャ
Function FMyRowCnt(MyNOend As Integer)
MyNOend = TMYKanriBkWs1.Range("D1").CurrentRegion.Rows.Count
End Function
Sub FMyRowCnt(MyNOend As Integer)
MyNOend = TMYKanriBkWs1.Range("D1").CurrentRegion.Rows.Count
End Sub

以上 よろしくお願い致します。

Aベストアンサー

こんにちは。#2,#4 を書いたものです。

#5 さんの回答について、数点書かせていいだきます。
専門家さんとしていますが、ちょっと内容には疑問を感じました。

Excel VBAとAccess VBAとは赴きは違っていても、Sub プロシージャも、Function ユーザー定義も、サブルーチンで使用する分には、基本的には変わりません。ただ、Access VBAでは、呼び出しの必要があって、関数にするかもしれませんが、Excelでは、関数の呼び出しは、Access のようにはしません。それは、ワークシートが一つのコントロール・オブジェクトになっているからです。

> 『Sub』プロシージャは引数の変数を書き換えると呼び出し元『親』で書き換えた値が反映します。→処理部分を『サブルーチン』として分離しただけです。

 Subプロシージャは、戻り値自身はありませんが、デフォルトで、参照渡しになっていますが、値渡しも可能です。

例題1

>・『Function』プロシージャは引数の変数を書き換えても呼び出し元『親』の値は変化しません。

 参照渡し(byRef)にすれば、親の変数は変わります。
 例題2

 
以下は、初歩的なサンプルです。
--------------------------------------------------
例題1:

'値渡し、参照渡しの例
Sub Test1()
Dim a
Dim b
 a = 1
 b = 1
 subTest1 a, b
 MsgBox "a: " & a & ",b: " & b
End Sub

Sub subTest1(ByVal a, ByRef b)
 a = a + 1
 b = a
End Sub


例題2:
'参照渡しの例
Sub Test2()
Dim a
Dim b
 a = 1
 b = 0
 subTest2 a, b
 MsgBox "a: " & a & ",b:" & b
End Sub

Function subTest2(ByVal a, ByRef b)
 a = a + 1
 b = a
End Function

こんにちは。#2,#4 を書いたものです。

#5 さんの回答について、数点書かせていいだきます。
専門家さんとしていますが、ちょっと内容には疑問を感じました。

Excel VBAとAccess VBAとは赴きは違っていても、Sub プロシージャも、Function ユーザー定義も、サブルーチンで使用する分には、基本的には変わりません。ただ、Access VBAでは、呼び出しの必要があって、関数にするかもしれませんが、Excelでは、関数の呼び出しは、Access のようにはしません。それは、ワークシートが一つのコントロール・オブジ...続きを読む

Qエクセルでシート(1)の一部を削除するとシート(2)の関連部分も削除できる方法ありますか

エクセルで、シート(1)の一部を削除するとシート(2)
の関連部分も削除できる方法ありますか。
具体的に申し上げます。

「特産物の産地別生産高表(内容はすべて仮定)」があり、各特産物は、シート(1)(A列に県名、B列に生産量、県内市町村数)、シート(2)(A列に市町村名、B列に市町村生産量)で表されています。

これらを、一定規模以上の生産県のみ残し、他は削除したいのです。例えば「ぶどう」の生産量について愛知県が少ないと仮定すれば、シート(1)の愛知県の行を削除し、同時にシート(2)の愛知県内市町村名の行(削除行数=県内市町村数)を削除したい。

シート(2)の市町村名は、シート(1)の県の順番に並んでいるものとします。

いろいろ書きましたが、「シート(1)の一部を削除し、同時にシート(2)の関連部分も削除できる方法」ありましたら教えてください。

Aベストアンサー

マクロが使えるのであれば、可能だと思いますが・・・。

関数とかシート間のグループ作業等の機能では、無理ではないでしようか?


人気Q&Aランキング

おすすめ情報