下記のマクロは先ほど教えて頂いたマクロで
コピー元の指定シートとセル値をコピー先にコピペできます。
Sub Macro1()
Call 採光シートコピー範囲
Call 貼り付け
Call 採光データ削除
End Sub
張り付けた後に
コピー元のファイルが不要の為、マクロ「採光データ削除」を実行して、ファイルを削除したいのですが、削除対象のファイルが開いた状態なので、エラーメッセージが出て、ファイルを削除できません。
以前教えて頂いたコードをそのまま利用しており、コピー元のファイルのコピー範囲が完了するとこのファイルは閉じると思うのですが、なぜか、開いたままの状態です。
それぞれのマクロを書き込みますので、解決方法を教えてください。
Sub 採光シートコピー範囲()
Dim folderPath As String
Dim fileName As String
Dim ws As Worksheet
folderPath = ThisWorkbook.Path & "\"
'作業フォルダ内にはマクロを設定しているコピー先のブックとコピー元の
' 採光計算確認.xlsxの 2つ のExcelファイルしかありません。
fileName = Dir(folderPath & "*.xlsx?")
Do While fileName <> ""
If CheckName(fileName) = True Then Exit Do
fileName = Dir()
Loop
If fileName <> "" Then
'別ブック 採光計算書.xlsx
Set Wb2 = Workbooks.Open(folderPath & fileName)
On Error Resume Next
Set ws = Wb2.Worksheets("Table 2")
If Err.Number <> 0 Then
MsgBox "コピー元ブックの提出シートが見つかりません"
On Error GoTo 0
Wb2.Close False
End
End If
'セルの値を取得する
ws.Range("A1:W51").Copy
On Error GoTo 0
ws.Activate
ws.Range("A1:W51").Copy
Else
MsgBox "コピー元ブックが見つかりません": End
End If
End Sub
Private Function CheckName(ByVal fileName As String) As Boolean
CheckName = False
If fileName = ThisWorkbook.Name Then Exit Function
CheckName = True
If LCase(Right(fileName, 5)) = ".xlsx" Then Exit Function
If LCase(Right(fileName, 5)) = ".xlsm" Then Exit Function
CheckName = False
End Function
Sub 貼り付け()
Dim ws1 As Worksheet
Set Wb1 = Workbooks(1) 'このブック
On Error Resume Next
Set ws1 = Wb1.Worksheets("採光確認")
If Err.Number <> 0 Then
MsgBox "コピー先ブックの受付シートが見つかりません"
Application.CutCopyMode = False
On Error GoTo 0
If Not Wb2 Is Nothing Then Wb2.Close False
End
End If
Application.DisplayAlerts = False
Application.EnableEvents = False
ws1.Range("A1:W52").PasteSpecial Paste:=xlPasteValuesAndNumberFormats
Application.CutCopyMode = False
Application.EnableEvents = True
Application.DisplayAlerts = True
End Sub
Sub 採光データ削除()
Dim filePath As String
filePath = ThisWorkbook.Path & "\採光計算書.xlsx"
If Dir(filePath) <> "" Then
Kill filePath
End If
End Sub
以上となります。
よろしくお願いいたします。
No.6ベストアンサー
- 回答日時:
たぶんうまく動かないからレスが無いのかなと・・
閲覧があまりできないので
1つにまとめ簡単にデバッグしたコードです
試してみてください
あくまで素人の個人的意見ですがプロシージャを分けるのも良いけれど
繰り返し使う事もなくあまり複雑でもないし サブで定数(決まった値)を使っているのであれば、あまり意味ないと思いますよ
と この回答もあまり意味はありませんね
Sub Macro1()
Dim Wb1 As Workbook, Wb2 As Workbook
Dim ws As Worksheet, ws1 As Worksheet
Dim folderPath As String
Dim fileName As String
Const destination_sheet As String = "採光確認"
Const source_book As String = "採光計算書.xlsx"
Const source_sheet As String = "Table 2"
Set Wb1 = ActiveWorkbook
Set ws1 = objSht(Wb1, destination_sheet)
If ws1 Is Nothing Then
MsgBox "コピー先ブック:" & Wb1.Name & "の" & destination_sheet & "シートが見つかりません"
Exit Sub
End If
folderPath = ThisWorkbook.Path
fileName = Dir(folderPath & "\" & source_book)
If fileName <> "" Then
Application.ScreenUpdating = False
Set Wb2 = Workbooks.Open(folderPath & "\" & fileName)
Set ws = objSht(Wb2, source_sheet)
If ws Is Nothing Then
MsgBox "コピー元ブック:" & source_book & "の" & source_sheet & "シートが見つかりません"
Wb2.Close False
Set Wb2 = Nothing
Application.ScreenUpdating = True
End
End If
Else
MsgBox "コピー元ブック:" & source_book & "が見つかりません": End
End If
Application.DisplayAlerts = False
Application.EnableEvents = False
'セルの値を取得する
ws.Activate
ws.Range("A1:W51").Copy
ws1.Range("A1:W51").PasteSpecial Paste:=xlPasteValuesAndNumberFormats
If Not Wb2 Is Nothing Then Wb2.Close False
Application.CutCopyMode = False
Kill fileName
Application.EnableEvents = True
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Private Function objSht(bk As Workbook, sName As String) As Object
Dim obj As Object
On Error Resume Next
Set obj = bk.Worksheets(sName)
On Error GoTo 0
Set objSht = obj
End Function
#5は適当にコピペしただけなので 忘れてください
No.5
- 回答日時:
あれ?閉じてないから削除できないではなかったかのかな
書き直してほしいわけ?
Option Explicit
Dim Wb1 As Workbook
Dim Wb2 As Workbook
Dim ws1 As Worksheet
Sub Macro1()
Set Wb1 = ActiveWorkbook
On Error Resume Next
Set ws1 = objSht(Wb1, "採光確認")
If ws1 Is Nothing Then
MsgBox "コピー先ブックの受付シートが見つかりません"
Exit Sub
End If
Call 採光シートコピー範囲
Call 貼り付け
Call 採光データ削除
End Sub
Sub 採光シートコピー範囲()
Dim folderPath As String
Dim fileName As String
Dim ws As Worksheet
folderPath = ThisWorkbook.Path & "\採光計算確認.xlsx"
fileName = Dir(folderPath)
If fileName <> "" Then
Set Wb2 = Workbooks.Open(folderPath & fileName)
Set ws = objSht(Wb2, "Table 2")
If ws Is Nothing Then
MsgBox "コピー元ブックの提出シートが見つかりません"
Wb2.Close False
Set Wb2 = Nothing
End
End If
'セルの値を取得する
ws.Activate
ws.Range("A1:W51").Copy
Else
MsgBox "コピー元ブックが見つかりません": End
End If
End Sub
Private Function objSht(bk As Workbook, sName As String) As Object
Dim obj As Object
Set obj = bk.Worksheets(sName)
Set objSht = obj
End Function
Sub 貼り付け()
Application.DisplayAlerts = False
Application.EnableEvents = False
ws1.Range("A1:W52").PasteSpecial Paste:=xlPasteValuesAndNumberFormats
Application.CutCopyMode = False
If Not Wb2 Is Nothing Then Wb2.Close False
Set Wb2 = Nothing
Application.EnableEvents = True
Application.DisplayAlerts = True
End Sub
Sub 採光データ削除()
Dim bk As Workbook
Dim filePath As String
filePath = ThisWorkbook.Path & "\採光計算書.xlsx"
'念のため
For Each bk In Workbooks
If bk.FullName = filePath Then
bk.Close False
Exit For
End If
Next
If Dir(filePath) <> "" Then
Kill filePath
End If
End Sub
分ける必要性を感じないけれど 必要なのかもしれないから
分けています
Sub 採光データ削除()は単独でも実行可能なようにしています
No.4
- 回答日時:
提示されたマクロを格納しているのは、
①採光計算確認.xlsm でしょうか。
②採光計算確認.xlsm以外のブック
のどちらでしょうか。
私は②であると判断して、補足要求を行いましたが、
①でしょうか。
No.3
- 回答日時:
補足要求です。
1.コピー元/コピー先のブック名、シート名、セル位置の確認です。
下記であってますか。
コピー元のブック名:採光計算書.xlsx
コピー元のシート名:Table 2
コピー元セル:A1:W51
コピー先のブック名:不明
コピー先のシート名:採光確認
コピー先のセル:A1:W52
①コピー先のブック名が不明です。拡張子も含めて正しく、提示してください。
②コピー先のセル範囲は、A1:W51が正しいと思いますが、いかがでしょうか。(A1:W52は誤り)
2.コピー元のブック、コピー先のブックは、マクロのあるブックと同じフォルダに格納されている前提で良いですか。
3.現行のマクロをみると、マクロ実行時
コピー元のブックはクローズしている。(マクロがオープン)
コピー先のブックはオープンされている。(マクロはオープンしない)
となっていますが、それが望まれる仕様でしょうか。
コピー先のブックもクローズされている状態で、マクロを起動し、マクロがコピー先のブックを
オープンするようにすることも可能です。
4.コピー元のブックをオープンする時、ワイルドカード指定(*.xlsx?)
でファイル名を取得していますが、今回は、ファイル名が、"採光計算書.xlsx"
と決定しているので、直接そのファイルをオープンしたほうが良さそうです。
ワイルドカード指定にこだわる理由がなければ、直接ファイル名を指定してオープン
するようにしたいのですが、いかがでしょうか。
No.2
- 回答日時:
Wb2の宣言はモジュールレベルなのかな?
使いまわししているカモで
If Not Wb2 Is Nothing Then Wb2.Close False
下に一応加えた方が良いかも・・
Set Wb2 = Nothing
No.1
- 回答日時:
示されているコードについては突っ込みどころ満載ですが・・
対応策だけ・・・
>削除対象のファイルが開いた状態なので
原因が分かっているのなら・・処理レスポンスは置いときますが閉じればよいのでは?
コピペでの回答
ws1.Range("A1:W52").PasteSpecial Paste:=xlPasteValuesAndNumberFormats
Application.CutCopyMode = False
If Not Wb2 Is Nothing Then Wb2.Close False
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
エクセルのマクロについて教えてください。
Visual Basic(VBA)
-
Excelの時刻の不思議
Excel(エクセル)
-
エクセルのマクロについて教えてください。
Visual Basic(VBA)
-
-
4
エクセルのマクロについて教えてください。
Visual Basic(VBA)
-
5
エクセルのマクロについて教えてください。
Visual Basic(VBA)
-
6
【マクロ】1つのマクロの中に、ブック指定とシート指定が混在しても良いのですか?
Visual Basic(VBA)
-
7
Excelの数式について教えてください。
Excel(エクセル)
-
8
AIの登場でプログラマーたちが解雇されていますが
その他(プログラミング・Web制作)
-
9
VBAコードについて教えてください。
Visual Basic(VBA)
-
10
Excelのマクロについて教えてください。
Visual Basic(VBA)
-
11
Excelのマクロについて教えてください。
Visual Basic(VBA)
-
12
エクセルのマクロについて教えてください。
Visual Basic(VBA)
-
13
エクセルのマクロについて教えてください。
Visual Basic(VBA)
-
14
エクセルのVBAコードについて教えてください。
Visual Basic(VBA)
-
15
エクセルのマクロについて教えてください。
Visual Basic(VBA)
-
16
エクセルのマクロについて教えてください。
Visual Basic(VBA)
-
17
エクセルのマクロについて教えてください。
Visual Basic(VBA)
-
18
パソコン
C言語・C++・C#
-
19
Web画面の文字をVB6で取得したい
Visual Basic(VBA)
-
20
エクセルのマクロついて教えてください。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでセルの書式を変えずに文字...
-
【ExcelVBA】5万行以上のデー...
-
【VBA】 結合セルに複数画像と...
-
VBA 別ブックからコピペしたい...
-
[Excel VBA]特定の条件で文字を...
-
エクセルのマクロについて教え...
-
【ExcelVBA】インデックスが有...
-
Excel 範囲指定スクショについ...
-
VBA 別ブックから条件に合うも...
-
配列のペースト出力結果の書式...
-
【VBA】スペースが入っていない...
-
VBA 入力箇所指定方法
-
エクセルのマクロについて教え...
-
【VBA】値を変更しながら連続で...
-
エクセル タブの下のメニューを...
-
Web画面の文字をVB6で取得したい
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
EXCEL vbaでシート上に配置した...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 別ブックからコピペしたい...
-
VBA 別ブックから条件に合うも...
-
vba 別ブックに転記
-
【ExcelVBA】インデックスが有...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセル タブの下のメニューを...
-
配列のペースト出力結果の書式...
-
Web画面の文字をVB6で取得したい
-
エクセルのマクロについて教え...
-
エクセルのマクロついて教えて...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
[Excel VBA]特定の条件で文字を...
-
エクセルのマクロについて教え...
-
VBA 入力箇所指定方法
-
EXCEL vbaでシート上に配置した...
-
エクセルのマクロについて教え...
おすすめ情報
1.コピー元/コピー先のブック名、シート名、セル位置の確認です。
下記であってますか。
コピー元のブック名:採光計算書.xlsx
コピー元のシート名:Table 2
コピー元セル:A1:W51
以上全てあっております。
コピー先のブック名:採光計算確認.xlsm
コピー先のシート名:採光確認
コピー先のセル:A1:W51 が正しいです。
2.コピー元のブック、コピー先のブックは、マクロのあるブックと同じフォルダに格納されている前提で良いですか。
はい、同じフォルダ内に格納されております。
コピー元及びコピー先のファイル名は固定です。
よろしくお願いいたします。
ご親切にありがとうございます。
教えて頂いたコードを全て設定し、
マクロを実行しましたが、画像のエラーが出てしまい、実行できませんでした、
何度も申し訳ありません。
よろしくお願いいたします。
補足要求です。
1.コピー元/コピー先のブック名、シート名、セル位置の確認です。
下記であってますか。
コピー元のブック名:採光計算書.xlsx
コピー元のシート名:Table 2
コピー元セル:A1:W51
はい、以上で全てあっております。
コピー先のブック名:採光計算確認.xlsm になります。
コピー先のシート名:採光確認
コピー先のセル:A1:W51 で間違いでした。
コピー元及びコピー先のファイル名は固定です。
よろしくお願いいたします。
先ほど補足をさせて頂きましたが
提示されたマクロを格納しているのは、
①採光計算確認.xlsm です。
よろしくお願いいたします。
何時も助けて頂きましてありがとうございます。
全て上手くできました。感謝、感謝です。