1

アクティブなワークブックのコピーを作成し、各コピーに異なる名前を付ける次のコードがあります。それはうまくいきますが、アクティブな状態を維持するには、コードを実行する元のワークシートが本当に必要です。

代わりに関数を使用するSaveCopyAsと、コピーされたファイルのファイル形式 (.xlsm) が正しくなくなり、関数のようにファイル形式をパラメーターとして指定できなくなりますsaveAs

http://msdn.microsoft.com/en-us/library/bb178003%28v=office.12%29.aspx

http://msdn.microsoft.com/en-us/library/office/ff841185%28v=office.15%29.aspx

    Sub makeCopies()
        Dim name As Range, team As Range
        Dim uName As String, fName As String, fFormat As String
        Dim location as string, nName as string

        location ="c:\test\"
        nName = "Test - Team "
        Set team = Names("Team").RefersToRange

        For Each name In team
            uName = nName & name.Value
            fName = location & uName
            fFormat = ThisWorkbook.FileFormat
            ActiveWorkbook.SaveAs FileName:=fName, FileFormat:=fFormat
        Next name
   End sub

私が考えることができる最善の方法は、最初に でコピーを作成してsaveCopyAsから各ファイルにアクセスし、 で正しいファイル形式で保存してsaveAsから閉じることですが、それは二重の作業を意味し、私はそれをするのが本当に嫌いです. よりスマートな方法はありますか?

4

1 に答える 1

0

これは私から機能します。SaveCopyAsワークブックをまったく同じ形式で保存します。

Sub makeCopies()
    Dim name As Range, team As Range
    Dim uName As String, fName As String, tempname As String
    Dim location As String, nName As String

    location = "C:\Test\"
    nName = "Test - Team "
    Set team = ThisWorkbook.Names("Team").RefersToRange

    For Each name In team
        uName = nName & name.Value
        fName = location & uName & "." & _
            Split(ThisWorkbook.FullName, ".") _
            (UBound(Split(ThisWorkbook.FullName, ".")))
        ThisWorkbook.SaveCopyAs fName
    Next name
End Sub

これはあなたがしようとしているものですか?試してテストしました。

于 2014-08-09T00:59:54.390 に答える