• ベストアンサー

Excel2003のVBAでエクセルファイルとして保存

こんにちわ。 Excel2003のVBAで、シート1に採点用のフォーマットを作成し、採点ボタンを押したら別の場所(フォルダ)に別のファイル(.xls形式)として採点結果を保存したいと考えています。過去に似たような質問があったのでそれを参考にしたのですが、コードの意味がほとんど分かりません。下記のコードで実行したところ、エラーが出てしまいます。どこが悪いのか教えていただけないでしょうか? エラー箇所は BkName = OldWkbook.Sheets(StName1).Range("K1").Value です。”インデックスが有効範囲にありません”と表示されます。 例)   Dim FileName As String Dim FileExt As String Dim BkName As String Dim OldWkbook As Workbook Dim NewWkbook As Workbook Const StName1 As String = "ko" ' Application.DisplayAlerts = False Set OldWkbook = ActiveWorkbook ' 'ファイル名を取得 BkName = OldWkbook.Sheets(StName1).Range("K1").Value FileName = BkName & Format(Now, "yyyy-mm") & ".XLS" ' FileName = InputBox(FileName & "と言う名前で保存します" & vbCr & "よろしければこのままOKをクリックしてください", "保存ファイル名の確認", FileName) If FileName = "" Then Exit Sub Else If Right(FileName, 4) <> ".XLS" Then MsgBox "ファイル名が異常です。" Exit Sub End If End If ' OldWkbook.Sheets(Array(StName1)).Copy Set NewWkbook = ActiveWorkbook 'シートの保護を解除 Worksheets("sheet1").Unprotect For wIx = NewWkbook.Sheets(1).Shapes.Count To 1 Step -1 If Left(NewWkbook.Sheets(1).Shapes(wIx).Name, 6) = "Button" Then 'ボタンのみ削除 NewWkbook.Sheets(1).Shapes(wIx).Delete '←1ではなくwIxです End If Next NewWkbook.Sheets(1).Name = StName1 ' FileName = "D:\保存\計画\" & FileName ' If Dir(FileName) <> "" Then '##ファイルが既に存在する If MsgBox("既に指定のファイルが存在します。 置き換えますか?", vbOKCancel, "置き換えの確認") = vbCancel Then NewWkbook.Close savechanges:=False '##保存せずに終了 Exit Sub End If '##指定ファイル置き換え保存 NewWkbook.SaveAs FileName:=FileName Else '##ファイルを新規保存 NewWkbook.SaveAs FileName:=FileName End If ' NewWkbook.Close savechanges:=False Application.DisplayAlerts = True End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.7

 'コピー先   With ActiveWorkbook     'シート名変更     '.Sheets(1).Name = StName1     '.Sheets(2).Name = StName2     '.Sheets(3).Name = StName3     '.Sheets(4).Name = StName4     'シート2,4のボタンを削除     '.Sheets(2).Shapes(1).Delete     '.Sheets(4).Shapes(1).Delete     '但し、シート上にボタン以外のObjectが存在する場合は、以下のように     'ボタンのみ削除する必要がある。 '↑上記は不要ですので、削除して以下のコードのみで試してみてください。     'この部分は私も分からないので、自分で変更してくださいね。     For wIx = Sheets(2).Shapes.Count To 1 Step -1       If Left(.Sheets(2).Shapes(wIx).Name, 6) = "Button" Then 'ボタンのみ削除         .Sheets(2).Shapes(wIx).Delete       End If     Next     For wIx = Sheets(4).Shapes.Count To 1 Step -1       If Left(.Sheets(4).Shapes(wIx).Name, 6) = "Button" Then 'ボタンのみ削除         .Sheets(4).Shapes(wIx).Delete       End If     Next     'シートの保護     .Sheets(1).Protect     .Sheets(2).Protect     .Sheets(3).Protect     .Sheets(4).Protect   End With

tierra31
質問者

補足

すみません!!  If Left(.Sheets(2).Shapes(wIx).Name, 6) = "Button" Then の .Sheets(2)で「参照が不正または不完全です」と表示されてしまいます・・。

その他の回答 (6)

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.6

'シート上何のObjectが存在するか分からないので、 '自分で、研究してくださいね。(以下に例を書いてあるので) Sub test()   Dim wIx     As Integer   Dim FileName  As String   Dim FileExt   As String   Dim BkName1   As String   Dim BkName2   As String   Dim OldWkbook  As Workbook   Dim NewWkbook  As Workbook   Const StName1  As String = "適材適所グラフ"   Const StName2  As String = "適材適所回答"   Const StName3  As String = "適性検査III回答"   Const StName4  As String = "適性検査IIIグラフ"   '   'コピー元シートの保護を解除   Worksheets("適材適所グラフ").Unprotect   Worksheets("適材適所回答").Unprotect   Worksheets("適性検査III回答").Unprotect   Worksheets("適性検査IIIグラフ").Unprotect      Application.DisplayAlerts = False   Set OldWkbook = ActiveWorkbook   '   'ファイル名を取得   BkName1 = OldWkbook.Sheets(StName3).Range("J1").Value   BkName2 = OldWkbook.Sheets(StName3).Range("K1").Value   FileName = BkName1 & Format(".") & BkName2 & Format(Now, "yyyy-mm-dd") & ".xls"   '   FileName = InputBox(FileName & "と言う名前で保存します" & vbCr & "よろしければこのままOKをクリックしてください", "保存ファイル名の確認", FileName)   If FileName = "" Then     Exit Sub   Else     If Right(FileName, 4) <> ".xls" Then       MsgBox "ファイル名が異常です。"       Exit Sub     End If   End If      OldWkbook.Sheets(Array(StName1, StName2, StName3, StName4)).Copy      Set NewWkbook = ActiveWorkbook   'コピー先   With ActiveWorkbook     'シート名変更     .Sheets(1).Name = StName1     .Sheets(2).Name = StName2     .Sheets(3).Name = StName3     .Sheets(4).Name = StName4     'シート2,4のボタンを削除     .Sheets(2).Shapes(1).Delete     .Sheets(4).Shapes(1).Delete     '但し、シート上にボタン以外のObjectが存在する場合は、以下のように     'ボタンのみ削除する必要がある。     'この部分は私も分からないので、自分で変更してくださいね。     For wIx = Sheets(1).Shapes.Count To 1 Step -1       If Left(.Sheets(1).Shapes(wIx).Name, 6) = "Button" Then 'ボタンのみ削除         .Sheets(1).Shapes(wIx).Delete       End If     Next     For wIx = Sheets(4).Shapes.Count To 1 Step -1       If Left(.Sheets(4).Shapes(wIx).Name, 6) = "Button" Then 'ボタンのみ削除         .Sheets(4).Shapes(wIx).Delete       End If     Next     'シートの保護     .Sheets(1).Protect     .Sheets(2).Protect     .Sheets(3).Protect     .Sheets(4).Protect   End With   '   FileName = "C:\採点結果\" & FileName   '   If Dir(FileName) <> "" Then     '##ファイルが既に存在する     If MsgBox("既に指定のファイルが存在します。 置き換えますか?", vbOKCancel, "置き換えの確認") = vbCancel Then       NewWkbook.Close savechanges:=False       '##保存せずに終了       Exit Sub     End If     '##指定ファイル置き換え保存     NewWkbook.SaveAs FileName:=FileName   Else     '##ファイルを新規保存     NewWkbook.SaveAs FileName:=FileName   End If   '   NewWkbook.Close savechanges:=False   Application.DisplayAlerts = True   '   'コピー元シートの保護   Worksheets("適材適所グラフ").Protect   Worksheets("適材適所回答").Protect   Worksheets("適性検査III回答").Protect   Worksheets("適性検査IIIグラフ").Protect End Sub

tierra31
質問者

補足

ありがとうございます! Sheets(3).Name = StName3 ここだけオートメーションエラーと表示されてしまいます・・。なぜ1、2、が平気でここだけなのでしょうか? .Sheets(2).Shapes(1).Delete ここでアプリケーション定義またはオブジェクトのエラーですと表示されます・・。

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.5

以下のように追加・変更してください。   Const StName1  As String = "Sheet1"   Const StName2  As String = "Sheet2"   Const StName3  As String = "Sheet3"   Const StName4  As String = "Sheet4"   OldWkbook.Sheets(Array(StName1, StName2, StName3, StName4)).Copy

tierra31
質問者

補足

何度も答えていただき本当にありがとうございます!! あともう二点ほど聞きたい箇所があります。 Dim FileName As String Dim FileExt As String Dim BkName1 As String Dim BkName2 As String Dim OldWkbook As Workbook Dim NewWkbook As Workbook Const StName1 As String = "適材適所グラフ" Const StName2 As String = "適材適所回答" Const StName3 As String = "適性検査III回答" Const StName4 As String = "適性検査IIIグラフ" 'シートの保護を解除 Worksheets("適性検査III回答").Unprotect Worksheets("適材適所回答").Unprotect Application.DisplayAlerts = False Set OldWkbook = ActiveWorkbook ' 'ファイル名を取得 BkName1 = OldWkbook.Sheets(StName3).Range("J1").Value BkName2 = OldWkbook.Sheets(StName3).Range("K1").Value FileName = BkName1 & Format(".") & BkName2 & Format(Now, "yyyy-mm-dd") & ".xls" ' FileName = InputBox(FileName & "と言う名前で保存します" & vbCr & "よろしければこのままOKをクリックしてください", "保存ファイル名の確認", FileName) If FileName = "" Then Exit Sub Else If Right(FileName, 4) <> ".xls" Then MsgBox "ファイル名が異常です。" Exit Sub End If End If OldWkbook.Sheets(Array(StName1, StName2, StName3, StName4)).Copy Set NewWkbook = ActiveWorkbook 'ボタンを削除 For wIx = NewWkbook.Sheets(1).Shapes.Count To 1 Step -1 If Left(NewWkbook.Sheets(1).Shapes(wIx).Name, 6) = "Button" Then 'ボタンのみ削除 NewWkbook.Sheets(1).Shapes(wIx).Delete End If Next NewWkbook.Sheets(1).Name = StName1 Sheets(1).Protect ' FileName = "C:\採点結果\" & FileName ' If Dir(FileName) <> "" Then '##ファイルが既に存在する If MsgBox("既に指定のファイルが存在します。 置き換えますか?", vbOKCancel, "置き換えの確認") = vbCancel Then NewWkbook.Close savechanges:=False '##保存せずに終了 Exit Sub End If '##指定ファイル置き換え保存 NewWkbook.SaveAs FileName:=FileName Else '##ファイルを新規保存 NewWkbook.SaveAs FileName:=FileName End If ' NewWkbook.Close savechanges:=False Application.DisplayAlerts = True 'シートの保護 Worksheets("適性検査III回答").Protect End Sub 1)シート2とシート4にあるボタンだけ削除したいです。 2)新しく保存したシートにもシート保護したくてコードを追加したのですが機能しません・・。

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.4

以下のように変更してみてください。   OldWkbook.Sheets(Array(StName1)).Copy   Set NewWkbook = ActiveWorkbook    '  'シートの保護を解除 '  Worksheets("sheet1").Unprotect '  'ボタンを削除 '  For wIx = NewWkbook.Sheets(1).Shapes.Count To 1 Step -1 '    If Left(NewWkbook.Sheets(1).Shapes(wIx).Name, 6) = "Button" Then 'ボタンのみ削除 '      NewWkbook.Sheets(1).Shapes(wIx).Delete '←1ではなくwIxです '    End If '  Next   '上記のコードは、コピー元からコピー先にコピーすると「ボタン」までコピーされるので   'その「ボタン」を削除するコードです。   '「ボタン」が1個しかないなら、以下のように変更してもいいです。    ↓   ActiveSheet.Shapes(1).Delete      NewWkbook.Sheets(1).Name = StName1   '   FileName = "D:\保存\計画\" & FileName '←保存先のフォルダも違うなら変更する必要がある

tierra31
質問者

補足

ご回答ありがとうございます。 実行したところ、保存できました!! ですが、これを一つのシートではなく複数のシートを保存したいのですが可能でしょうか? マクロを実行したブックには全部で4つのシートがあり、先ほどのコードで実行したら、そのマクロ(採点ボタン)があるシートしか保存されていなかったので、マクロを実行したら全4つのシートを保存したいと考えています。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.3

提示されたコードは質問者さんの環境に合わせて修正したものですか? 或いは過去ログからそのままコピペして実行したのですか?

tierra31
質問者

補足

ご回答ありがとうございます。 過去ログからコピペしたものなので、ANo.1さん、ANo.2さんが指摘している通り、"ko"というシートが存在していませんでした。ただ、存在しているシート名にしてもANo.1さんに補足したエラーが表示されてしまいました。

  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.2

分からないから、人に聞く のでは、進歩がありません。 まずは、使われている命令について、調べてください。 どこが悪いのかは、エラー行がでていますよね。 ご自分のワークブックと、拾ってきたVBAの環境が異なれば、 実行時にエラーが出るのは当然です。 "ko"というシートが存在しないのでは??

tierra31
質問者

補足

ご回答ありがとうございます。 仰る通り、"ko"というシートが存在していませんでした。

  • higekuman
  • ベストアンサー率19% (195/979)
回答No.1

マクロを実行したワークブックに、ko という名前のワークシートは存在しますか?

tierra31
質問者

補足

ご回答ありがとうございます。 koというワークシートが存在していなかったため、マクロを実行したワークブックにあるシート名にして実行したところ、 NewWkbook.Sheets(1).Shapes(wIx).Delete ”アプリケーション定義またはオブジェクト定義のエラー”と表示されてしまいます・・。

関連するQ&A

  • エクセル VBA シート保存ボタン

    Sheet上にボタンを作成 ボタンを押すと保存するようにしています! 以前ここでSheet2枚をコピー出来るような 記述教えてもらったのですが・・ 1枚ならどう変化して良いか・・ 記述を書きましたが 何処が違うか教えて下さい! Private Sub CommandButton1_Click()   Dim FileName  As String   Dim FileExt   As String   Dim BkName   As String   Dim OldWkbook  As Workbook   Dim NewWkbook  As Workbook   Const StName1  As String = "ko"      '   Application.DisplayAlerts = False   Set OldWkbook = ActiveWorkbook   '   'ファイル名を取得   BkName = OldWkbook.Sheets(StName1).Range("A1").Value   FileName = BkName & Format(Now, "yyyy-mm") & ".XLS"   '   FileName = InputBox(FileName & "と言う名前で保存します" & vbCr & "よろしければこのままOKをクリックしてください", "保存ファイル名の確認", FileName)   If FileName = "" Then     Exit Sub   Else     If Right(FileName, 4) <> ".XLS" Then       MsgBox "ファイル名が異常です。"       Exit Sub     End If   End If   '   OldWkbook.Sheets(Array(StName1)).Copy   Set NewWkbook = ActiveWorkbook   For wIx = 1 To NewWkbook.Sheets(1).Shapes.Count     NewWkbook.Sheets(1).Shapes(wIx).Delete    Next   NewWkbook.Sheets(1).Name = StName1   '   FileName = "D:\保存\計画\" & FileName   '   If Dir(FileName) <> "" Then     '##ファイルが既に存在する     If MsgBox("既に指定のファイルが存在します。 置き換えますか?", vbOKCancel, "置き換えの確認") = vbCancel Then       NewWkbook.Close savechanges:=False       '##保存せずに終了       Exit Sub     End If     '##指定ファイル置き換え保存     NewWkbook.SaveAs FileName:=FileName   Else     '##ファイルを新規保存     NewWkbook.SaveAs FileName:=FileName   End If   '   NewWkbook.Close savechanges:=False   Application.DisplayAlerts = True End Sub 教えて下さい!

  • VBA 保存

    保存ボタンを作成してファイルに飛ぶように させていますが…どうしてもエラーになります! エラー表示内容> 実行時エラー1004 シートの名前を他のシート、Visual Basicで参照される オブジェクト ライブラリまたは ワークシートと同じ名前に変更することはできません。 下記は実際の記述です。 Private Sub 保存_Click() Dim FileName As String Dim FileExt As String Dim BkName As String Dim OldWkbook As Workbook Dim NewWkbook As Workbook Const StName1 As String = "計画 グラフ" Const StName2 As String = "ケア一覧" ' Application.DisplayAlerts = False Set OldWkbook = ActiveWorkbook ' 'ファイル名を取得 BkName = OldWkbook.Sheets(StName1).Range("D1").Value FileName = BkName & Format(Now, "yyyy-mm-dd") & ".XLS" ' FileName = InputBox(FileName & "と言う名前で保存します" & vbCr & "よろしければこのままOKをクリックしてください", "保存ファイル名の確認", FileName) If FileName = "" Then Exit Sub Else If Right(FileName, 4) <> ".XLS" Then MsgBox "ファイル名が異常です。" Exit Sub End If End If ' OldWkbook.Sheets(Array(StName1, StName2)).Copy Set NewWkbook = ActiveWorkbook For wIx = 1 To NewWkbook.Sheets(1).Shapes.Count NewWkbook.Sheets(1).Shapes(1).Delete '←シート1のボタンを削除 Next NewWkbook.Sheets(1).Name = StName1 NewWkbook.Sheets(2).Name = StName2 ' FileName = "D:\看護計画保存\" & FileName ' If Dir(FileName) <> "" Then '##ファイルが既に存在する If MsgBox("既に指定のファイルが存在します。 置き換えますか?", vbOKCancel, "置き換えの確認") = vbCancel Then NewWkbook.Close savechanges:=False '##保存せずに終了 Exit Sub End If '##指定ファイル置き換え保存 NewWkbook.SaveAs FileName:=FileName Else '##ファイルを新規保存 NewWkbook.SaveAs FileName:=FileName End If ' NewWkbook.Close savechanges:=False Application.DisplayAlerts = True End Sub

  • VBAでシートの保護

    初めまして。 私はWindowsXP、Excel2003のVBAでシートの保護、またそれの解除のコードを組んだのですが、以下のコードでは「○○○と言う名前で保存します。よろしければこのままOKをクリックしてください」の箇所でキャンセルを選択した時に、シートの保護を行いたいのですが、どのようなコードにすればよいてのでしょうか? 例)   Dim FileName As String Dim FileExt As String Dim BkName1 As String Dim BkName2 As String Dim BkName3 As String Dim OldWkbook As Workbook Dim NewWkbook As Workbook Const StName1 As String = "適材適所グラフ" Const StName2 As String = "適材適所回答" Const StName3 As String = "適性検査III回答" Const StName4 As String = "適性検査IIIグラフ" 'シートの保護を解除 Worksheets("適性検査III回答").Unprotect Worksheets("適材適所回答").Unprotect Application.DisplayAlerts = False Set OldWkbook = ActiveWorkbook ' 'ファイル名を取得 BkName1 = OldWkbook.Sheets(StName3).Range("L1").Value BkName2 = OldWkbook.Sheets(StName3).Range("L2").Value BkName3 = OldWkbook.Sheets(StName3).Range("L3").Value FileName = BkName1 & Format(".") & BkName2 & Format(".") & BkName3 & ".xls" ' FileName = InputBox(FileName & "と言う名前で保存します" & vbCr & "よろしければこのままOKをクリックしてください", "保存ファイル名の確認", FileName) If FileName = "" Then Exit Sub Else If Right(FileName, 4) <> ".xls" Then MsgBox "ファイル名が異常です。" Exit Sub End If End If OldWkbook.Sheets(Array(StName1, StName2, StName3, StName4)).Copy Set NewWkbook = ActiveWorkbook 'ボタンを削除 For wIx = NewWkbook.Sheets(1).Shapes.Count To 1 Step -1 If Left(NewWkbook.Sheets(1).Shapes(wIx).Name, 6) = "Button" Then 'ボタンのみ削除 NewWkbook.Sheets(1).Shapes(wIx).Delete End If Next NewWkbook.Sheets(1).Name = StName1 'コピー先シートの保護 Sheets(1).Protect Sheets(2).Protect Sheets(3).Protect Sheets(4).Protect FileName = "C:\採点結果\" & FileName If Dir(FileName) <> "" Then '##ファイルが既に存在する If MsgBox("既に指定のファイルが存在します。 置き換えますか?", vbOKCancel, "置き換えの確認") = vbCancel Then NewWkbook.Close savechanges:=False '##保存せずに終了 Exit Sub '##指定ファイル置き換え保存 End If NewWkbook.SaveAs FileName:=FileName Else '##ファイルを新規保存 NewWkbook.SaveAs FileName:=FileName End If NewWkbook.Close savechanges:=False Application.DisplayAlerts = True 'シートの保護 Worksheets("適性検査III回答").Protect Worksheets("適材適所回答").Protect End Sub

  • Excel2003VBAでファイルをコピーして指定場所に保存

    こんにちわ。 私は下記のコードで保存場所をCドライブに指定しているのですが、これを保存先が選べるようにするのはどうすれば良いですか? Application.DisplayAlerts = False Set OldWkbook = ActiveWorkbook ' 'ファイル名を取得 BkName1 = OldWkbook.Sheets(StName1).Range("E1").Value BkName2 = OldWkbook.Sheets(StName1).Range("E2").Value BkName3 = OldWkbook.Sheets(StName1).Range("E3").Value FileName = BkName1 & Format(".") & Format("試験結果") & Format(".") & BkName2 & Format(".") & BkName3 & ".xls" FileName = InputBox(FileName & "と言う名前で保存します" & vbCr & "よろしければこのままOKをクリックしてください", "保存ファイル名の確認", FileName) If FileName = "" Then Exit Sub Else If Right(FileName, 4) <> ".xls" Then MsgBox "ファイル名が異常です。" Exit Sub End If End If 'シートの保護を解除 Worksheets("Sheet1").Unprotect Worksheets("Sheet2").Unprotect Worksheets("Sheet3").Unprotect OldWkbook.Sheets(Array(StName1, StName2, StName3, StName4, StName5)).copy Set NewWkbook = ActiveWorkbook 'ボタンを削除 For wIx = NewWkbook.Sheets(1).Shapes.Count To 1 Step -1 If Left(NewWkbook.Sheets(1).Shapes(wIx).Name, 6) = "Button" Then 'ボタンのみ削除 NewWkbook.Sheets(1).Shapes(wIx).Delete End If Next NewWkbook.Sheets(1).Name = StName1 'コピー先シートの保護 Sheets(1).Protect Sheets(2).Protect Sheets(3).Protect Sheets(4).Protect Sheets(5).Protect FileName = "C:\" & FileName If Dir(FileName) <> "" Then '##ファイルが既に存在する If MsgBox("既に指定のファイルが存在します。 置き換えますか?", vbOKCancel, "置き換えの確認") = vbCancel Then NewWkbook.Close savechanges:=False '##保存せずに終了 'シートの保護 Worksheets("Sheet1").Protect Worksheets("Sheet2").Protect Worksheets("Sheet3").Protect Exit Sub '##指定ファイル置き換え保存 End If NewWkbook.SaveAs FileName:=FileName Else '##ファイルを新規保存 NewWkbook.SaveAs FileName:=FileName End If NewWkbook.Close savechanges:=False Application.DisplayAlerts = True 'シートの保護 Worksheets("Sheet1").Protect Worksheets("Sheet2").Protect Worksheets("Sheet3").Protect End Sub

  • エクセル シートのみ 保存

    過去の質問も参照しましたが 当てはまる物が無くて質問しました! シート上にボタンを作成して クリックするとそのシートのみ 指定するファイルにコピーさせたいです! 下記の部分で何処を変化させればよいのでしょうか? (1)~(2)の部分で困っています。 Private Sub CommandButton1_Click() Dim FileName As String Dim FileExt As String ’(1)の質問!○=の部分をSheets(セルのA1の値をファイル名に入れたいです) FileName = "○"& Format(Now, "yyyy-mm") & ".XLS" '==== FileName = InputBox(FileName & "と言う名前で保存します" & vbCr & "よろしければこのままOKをクリックしてください", "保存ファイル名の確認", FileName) If FileName = "" Then Exit Sub Else If Right(FileName, 4) <> ".XLS" Then MsgBox "ファイル名が異常です。" Exit Sub End If End If '==== FileName = "D:\保存\ケア\計画\" & FileName If Dir(FileName) <> "" Then '##ファイルが既に存在する If MsgBox("既に指定のファイルが存在します。 上書きしますか?", vbOKCancel, "上書きの確認") = vbCancel Then '##保存せずに終了 Exit Sub ElseIf ThisSheets.FullName = FileName Then '##現在開いているファイルと同じなら上書き保存 ThisSheets.Save Else '##指定ファイルを削除した後保存 Kill FileName ThisSheets.SaveCopyAs FileName:=FileName End If Else '##ファイルを新規保存 ThisSheets.SaveCopyAs FileName:=FileName End If ThisSheets.Saved = True End Sub (2)ThisSheets&指定してもう一つだけ  保存先にコピーしたいです!つまり  2つのSheetのみ保存させたいのですが・・  ここからどのようにしたら良いのか  お願いします!教えて下さい。  

  • エクセルVBAで保存がうまくいきません

    エクセル2000です。 下記のようなVBAを記述しました。 「はい」なら別名保存 「いいえ」なら上書き保存のつもりです。 問題点 Sheets("AAA").Range("I9")の文字列内に.(半角ピリオド)があるとファイルに拡張子がつきません。 どうしたらよいのでしょうか?非常に困っています。 Sub 保存ボタン() Dim myYN As Integer Dim DRtn As Boolean Dim fn As String, fn2 As String fn = Sheets("AAA").Range("I9").Value & "_保存" fn2 = ThisWorkbook.Name myYN = MsgBox("現在の入力内容を別名で保存しますか?" _ + Chr(&HD) + Chr(&HA) + "別名保存なら「はい」" _ + Chr(&HD) + Chr(&HA) + "上書保存なら「いいえ」を選択します。" _ + Chr(&HD) + Chr(&HA) + "", vbYesNoCancel + vbQuestion, " 別名保存") If myYN = vbCancel Then Exit Sub 'キャンセルなら終了 If myYN = vbNo Then fn = fn2 '上書保存ならファイル名はそのまま DRtn = Application.Dialogs(xlDialogSaveAs).Show(ARG1:=fn, ARG2:=1) If DRtn = False Then Exit Sub 'ファイル名を消されたらキャンセル ThisWorkbook.Save '保存 ThisWorkbook.Close '閉じる End Sub

  • 別フォルダに保存してあるテキストファイルを重複して強制保存したい

    別フォルダに保存してあるテキストファイルを重複して強制保存したいのですが、 Sub wsave() '書き出し後の保存 Dim myOldName As String Dim myNewName As String Sheets("AAA").Range("B2").Select If Selection = "" Then Exit Sub Else myOldName = Sheets("AAA").Range("H11") & "HPlist.txt" '変更元ファイル myNewName = Sheets("AAA").Range("H11") & Range("H16") '変更後のファイル名    If Len(Dir(myOldName)) > 0 Then Application.DisplayAlerts = False Name myOldName As myNewName Application.DisplayAlerts = True    End If End If   Application.Quit End Sub このままではエラー「既に同名のファイルが存在しています」と成り保存されないのです。 どなたかよい方法を教えていただけませんでしょうか?

  • 【Excel VBA】ファイルにヘッダーを挿入

    Excel VBAが初心者です、よろしくお願いします。 仕事で必要なため本を読みながら挑戦しております。 アドバイスをいただけると助かります。 【実現したいこと】 あるフォルダ内に格納された多くのファイルに、ヘッダーを挿入します。ヘッダー挿入後のファイルは、新ファイルで保存をします。 詳細は下記のとおりです。また、作りかけのプログラムも以下のとおりです。 【詳細】 ・あるフォルダ:0001tokyou、0002tokyou・・・1000tokyou・・・(数字4桁は固定+tokyou)というファイルが格納されております。ファイル数はそのときによって異なります。これらは拡張子が無いファイルですが、メモ帳で開くことができます。VBAではフォルダを選択できることとします。 ・ヘッダー:ヘッダーは1種類ですが、項目は10個あります。 ・新ファイル保存:ヘッダー挿入前のファイル「0001tokyou」にヘッダーを挿入したら、「0001kantou」という新しいファイルで保存します。従って、0001tokyouファイルは存在したままです。 【作りかけのプログラム】 Sub ヘッダ挿入と別名保存() Dim myFile As String Dim mydata As String Dim myArray() As String Dim fileName As String Dim folderName As String Dim i, j As Integer Dim header As Variant header = Array("氏名", "性別", "年齢", "生年月日", "住所", "マンション名", "備考1", "備考2", "備考3", "備考4") '挿入するヘッダーを定義する。 If Application.FileDialog(msoFileDialogFolderPicker).Show Then folderName = Application.FileDialog(msoFileDialogFolderPicker).SelectedItems(1) End If '加工するファイルが格納されているフォルダを指定する。 If folderName = "" Then MsgBox "フォルダが指定されませんでした。処理を終了します。", vbOKOnly Exit Sub End If '加工するファイルが格納されているフォルダが指定されなかった場合の処理です。 fileName = Dir(folderName & "\*") Do While fileName <> "" myFile = Workbooks.Open fileName:=folderName & "\" & fileName For i = 0 To 8 'ヘッダーを新ファイルに挿入する。 Cells(1, i + 1).Value = header(i + 1) Next i fileName = Dir() Loop End Sub アドバイスをいただけると助かります。 よろしくお願いします。

  • ExcelのVBAでブックを保存

    住所録Aと住所録Bがあります。 AとBを比較して、差異をを別ファイルに出力しようとしています。 比較元となるファイルは、AでもBでもかまいません。 比較、判定、ファイルへの出力部分は、省略していますが、保存 する場合は、どこに行うのがよいのですか bookですか。sheetですか。 両方で、SaveAsができまが、使い分けがあるのでしょうか。 どのように使い分けするのでしょうか。 書き方、使い方のおかしいところを指摘して頂くとありがたい です。 --------------------------------------------------------------------------------------------------- Option Explicit Sub test() Dim ret As Integer Dim row1 As Long Dim col1 As Long Dim row2 As Long Dim col2 As Long Dim myRtn As Boolean Dim fno1 As String Dim fno2 As String Dim OutBook As New Workbook Dim OutSheet As New Worksheet Dim OutFileName As String Dim cnt As Integer Dim I As Integer ret = MsgBox("処理を開始します。" + Chr(13) + Chr(10) + "よろしいですか。?", _ vbYesNo + vbQuestion) If ret = vbNo Then End End If myRtn = Application.Dialogs(xlDialogOpen).Show If myRtn = False Then MsgBox "[キャンセル]が選択されました" & vbCr & _ "処理を終了します" Exit Sub End If fno1 = Application.ActiveWorkbook.Name myRtn = Application.Dialogs(xlDialogOpen).Show If myRtn = False Then MsgBox "[キャンセル]が選択されました" & vbCr & _ "処理を終了します" Exit Sub End If fno2 = Application.ActiveWorkbook.Name Set OutBook = Workbooks.Add Set OutSheet = ActiveSheet OutBook.Worksheets(1).Name = "テスト" OutFileName = "テスト.xls" With Application.Workbooks(fno1).Worksheets(1) row1 = 1 col1 = 1 cnt = 1 Do While .Cells(row1, 1) <> "" 処理 (省略) Loop End With MsgBox "処理が終了しました。", vbOKOnly + vbInformation, "確認" Application.Workbooks(fno1).Close Application.Workbooks(fno2).Close OutSheet.SaveAs Filename:=OutFileName OutBook.SaveAs Filename:=OutFileName OutBook.Close End Sub --------------------------------------------------------------------------------------------------- OutSheet.SaveAs Filename:=OutFileName or OutBook.SaveAs Filename:=OutFileName のどちらでも保存ができます。 また、書き方、使い方のおかしいところを指摘して頂くとありがたいです。

  • VBAを使って名前をつけて保存をしたい(2)

    Sub 名前を付けて保存() Dim wSeq As String Dim wStr As String Dim Flnm As String Dim wFlnm As String ' Sheets("データー").Select Range("C3").Select ActiveWorkbook.Save Flnm = "\\Jooo\センタ\AA\CC" & Format(Date, "【mmdd】") & ".xls" If Flnm = "False" Then Exit Sub End If ' wSeq = 0 ExitFlg = False wFlnm = Flnm Do While ExitFlg = False If Dir(Flnm) <> "" Then '存在したら、連番を加算 wSeq = wSeq + 1 wStr = "(" & wSeq & ")" Flnm = Left(wFlnm, Len(wFlnm) - 4) & wStr & ".xls" Else '存在しない時、保存 ActiveWorkbook.SaveAs Filename:=Flnm ExitFlg = True End If Loop End Sub 先日回答者の方から上記コードを教えてもらい助かっているんですが、少し不都合でてきまして、上記を実行すると最初にCC【1022】という名前でフォルダに保存され、二回目に実行するとCC【1022】(1)という名前で同じフォルダに保存され、三回目に実行するとCC【1022】(2)というように連番で同じフォルダに保存されるんですが、一番最初に保存されたCC【1022】を削除して(どんどんBookが溜まっていくのを防ぐ為)四回目に実行すると【1022】(3)ではなく最初のCC【1022】の名前で保存されてしまいます。【1022】を削除してもCC【1022】(3)で保存されるようにするには、コードをどの様にかえたらいいでしょうか?