お世話になります。

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に関連する人気のQ&A

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

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

このQ&Aを見た人が検索しているワード

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

Q「Debug.Print i = i + 1」がFalseになる。

Sub test()
Dim i As Long
i = 0
Debug.Print i = i + 1
End Sub
を実行すると
False
がイミディエイトウインドウに表示されます。
理由が知りたいです。
よろしくお願いします。

Aベストアンサー

Printステートメントの outputlist並びの=が、代入式ではなく比較式と評価、実行されるためでしょうね。
演算子は式のリストに含められ、算術演算子、比較演算子、論理演算子等色々ありますが、代入記号はリスト項目にはありませんので、エラーとならないのは演算子とみなしているからですね。

Print i = i + 1 の結果は、0と1の比較なのでFalse
Print i = i とすると、0と0の比較なのでTrue
Print i, i + 1の場合は、変数と数式なので 0と1
という結果になるはずです。
 

QExcel VBAについて質問します Set wb = Workbooks.Open(myFdr &

Excel VBAについて質問します

Set wb = Workbooks.Open(myFdr & "\" & fname) '開き,wbとする。
cnt = Worksheets.Count
For n = 1 To cnt
i = i + 1 'カウント
wb.Sheets(n).Range("A2").Copy mb.Sheets("Sheet1").Cells(i, "A") 'コピー
wb.Sheets(n).Range("D2").Copy mb.Sheets("Sheet1").Cells(i, "B") 'コピー
Next

この内容を値のコピーにするにはどうすれば良いでしょうか
よろしくお願いします。

Aベストアンサー

Open メソッドの前に、
Set mb = ThisWorkbooks
が必要です。

cnt = Worksheets.Count
実害はないけれども、
これは、cnt = wb.Worksheets.Count とします。

>値のコピーにするにはどうすれば良いでしょうか
コードを逆さまにすればよいです。

mb.Sheets("Sheet1").Cells(i, "A").Value = wb.Sheets(n).Range("A2").Value

QWorkBooksをオープンさせずにシートにコピーしたい【EXCEL VBA】

よろしくお願いします。
今あるブックにあるシートを別のブックにコピーしたいのですが、今考えているのは

ここから////////
'ブックを開く
Workbooks.Open コピー元のブックのパス
'シートをコピー
Worksheets.Item(コピーするシート名).Copy _
after:=Workbooks(コピー先のブック名).Sheets(1)

'ブックを閉じる
Application.DisplayAlerts = False
Workbooks.Item(コピー元のブック名)Close True
Application.DisplayAlerts = True
ここまで////

なのですが、コピーものとのブックが複数ある時、画面がチラチラしてしまいます。ブックをオープンさせずにシートを他ブックにコピーさせる方法ってないでしょうか。
ご存知の方がいらっしゃいましたら、ご教授お願いします。

Aベストアンサー

画面のチラツキを押さえたいだけなら、画面の更新をやめればいいだけじゃないでしょうか?

ブックを開く前に
Application.ScreenUpdating = False
ブック閉じてから
Application.ScreenUpdating = True

QExcel VBAにて、xls.ファイルを指定の時間に勝手に開くというのは可能でしょうか?

Excel VBAにて、xls.ファイルを指定の時間に勝手に開くというのは可能でしょうか?

用途ですが、半月に一回仕事の工数をつけなければいけないのですが、
毎日勤務時間を控えておかなければ、思い出せません。
そこで毎日、ある時間に勝手にxls.が開けばなあと思うのですが。

検索しますが、なかなかヒットしません。
宜しくお願い致します。

Aベストアンサー

windowsのタスク機能を使用する方法は如何でしょうか。
スタート→プログラム→アクセサリ→システムツール→タスク→スケジュールされたタスクの追加→次へ→参照から該当ファイルを選択→以降はウィザードに従って下さい。

QFor Each...Next を使いブック内のシートを順次処理したいのですが。

エクセルのマクロ初心者なのですが、先に進まなくなってしまいました。よろしくお願いします。

ブック内にシート100枚位あります。(このシートはブック毎に変動します。)
各シート上にあるデーターで、それぞれ、そのシート上に図を作成したいのですが、どうしても、それぞれのシート上にどうやって図を出したらいいのかわかりません。
For Each 各シート In Worksheets
With 各シート
.Activate
Dim data As Range
Set data = Range("B3:C2500")
Charts.Add
ActiveChart.ChartType = xlXYScatterLines
ActiveChart.SetSourceData Source:=data
ActiveChart.Location Where:=xlLocationAsObject, Name:="sheet1"
ActiveChart.PlotArea.Select
With Selection.Border
.ColorIndex = 16
.Weight = xlThin
.LineStyle = xlContinuous
End With
Selection.Interior.ColorIndex = xlNone
End With
Next

あまり、内容も分かっていないのですが、このようなマクロを作ったのですが、図を”Sheet1”に出すことしかできませんでした。

どうにかして、それぞれのシート毎に図を出していきたいのですが、
アドバイスをいただけたらと思います。よろしくお願いします。

エクセルのマクロ初心者なのですが、先に進まなくなってしまいました。よろしくお願いします。

ブック内にシート100枚位あります。(このシートはブック毎に変動します。)
各シート上にあるデーターで、それぞれ、そのシート上に図を作成したいのですが、どうしても、それぞれのシート上にどうやって図を出したらいいのかわかりません。
For Each 各シート In Worksheets
With 各シート
.Activate
Dim data As Range
Set data = Range("B3:C2500")
...続きを読む

Aベストアンサー

こんにちは。

本来、埋め込みチャートは、以下のような書き方はしないのですが、グラフの中でも、散布図だけは特殊なコードのようです。掲示板の回答で何度か失敗した経験があります。自分の環境と他人の環境では思うように行かないのです。これは、Excelのバージョンによってコードが変わるからです。ともかく、試してください。

ただ、シートが100枚ほどで、このようなグラフ範囲を抱えて、ブックが持ちこたえられるのは、かなり疑問が残るところです。仮に、出来たとしても、繰り返さないほうがよいような気がします。

なお、ループ上の中で、  Dim data As Range と宣言しなおすのは、VBAではやめたほうがよいです。

Sub MakingChart()
Dim ws As Variant

Const MYRNG As String = "B3:C2500" 'データ範囲

For Each ws In ActiveWorkbook.Worksheets
Charts.Add
  With ActiveChart
  .ChartType = xlXYScatterLines
  .SetSourceData Source:=ws.Range(MYRNG), _
   PlotBy:=xlColumns
  .Location Where:=xlLocationAsObject, Name:=ws.Name
  End With
  With ActiveChart.PlotArea '仕切りなおし
    With .Border
    .ColorIndex = 16
    .Weight = xlThin
    .LineStyle = xlContinuous
    End With
    .Interior.ColorIndex = xlNone
  End With
 Next ws
End Sub

こんにちは。

本来、埋め込みチャートは、以下のような書き方はしないのですが、グラフの中でも、散布図だけは特殊なコードのようです。掲示板の回答で何度か失敗した経験があります。自分の環境と他人の環境では思うように行かないのです。これは、Excelのバージョンによってコードが変わるからです。ともかく、試してください。

ただ、シートが100枚ほどで、このようなグラフ範囲を抱えて、ブックが持ちこたえられるのは、かなり疑問が残るところです。仮に、出来たとしても、繰り返さないほうがよいよう...続きを読む


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

人気Q&Aランキング

おすすめ情報