• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel2010のVBAで起動時に連番表示&保存)

Excel2010のVBAで起動時に連番表示&保存

このQ&Aのポイント
  • Excel2010でVBAを使用して起動時に連番を表示し、保存する方法について教えてください。
  • Windows7に変更した2台のパソコンでExcel2010を使用していますが、FileSearchが使えないことが分かりました。代わりにFileSystemObjectを使用する方法を教えてください。
  • 保存ボタンを押すと指定した場所に指定したセルの文字を拾ってファイル名を表示させることができません。エラーが発生してしまいます。どうすれば解決できるでしょうか?

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

  • ベストアンサー
  • MSZ006
  • ベストアンサー率38% (390/1011)
回答No.1

ひとつ目「保存ファイル名の欄が空欄のまま」については、自信がないのですが、モジュール2の 保存ファイル名 = Application.GetSaveAsFilename(既定ファイル名) の行を、 保存ファイル名 = Application.GetSaveAsFilename(InitialFileName:= 既定ファイル名) としてみてください。 ふたつ目、「プログラミングによる Visual Basic プロジェクトへのアクセスは信頼性に欠けます」については、エクセル2010自体のセキュリティの設定の問題だと思います。下記の設定をしてみてください。 「ファイル」タブを選択 画面左の「オプション」を選択 ダイアログ左の「セキュリティ センター」を選択 ダイアログ右の「セキュリティ センターの設定」ボタンを選択 ダイアログ左の「マクロの設定」 を選択 ダイアログ右の「VBA プロジェクト オブジェクト モデルへのアクセスを信頼する」のチェックボックスにチェックを入れる

k-marichan
質問者

お礼

お礼遅くなってすみません。(昨日は休みだったもので・・・) やってみましたら無事動きました! ありがとうございます>< 最後エラーが出ましたが原因はシート保護によるもので、 ファイル名を拾う部分のセルをロック解除してシート保護をしたら そのエラーもなくなり無事うごきました! ありがとうございましたっ!!

その他の回答 (1)

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.2

こんにちは。お邪魔します。 ご提示の Sub ファイルに名前を付けて保存()、についてですが、 処理の内容としては、アクティブブックのコピーを取ってから、 VBAの記述と追加されているモジュールとシート上のShapeを削除する、 というものになっています。 わざわざVBIDE操作をする必要はないと思いますが、 VBAの記述を操作する、ということは、プログラムを書き換える、ということを意味します。 Excelを含む大抵のアプリケーションにおいて、容易に書換えが出来ない様に 保護する仕組みが予め用意してあります。 Excel VBAからVBAの内容を取得したり書き換えたりするには セキュリティレベルを大甘にして、 PCに紛れ込んでいるかも知れない善からぬプログラムに対しても無抵抗な状態 に設定を変更する必要があります。 ただ、セキュリティというのは、部分的に評価できるものではありませんから、 そうした無防備な状態であっても問題ないであろう環境もあろうかとは思います。 とはいえ、プログラムを書き換える、という意味においては、 決して他人に薦められるようなものではありませんし、 職場でそのようなプログラムを許可してもいいものか(私周辺では軒並み厳禁ですが)、 という議論も当然あることでしょう。 私個人としては、そういったコードは 他に方法がない非常に特殊な場合の、私的な用途に限って扱われるべきもの と考えています。 まぁでも人それぞれ事情はおありでしょうから、考えを押し付けるつもりもありません。 ただ、現実的な問題として、個々のPC環境について、 Excelのセキュリティ設定を変更しないと機能しない、というのでは、 ちょっと扱い難い、というか、できれば避けたい、のではないでしょうか。 以上のような考えを元に、平易な方法でも実現できることを 提案してみようと思います。  新規のブックを追加(予めシート数を合わせておく)  元となるブックのすべてのワークシートをループして   元となる各シートのセル範囲をコピーしたものを   新規ブックの対応するシートのセル範囲に貼り付ける   (シェープはコピーしない)  元となるブックのアクティブシートに対応する    シートを新規ブック側でアクティブにする  保存ファイル名を指定して.Save (閉じる?)  Excelを終了 というような処理内容です。 処理は少し増えますが、セキュリティ設定を変更する必要はありません。 >    但し、マクロコードとボタンを削除したものを保存する VBA(マクロ)とシェープ(ボタン)以外をコピーする、という風に解釈替えをしています。 (例外的に、グラフシートについては今回は無いものとして書いています。  あるならあるで、少し書き加えれば対応出来ますけれど) Application.GetSaveAsFilename の扱いは正しました。 > 実行時エラー1004 > プログラミングによるVisualBasicプロジェクトへのアクセスは信頼性に欠けます このエラーは起こりようがないように書きました。 xl2010では動作確認していますが、旧バージョンは未確認です。 何か問題があれば補足してみてください。 もしエラーが出る場合は、呼び出し元のボタンが、 フォームコントロールなのか、ActiveXコントロールなのか、によっても 対処が変わる場合があります。 なんだかんだ、標準的な、ベタな、処理しかしていませんが、 よりメンテし易い、質問した時にも答えられる人の多い、内容にはなっていると思います。 尚、Sub Auto_Open()、についてはこちらからは触れません。既に解決済と考えています。 ' ' --- Module2 ---- Sub ファイルに名前を付けて保存()   Dim 既定ファイル名 As String   Dim 保存ファイル名 As Variant   既定ファイル名 = FPath & "\" & Range("T1") & Format(Range("U1"), "0000") & Range("B1") & ".xls"   保存ファイル名 = Application.GetSaveAsFilename(既定ファイル名, "Excelファイル,*.xls")   If 保存ファイル名 = False Then     MsgBox "保存は中止されました"     Exit Sub   End If   Dim NewBook As Workbook   Dim oWsht As Worksheet   Dim nShtInNew As Long   Dim bCopyObj As Boolean   Dim i As Long   With ActiveWorkbook     nShtInNew = Application.SheetsInNewWorkbook  '  ●シート数     Application.SheetsInNewWorkbook = .Worksheets.Count  '  ●シート数     Set NewBook = Workbooks.Add  '  新規ブック     Application.SheetsInNewWorkbook = nShtInNew  '  ●シート数     bCopyObj = Application.CopyObjectsWithCells  '  ●コピー_オブジェクト?     Application.CopyObjectsWithCells = False  '  ●コピー_オブジェクト?     For Each oWsht In .Worksheets       i = i + 1       oWsht.Cells.Copy NewBook.Worksheets(i).Cells(1)  '  シートからシート、セル範囲をコピペ     Next     Application.CopyObjectsWithCells = bCopyObj  '  ●コピー_オブジェクト?     NewBook.Sheets(.ActiveSheet.Index).Activate   End With   Application.DisplayAlerts = False   NewBook.SaveAs 保存ファイル名, xlExcel8  '  新規に作成したブックを保存ファイル名で保存   Application.DisplayAlerts = True '  MsgBox "保存しました"   NewBook.Close   ' ' ブックとエクセル終了   Application.Quit End Sub

k-marichan
質問者

お礼

マクロでマクロを消す行為は・・・以前このデータを作ったときにも 言われました>< マクロとボタン以外をコピーするという発想!思いつきませんでした! セキュリティを変えないですむというのはいいですねっ。 現在のファイルは回答No.1で教えていただいた方法で無事動くようになったので現状は無事仕事が進みますが、 この先を考えてこちらのコードも試してみたいと思います。 現在のシートは3シートに分かれていて(複写状態になっています【=シート1!S5】のように) ファイル名はシート1から拾うようにしている。 シート2、シート3はシート1で従業員が書いた部分が表示されるようにしています。 ボタンもシート1にあるだけです。 まずは書いていただいたものであとで試してみようと思います^^ ありがとうございましたっ!

関連するQ&A