お世話になります。

Access VBA から指定したExcelシートの削除を行うプログラムを下記の通りに記載しています。

Set oApp = CreateObject("Excel.Application")
oApp.Workbooks.Open FileName:="エクセル.xls"
oApp.DisplayAlerts = False
oApp.Sheets("シート名1").Delete
oApp.DisplayAlerts = True

この場合において、"シート名1"が存在していれば問題なく処理されますが、
このシートが存在していなければエラーが起きます。
指定したExcelブックにこのシートが存在するかどうかのチェックを事前に行い、
存在する場合のみ削除処理を行うにはどうすればよいでしょうか?

よろしくお願いします。
環境は、Access2007です。

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

A 回答 (1件)

昨日も、シートの存在チェックの質問が出たが読んでないのだろう。


Googleで「エクセルVBA シート 存在」で照会してみること。
最初の記事の
http://officetanaka.net/excel/vba/tips/tips10.htm
の後半に出てくる。
こんな方法も知らない(やってみない)で、VBAのプログラムを勉強しようとするのは、行き詰まるよ。
独学なら、WEBとヘルプが頼りだよ。
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています

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

Qエクセルで複数のシートの1枚目だけを印刷するには

あるエクセルのファイルに50ほどのシートがあり、
各シートには2枚の印刷範囲があります。
複数のシートの1枚目だけを印刷したいのですが、
複数のシートを選択して、印刷メニューの印刷範囲のページ指定で
1枚目だけを指定すると、先頭のシートの1枚目しか印刷されません。

何か方法はありますでしょうか??
どなたかわかる方がおりましたら教えてください。
よろしくお願いします。

Aベストアンサー

1.印刷したいシートを全部選択。
2.どれでもいいのでシートをひとつ改ページプレビューして1ページ目だけを選択。
3.「印刷」の「印刷対象」で「選択した部分」にチェックを入れる
4.OKボタンぽち

これじゃダメですか?

Q EXCEL>getObjectしたEXCELファイルのシートを指定したい

ACCESSのVBAマクロでEXCELファイルを指定してデータを取得しようとしています。

GetObject("C:\ファイル名.xls", "Excel.Sheet")

でEXCELファイルを取得するまでは良いのですが、そのファイルのシートを指定する方法がわかりません。

基本かもしれませんが、ご教示をお願いします。

Aベストアンサー

こんにちは。

Accessで使っているとき、マクロ側でExcelが起動されていることがあるのでしたら、GetObjectも考慮に入れたほうがよいのかもしれませんね。

それを考慮しなければ、オートメーション・オブジェクトは、
Set xlApp = CreateObject("Excel.Application")
だけでよいです。

'GetObject をお使いの場合は、
Dim xlApp As Object
Const MYPATH As String = "○○○"
Const FILENAME As String ="××××"
'
'オートメーション・オブジェクトの生成
On Error Resume Next
 Set xlApp = GetObject(, "Excel.Application") '起動済Excelの取得
  If TypeName(xlApp) = "Empty" Then
    '起動済Excelが無い時新規作成
   Set xlApp = CreateObject("Excel.Application")
  End If
On Error goto 0
'
xlApp.Visible = True 'どちらでも可
With xlApp.Workbooks.Open(MYPATH & "\" & FILENAME)
 .Worksheets("Sheet1").Select
 '作業
 .Close False
End With
'以下を忘れると、後々、悲惨なフリーズの原因です。
Set xlApp = Nothing
'

でも、

例えば、Excelを開いて加工するのでなければ、このような方法もありかと思います。(myTableにインポートする)

DoCmd.TransferSpreadsheet acImport, , "myTable", MYPATH & "\"FILENAME", True, "Sheet1!A1:D50

'

こんにちは。

Accessで使っているとき、マクロ側でExcelが起動されていることがあるのでしたら、GetObjectも考慮に入れたほうがよいのかもしれませんね。

それを考慮しなければ、オートメーション・オブジェクトは、
Set xlApp = CreateObject("Excel.Application")
だけでよいです。

'GetObject をお使いの場合は、
Dim xlApp As Object
Const MYPATH As String = "○○○"
Const FILENAME As String ="××××"
'
'オートメーション・オブジェクトの生成
On Error Resume Next
 Set xlApp = GetObj...続きを読む

QExcel 1枚のページに2つのシートを印刷したい

こんにちはです。

Excel2000で1シートにつき1枚、それが4シートなので計4枚を印刷しています。
これを1シートを50%に縮小して1枚につき2シート印刷できるようにしたいのですが
方法がわかりませんでした。

印刷のプロパティ(プリンタ:Canon LASER SHOT LBP-930EX)で
ページレイアウトを「2ページ/枚」にしてみても、
50%に縮小されるだけで結局4枚出力されました。
2シートを1枚に印刷する方法をご存知でしたら教えていただけますでしょうか?
よろしくお願いします。

Aベストアンサー

ページレイアウトを「2ページ/枚」の設定が
反映されていないのではないでしょうか?
下記の手順で操作するといかがでしょうか?

excelのファイル→印刷→プロパティ(ボタン)
→ページ設定(タブ)→ページレイアウト「2ページ/枚」選択
→OK(ボタン)
印刷ダイアログ画面に戻るので
印刷対象のブック全体を選択
印刷ボタンを押す

これで私のPCではうまくいきましたよ...

QExcelのVBAでシート名を指定してシートを挿入(追加)したい。

変数の値をSheet名にしてシートを追加したいのですが、どのようにしたらいいのでしょうか?

Aベストアンサー

Sub test01()
Dim a As String
a = Range("a1")
a = "合計表3"
Workbooks("book1").Worksheets.Add
x = Worksheets.Count
MsgBox x
Workbooks("book1").Worksheets(x).Name = a
End Sub
aはどちらか採用してください。
MsgBox xは不用になれば削除して下さい。
まずSheetを1つ増やして、名前を好きなものに
変更すると言うイメージです。「好きな名前のシート
を作る」というイメージに囚われて、かって私もつまずきました。
それはSheetsコレクションに、Createなどするのでなく、
Addするという考えにあるようです。

Q[EXCEL]2つのシートを無駄なく1枚に両面印刷する方法を教えて下さい。

2つのシート(各1ページ)を用紙1枚に両面印刷することができず、苦労しております。
2つのシートを選択し、[印刷]→[プロパティ]→[両面印刷を設定]の手順で行っても各シート×1枚で印刷されてしまい、両面印刷ができません。
・2つのシートはレイアウトが違うため、1つのシートに合体できません。
・4つ~6つのシートの場合もあります。
・EXCELは2003ver
・キャノンのiR C3880
を使っています。たくさんの人に聞いても解決できなかったので、投稿しました。宜しくお願いします。

Aベストアンサー

Nアップ、両面印刷などでよく見かける質問ですが、エクセルの印刷設定はシート毎に設定が必要です。
複数選択した状態で印刷設定しても、実はアクティブになっているシートにしか設定はされていないのです。
試しにAシート、Bシートそれぞれに両面印刷に設定してから両シート選択して両面印刷してみて下さい。
多分うまくいくと思います。
シートがたくさんあると面倒かもしれませんが、最初に1枚1枚設定する必要があると思います。
プリンターの問題でうまく言ってない場合はスルーして下さい。

Q【EXCEL-VBA】シートの有無を確認してからワークシートを削除したい

お世話になっております。

ワークシートの有無を確認してからシートを削除するマクロを作りたいと思っています。
特定の名前のシートを削除するマクロを以前、こちらで頂いたので、
それをカスタマイズしようと思ったのですが、、、まだ実力不足でできませんでした。

以前いただいたマクロはこちらです
「EXCEL-VBA ワークシートを4枚削除するマクロを作成したい」
https://bitly.is/1g3AhR6

カスタマイズできなかった理由ですが、
確認するシート名がSheetAのA20、A21、A22にあります。

要するに取得したA20、A21、A22値を元にワークシートの有無を
確認しなければならないのですが、そのためのコードが書けませんでした。

すいませんが詳しい方、説明の上手な方、直接、コードで説明できる方、
教えて下さい。よろしくお願いします。

コードはリンク先のものを利用して頂いてもOKですし、
新規に書き上げて頂いてもOKです。

お手数ですが、よろしくお願いします。

追記
前回、教えて頂いたtatsu99さん、tom04さん、bonaronさん、
ありがとうございました。

お世話になっております。

ワークシートの有無を確認してからシートを削除するマクロを作りたいと思っています。
特定の名前のシートを削除するマクロを以前、こちらで頂いたので、
それをカスタマイズしようと思ったのですが、、、まだ実力不足でできませんでした。

以前いただいたマクロはこちらです
「EXCEL-VBA ワークシートを4枚削除するマクロを作成したい」
https://bitly.is/1g3AhR6

カスタマイズできなかった理由ですが、
確認するシート名がSheetAのA20、A21、A22にあります。

要する...続きを読む

Aベストアンサー

No3です。

https://oshiete.goo.ne.jp/qa/9543475.html
の関連質問だったのですね?

No.3は単純にシートを削除するだけで
Sheet1のA20~A22セルのシート名が存在しない場合のメッセージは表示させていませんでした。
↓のコードにしてみてください。

Sub Sample2()
Dim c As Range, k As Long, myStr As String, myFlg As Boolean
For Each c In Worksheets("Sheet1").Range("A20:A22")
myFlg = False
For k = Worksheets.Count To 2 Step -1
If Worksheets(k).Name = c Then
myFlg = True
Application.DisplayAlerts = False
Worksheets(k).Delete
Application.DisplayAlerts = True
End If
Next k
If myFlg = False Then
myStr = myStr & "[" & c & "]" & ","
End If
Next c
If myStr <> "" Then
MsgBox "Sheet" & Left(myStr, Len(myStr) - 1) & "はありませんでした。"
End If
End Sub

※ すべてのシートが存在した場合は
メッセージボックスは表示されません。m(_ _)m

No3です。

https://oshiete.goo.ne.jp/qa/9543475.html
の関連質問だったのですね?

No.3は単純にシートを削除するだけで
Sheet1のA20~A22セルのシート名が存在しない場合のメッセージは表示させていませんでした。
↓のコードにしてみてください。

Sub Sample2()
Dim c As Range, k As Long, myStr As String, myFlg As Boolean
For Each c In Worksheets("Sheet1").Range("A20:A22")
myFlg = False
For k = Worksheets.Count To 2 Step -1
If Worksheets(k).Name = c Then
...続きを読む

QEXCELで複数シートを1枚に印字する(プリンタはNEC製8450Nです)

EXCEL2013のデータをNEC製のマルチプリンタ8450Nに印刷する時のことで教えて下さい。 

2つののシート(向きは横:大きさはA3)を1枚の紙(A4)に印刷するよう指示しています。  

1枚目のシートは指示通りでA4の上半分にきちんと印刷されますが2枚目のシートはA4の下半分に印刷されず、改ページされA4横でまるまる1枚分印刷されてしまいます。

シートごとに設定をするとA4の上下にうまく収まってくれます。

シートが10枚とか20枚の時、枚数分の設定をすることになるのでしょうか?

設定時のどこかが悪いのかと思い、いろいろ試していますが思ったように印刷できません。

なにかご存知の方がおられましたら教えて下さい。

表現が下手で解り辛く申し訳ありません。

どうぞよろしくお願い致します。

Aベストアンサー

複数シートの割り付け印刷は、私もよく失敗しました。
すべてのシートで割り付け設定する必要があり、手間がかかるうえに10枚もあればほぼ間違いなく失敗してしまいます。

自分がやっている対応策ですが、一旦EXCELをPDFファイルにしてPDFファイルの印刷時に割り付けの設定しています。
EXCELでの割り付け設定は必要ありません。(縦とか横とか、基本的な印刷設定は必要と思います)
圧倒的に簡単で、印刷の失敗はほぼなくなりますので、おためしください。

EXCEL→PDFは
印刷したいシートを選択(複数選択可)しておきます。
「ファイル」タブをクリック →「エクスポート」を選択 → 「PDF/XPS ドキュメントの作成方法」を選択  で、PDF形式で保存してください。

QEXCEL VBA  特定シート以外のシート削除

同一のブック内に存在する複数シートのうち任意のシートのみを削除することはVBAで可能でしょうか?
(例)
 消したくないシート:TEMP1、TEMP2の2シート
 消したいシート:1、2、3....といった連番シート (VBAで作成したシート)
環境は、WIN XP PRO でEXCEL2003を使用しています。
宜しくお願い致します。

Aベストアンサー

Sub Sample()

Dim Sh As Worksheet

For Each Sh In Sheets
If Not (Sh.Name = "TEMP1" Or Sh.Name = "TEMP2") Then
Application.DisplayAlerts = False
Sh.Delete
Application.DisplayAlerts = True
End If
Next

End Sub

質問とは逆の判定のしかたですが、これではどうでしょうか?

Qエクセル ファイルの新規作成時にシート数を1枚に出来ないか?

エクセルファイルを人から送ってもらった時、
基本的にシートが何枚かあります。

そうすると、それぞれのシートに何か書かれているんじゃないかと
全部のシートをチェックする必要があり面倒です。

そこで私は、1枚のシートにしか書いていないときは、
他のシートを削除します。

この作業を簡単にするために、
ファイルの新規作成時に最初からシートが1枚だったら
良いなと思うのですが、そのような設定は出来ないのでしょうか?

Aベストアンサー

[ツール]→[オプション]→[全般]タブ
ここに、「新しいブックのシート数」というものがありますので、ここを1にして下さい。

QExcel 指定したフォルダから指定したファイルを、指定フォルダへ移すVBAを教えて頂けないですか?

指定フォルダ名、指定ファイル名は、管理シートに記載し指示する形です。またそのファイルを元のフォルダへ戻す指示も、管理シートを書き直すのではなくできたら嬉しいです。どなたかよろしくお願いいたします。

Aベストアンサー

No.6 の修正

上書き時にエラーが発生していました。
「Kill (先パス & "\" & Cells(行, 2).Value)」を次のように追加してください。
-----------------------------------------------------------------------------
Sub 送る()
Call 移動("送り")
End Sub

Sub 戻す()
Call 移動("戻し")
End Sub

Sub 移動(モード As String)
Dim 基本パス As String
Dim 元パス As String
Dim 先パス As String
Dim 行 As Long
Dim 回答 As Integer
基本パス = ThisWorkbook.Path & "\"
Sheets("管理シート").Select
For 行 = 2 To Cells(Rows.Count, 1).End(xlUp).Row
If モード = "送り" Then
元パス = 基本パス & Cells(行, 1).Value
先パス = 基本パス & Cells(行, 3).Value
Else
元パス = 基本パス & Cells(行, 3).Value
先パス = 基本パス & Cells(行, 1).Value
End If
If Dir(元パス & "\" & Cells(行, 2).Value) = "" Then
Range(Cells(行, 1), Cells(行, 3)).Select
回答 = MsgBox("元のファイルがありませんでした。" & Chr(13) & _
"飛ばしてして作業を続けますか?" & Chr(13) & Chr(13) & _
"はい : 飛ばして続行" & Chr(13) & Chr(13) & _
"いいえ : 全作業を中止して終了", vbDefaultButton2 + vbYesNo, モード)
If 回答 = vbNo Then Exit Sub
Else
If Dir(先パス & "\" & Cells(行, 2).Value) <> "" Then
Range(Cells(行, 1), Cells(行, 3)).Select
回答 = MsgBox("同名のファイルがありました。" & Chr(13) & _
"上書きしますか?" & Chr(13) & Chr(13) & _
"はい : 上書きして続行" & Chr(13) & Chr(13) & _
"いいえ : 上書きせず、飛ばして続行" & Chr(13) & Chr(13) & _
"キャンセル : 全作業を中止して終了", vbDefaultButton1 + vbYesNoCancel, モード)
If 回答 = vbCancel Then Exit Sub
If 回答 = vbYes Then
Kill (先パス & "\" & Cells(行, 2).Value)
Name 元パス & "\" & Cells(行, 2).Value As 先パス & "\" & Cells(行, 2).Value
End If
Else
Name 元パス & "\" & Cells(行, 2).Value As 先パス & "\" & Cells(行, 2).Value
End If
End If
Next
MsgBox ("終了しました")
End Sub
-----------------------------------------------------------------------------

No.6 の修正

上書き時にエラーが発生していました。
「Kill (先パス & "\" & Cells(行, 2).Value)」を次のように追加してください。
-----------------------------------------------------------------------------
Sub 送る()
Call 移動("送り")
End Sub

Sub 戻す()
Call 移動("戻し")
End Sub

Sub 移動(モード As String)
Dim 基本パス As String
Dim 元パス As String
Dim 先パス As String
Dim 行 As Long
Dim 回答 As Integer
基本パス = ThisWorkbook.Path & "\"
Sheets("管理シート").Select
...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング