「みんな教えて! 選手権!!」開催のお知らせ

いつもお世話になっております
遣りたいことは 

特定のシートを別々に保存
フォルダも作成して特定のシート名で作成する

Fn = Worksheets(ssobj) 個々の部分でエラーになります。
わかる方教えてくれませんでしょぅか



Sub dds()
Dim wsh As Object
Dim fso As Object
Dim ssobj As Worksheet
Dim sobj As String
Dim ary
Dim Fn As String

Set fso = CreateObject("Scripting.FileSystemObject")

ary = Array("A001", "Sheet2")

For Each ssobj In Worksheets(ary)

ssobj.Copy

Application.DisplayAlerts = False


Fn = Worksheets(ssobj)

If Not (fso.FolderExists(Fn)) Then

ActiveWorkbook.Fn Filename:= _
fso.Buildpath(foldername, _
fso.getbasename(Fn))

Application.DisplayAlerts = True

ActiveWorkbook.Close





End If

Next
Set fso = Nothing


End Sub

A 回答 (3件)

こういうことでしょうか。


あなたのマクロを修正してみました。

Option Explicit

Sub dds()
Dim wsh As Object
Dim fso As Object
Dim ssobj As Worksheet
Dim sobj As String
Dim ary
Dim Fn As String
Dim FolderName As String
Dim newWB As Workbook
Set fso = CreateObject("Scripting.FileSystemObject")

ary = Array("A001", "Sheet2")

For Each ssobj In Worksheets(ary)

Fn = ssobj.name

FolderName = ThisWorkbook.Path & "\" & Fn
If Not (fso.FolderExists(FolderName)) Then
Application.DisplayAlerts = False
fso.createfolder (FolderName)
Set newWB = Workbooks.Add(xlWBATWorksheet)
ssobj.Copy before:=newWB.Worksheets(1)
newWB.Worksheets(2).Delete
newWB.SaveAs (FolderName & "\" & Fn)
newWB.Close
Application.DisplayAlerts = True
End If

Next
Set fso = Nothing
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございました。
思い通りに実行することができました。

お礼日時:2021/11/10 12:31

こんにちは



>Fn = Worksheets(ssobj) 個々の部分でエラーになります。
「型が一致しません」というエラーではありませんか?
ミスが2つ含まれていると思われます。
ssobjはWorksheetオブジェクトのはずなので、
>Worksheets(ssobj)
自体が意味をなさないのと、変数Fnが文字列として宣言されているので、Worksheets(~)を代入しようとすることもおかしいです。

ついでながら、
>fso.FolderExists(Fn)
でフォルダの存在をチェックしようとしているのかもと想像しますけれど、そうであるならFnはフォルダパスのはず。
ですので、Fnには調べたいフォルダパスが代入されていなければならないことになります。

さらには、その後の
>so.Buildpath(foldername, fso.getbasename(Fn))
も意味をなしませんし、foldernameなんて変数がいきなり登場しているのでおかしなことになりそうです。
そもそもが、
>ActiveWorkbook.Fn
なんてメソッドは存在しないので、何をしたいのか不明ですけれど・・・

ご質問文の文章の内容から想像するなら…
 ・チェックするフォルダパスを作成
 ・そのフォルダの存在をチェック
   存在しない場合はフォルダを作成
 ・指定パスでブックを保存
のような手順になるものと思いますけれど…
    • good
    • 0
この回答へのお礼

いつもありがとうございます
fso.createfolder (FolderName)が抜けてました。
うまくいかくなと いろいろいじり
わけがわからなくなります。
すみませんです。

お礼日時:2021/11/10 12:32

そこは普通 Worksheet型の変数にSetステートメントですよね?


文字列型の変数に入れられるのは、

Fn = ssobj.Name

とかでしょ。
それに

ActiveWorkbook.Fn

.Fn ってメソッドやプロパティはないのでは?
    • good
    • 0
この回答へのお礼

いつもありがとうございます
なかなか変数でこまるときが
多々あります。
ありがとうございました。

お礼日時:2021/11/10 12:30

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


おすすめ情報