下記のマクロは先ほど教えて頂いたマクロで
コピー元の指定シートとセル値をコピー先にコピペできます。
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も見ています
-
夏が終わったと感じる瞬間って、どんな時?
まだまだ暑い今日この頃。 しかしながら、もう夏は終わっている!……はず。 あなたが思う「夏が終わった!」エピソードを教えてください。
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
CDの保有枚数を教えてください
ひとむかし前はCDを買ったり借りたりが主流でしたが、サブスクで簡単に音楽が聴ける今、CDを手に取ることも減ってきたかと思います。皆さんは2024年現在、何枚くらいCDをお持ちですか?
-
【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
【お題】 ・世界最古のコンビニについて知ってる事を教えてください
-
「お昼の放送」の思い出
小学校から中学校、ところによっては高校まで お昼休みに校内放送で、放送委員が音楽とかおしゃべりとか流してましたよね。 最近は自分でもラジオができるようになって、そのクオリティもすごいことになっていると聞きます。
-
エクセルのマクロについて教えてください。
Visual Basic(VBA)
-
Excelの時刻の不思議
Excel(エクセル)
-
エクセルのマクロについて教えてください。
Visual Basic(VBA)
-
-
4
エクセルのマクロについて教えてください。
Visual Basic(VBA)
-
5
【マクロ】1つのマクロの中に、ブック指定とシート指定が混在しても良いのですか?
Visual Basic(VBA)
-
6
AIの登場でプログラマーたちが解雇されていますが
その他(プログラミング・Web制作)
-
7
エクセルのマクロについて教えてください。
Visual Basic(VBA)
-
8
Excelの数式について教えてください。
Excel(エクセル)
-
9
Excelのマクロについて教えてください。
Visual Basic(VBA)
-
10
エクセルのマクロについて教えてください。
Visual Basic(VBA)
-
11
VBAコードについて教えてください。
Visual Basic(VBA)
-
12
エクセルのマクロについて教えてください。
Visual Basic(VBA)
-
13
Excelのマクロについて教えてください。
Visual Basic(VBA)
-
14
エクセルのマクロについて教えてください。
Visual Basic(VBA)
-
15
エクセルのVBAコードについて教えてください。
Visual Basic(VBA)
-
16
エクセルのマクロについて教えてください。
Visual Basic(VBA)
-
17
パソコン
C言語・C++・C#
-
18
エクセルのマクロついて教えてください。
Visual Basic(VBA)
-
19
エクセルのマクロについて教えてください。
Visual Basic(VBA)
-
20
win10でexcel2003
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAのブックを開く方法...
-
【ExcelVBA】5万行以上のデー...
-
エクセルVBAで特定のセルの値を...
-
【ExcelVBA】dictionaryの重複...
-
エクセルでCDOを使ったメール送...
-
[Excel VBA]特定の条件で文字を...
-
Excel 範囲指定スクショについ...
-
【VBA】 結合セルに複数画像と...
-
【VBA】スペースが入っていない...
-
【VBA】値を変更しながら連続で...
-
エクセル タブの下のメニューを...
-
Web画面の文字をVB6で取得したい
-
VBA 入力箇所指定方法
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
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 です。
よろしくお願いいたします。
何時も助けて頂きましてありがとうございます。
全て上手くできました。感謝、感謝です。