Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
RE.「Re: 元ファイルの形式のまま、担当名ごとに...」のsimpleさんへ
投稿日時: 22/11/15 18:22:25
投稿者: WinArrow
投稿者のウェブサイトに移動

https://www.moug.net/faq/viewtopic.php?t=81849
 
の中の simpleさんレスのコード(makeWorkbookプロシジャ)を検証して結果、
1件目で、新しいブックを保存しているようです。
従って、2件目処理で、「既にファイルが存在する」ことになっていると思います。
 
再度、ご確認をお願いします。
 
 

回答
投稿日時: 22/11/15 19:11:34
投稿者: simple

おっしゃっていることを理解しかねています。
それぞれ別の担当者の名前を付けて保存するんですよね。
同一の担当者が複数いるという例外ケースのことを言われているんですか?

投稿日時: 22/11/15 20:14:04
投稿者: WinArrow
投稿者のウェブサイトに移動

simpleさん、掲示のコードを下記コピペします。
 

引用:
' k行目をtemplateにコピーして、ブックとして保存
Function makeWorkbook(k As Long, myName As String)
    Dim newBook As Workbook
    Dim fullPath As String
 
    ws.Rows(k).Copy
    template.Range("A2").PasteSpecial xlPasteValues
    template.Range("A2").PasteSpecial xlPasteFormats
     
    Application.CutCopyMode = False
    Application.Goto template.Range("A1")
     
    template.Name = myName
    template.Copy
    Set newBook = ActiveWorkbook
    fullPath = ThisWorkbook.Path & "\" & myName & ".xlsx"
    newBook.SaveAs fullPath, FileFormat:=xlOpenXMLWorkbook
    newBook.Close
End Function

このプロイジャは、k行1件だけの処理で間違いないですよね?
@
> ws.Rows(k).Copy
> template.Range("A2").PasteSpecial xlPasteValues
> template.Range("A2").PasteSpecial xlPasteFormats
このコードは、k行の1行を「template」シートのA2(2行目)に複写しています。
問題は、常に2行目になっていることです。
A
> template.Copy
> Set newBook = ActiveWorkbook
> fullPath = ThisWorkbook.Path & "\" & myName & ".xlsx"
> newBook.SaveAs fullPath, FileFormat:=xlOpenXMLWorkbook
> newBook.Close
 
このコードは、「template」シートを複写して、新しいブックとして保存しているコードです。
「template」シートには、1件だけ複写されているから、1件だけのファイルになると思います。
2件目が同一の担当者だったら、同一ファイル名になりませんか?
 
 

回答
投稿日時: 22/11/15 20:58:56
投稿者: simple

>2件目が同一の担当者だったら、同一ファイル名になりませんか?
そのような前提は置いていません。
もともとのシートのA列に各担当者名が書かれており、そのデータを
担当者ごとのブックに分離するという前提で進めています。
いずれにしても、この話にこれ以上の時間を割くつもりはありませんので、
ここまでにさせていただきます。

投稿日時: 22/11/15 21:37:29
投稿者: WinArrow
投稿者のウェブサイトに移動

1担当:1件という前提でしたか・・・・
質問者は、1担当が複数件あるとも、1件しかないとも説明がンかったので、
一応確認をしたところ、全体で10件以上という回答があったのですが、
既に遅かったか・・・・
 
大変失礼をしました。
 
閉じます。