マクロコードについて教えてください。
下記はExcelファイルをセルDF1値のファイル名にて指定フォルダー内に保存するコードですが
Sub 紙保存()
Application.GetSaveAsFilename InitialFileName:="\\nas-sp01\share\○○部\○○\○○\○○班用\★★★○○申請\" & Range("CF1 ").Value
End Sub
指定フォルダーを示して、
名前を付けて保存が立ち上がり、ファイル名も自動で表示されて
最後に「保存(S)をクリックしても
指定フォルダー内に保存されません。
何も保存されない状態です。
コードに問題があるのでしょうか?
以前、指定フォルダーを設定しないコードの時は
Sub 青紙保存()
Application.Dialogs(xlDialogSaveAs).Show Arg1:=Range("CF1 ").Value
End Sub
は自分で指定してフォルダー内に保存出来てました。
解決方法を教えてください。
よろしくお願いいたします。
尚、ファイルには1~22までのシートがあります、このファイル全体を保存したいです。
よろしくお願いいたします。
No.15ベストアンサー
- 回答日時:
>当面はこの方法でやっていきたいと思いますが、今回の内容で別案がありましたらお願いできますでしょうか?
申し訳ありませんが別案は思いつきません。
1点、気になるのは、Sub 電子保存()で上手く行かないのは、
InitialFileNameとFileFilterの指定が何かおかしいからと個人的には思っています。
念の為、以下の作業をトライしていただけませんでしょうか。
それでだめな場合は、ギブアップになります。
1.うまくいっているSub 紙保存()をそのままコピーしてSub 電子保存()
を作成。
2.Const folder As String="○○"の個所を、
「ダイナログ表示無のコードを設定するとCE1値でのファイル名で自動保存された」ときのフォルダー名をコピペして、○○へ貼り付ける。
(必ずコピペで行ってください)(うまく保存できた実績のあるフォルダー名です)
3.セルの位置をCF1からCE1に変更する。
(どちらが正しいのか私は判断できません。あなたの判断で正しいセル位置をしてしてください)
4.上記のマクロを実行する。
(FileFilterはSub 紙保存()をコピペするので、上手く行っている実績のあるものをそのまま使うことになります。)
数日間にわたり回答ありがとうございました。大変お手数をお掛けして申し訳ありませんでした。貴殿の最後の回答で設定すると上手くいきましたが、何故か、電子保存先のフォルダ指定をするとファイル名が表示されません、やはり、システム側の関係かもしれません。本当にありがとうございました。
後日、類似の質問をさせて頂こうと持ってます。もしよろしければ、又、お付き合いをお願い致します。
No.14
- 回答日時:
>お世話になっております。
ダイナログ表示無のコードを設定するとCE1値でのファイル名で自動保存されました。現状、上記の方法しかないようなので、その方法で妥協できませんでしょうか。
1つ疑問なのですが、そもそも、ダイアログを表示するのは何のために行っているのでしょうか。
①表示されたファイル名をオペレータが変えて、変えたファイル名で保存することがあるから。
②表示されたファイル名でOKかどうかをオペレータに確認してほしいから。
①であれば、CF1のセルを直接変えれば済むことです。
②であれば、メッセージボックスを表示すれば代用可能です。
No.13
- 回答日時:
Worksheets("○○").Range("CF1").Valueの
○○の個所がなにか間違っている可能性があります。
○○は手で直接打ち込むのではなく、コピペして貼り付けてください。
「建築物(表面)5.3」のシートのタグにマウスカーソルを合わしてマウスの右クリックをし、「名前の変更」を選択すると、そのシート名が編集状態になります。そのシート名をコピーしてください。
Ctrl+C でコピーできます。(CtrlキーとCキーを同時に押下)
それを貼り付けてください。
No.12
- 回答日時:
①initName = folder & Worksheets("Sheet7").Range("CF1").Value
②initName = folder & Worksheets("建築物(表面5.3").Range("CF1").Value
で、①の指定はできません。
添付の画像を参照ください。赤線で囲んだシート名は、Worksheets("○○")
として使用不可です。使用できるのは、青線で囲んだシート名です。
No.11
- 回答日時:
Application.Dialogs(xlDialogSaveAs).Showはネットワークフォルダを初期指定できない。
GetSaveAsFilenameは取得なので初期ファイル名を指定することは出来ませんでした。
なので#10の代替え案か、WindowsAPIで作るか・・
WindowsAPIの例 作成が面倒だったので下記サイトから引用し変更
参考サイト http://hanatyan.sakura.ne.jp/vb6/dialogue02.htm
取り合えず同じ標準モジュールに
Option Explicit
Private Declare Function GetSaveFileName Lib "comdlg32.dll" _
Alias "GetSaveFileNameA" (pOpenfilename As OPENFILENAME) As Long
Private Type OPENFILENAME
lStructSize As Long '構造体のサイズ
hwndOwner As Long '親ウィンドウのハンドル
hInstance As Long 'モジュールのインスタンスハンドル
lpstrFilter As String 'VBのファイルパターン
lpstrCustomFilter As String 'カスタムフィルター
nMaxCustFilter As Long '同バイト数
nFilterIndex As Long 'フィルターのインデックス
lpstrFile As String 'フルパス名を受取るバッファー
nMaxFile As Long '同バイト数
lpstrFileTitle As String 'ファイル名を受取るバッファー
nMaxFileTitle As Long '同バイト数
lpstrInitialDir As String '初期ディレクトリ名
lpstrTitle As String 'ダイアログボックスのキャプションタイトル
flags As Long '動作を指定する定数の組合せ
nFileOffset As Integer 'フルパス中のファイル名までのオフセット
nFileExtension As Integer '同 拡張子までのオフセット
lpstrDefExt As String 'デフォルトの拡張子
lCustData As Long 'フックプロシージャに渡すデータ
lpfnHook As Long 'フックプロシージャOFNHookprocへのポインター
lpTemplateName As String 'テンプレートリソース名
End Type
Private Const OFN_HIDEREADONLY = &H4
Private Const OFN_OVERWRITEPROMPT = &H2
Private Const OFN_FILEMUSTEXIST = &H1000
Private Const OFN_PATHMUSTEXIST = &H800
Private Const OFN_EXPLORER = &H80000
Public Function myDialogSaveAs(fol As String, strFileName As String)
'ファイルを保存ダイアログボックスを表示する
Dim tOpenFileName As OPENFILENAME
Dim lngRet As Long
With tOpenFileName
.lStructSize = Len(tOpenFileName)
.hInstance = 0& 'App.hInstance '不要の時 0&
.lpstrFilter = "Excelファイル(*.xls*)" & vbNullChar & "*.xls*"
'優先的に表示させるフィルターのインデックス
.nFilterIndex = 1
'ファイル名の内容を初期化
.lpstrFile = strFileName & String$(256, Chr$(0))
.nMaxFile = 256
'ファイル名を受取るバッファーの設定(Nullで埋めておく)
.lpstrFileTitle = String$(256, Chr$(0))
.nMaxFileTitle = 256
'デフォルトのフォルダー名の設定
.lpstrInitialDir = fol
'ダイアログのキャプション名
.lpstrTitle = "名前を付けて保存"
.flags = OFN_PATHMUSTEXIST Or OFN_FILEMUSTEXIST Or _
OFN_HIDEREADONLY Or OFN_OVERWRITEPROMPT
End With
lngRet = GetSaveFileName(tOpenFileName)
If lngRet = 0 Then
strFileName = ""
Exit Function
Else
strFileName = Left$(tOpenFileName.lpstrFile, _
InStr(tOpenFileName.lpstrFile, vbNullChar) - 1)
End If
myDialogSaveAs = strFileName
End Function
Sub Create_NewFile() '実行プロシージャ
Dim saveFilePath As String
saveFilePath = myDialogSaveAs("\\nas-sp01\share\○○部\○○\○○\○○班用\★★★○○申請\", Worksheets("建築物(表面)5.3").Range("CE1").Text)
If saveFilePath = "" Then Exit Sub
Application.DisplayAlerts = False
Application.ScreenUpdating = False
'<新規にブックを追加します。>
Sheets.Select
ActiveWindow.SelectedSheets.Copy
With ActiveWorkbook
.SaveAs Filename:=saveFilePath, FileFormat:=52
.Close
End With
ThisWorkbook.Activate
Sheets(1).Select Replace:=True
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
テスト時は下記を考慮してください。
元ブックの保存でなく元ブックを基に新規作成して名前を付けて保存します
Window APIはバージョンなどの問題があるかも知れません。
API部分はほぼコピペです。時間が無く十分な検証はしていません。
No.10
- 回答日時:
#3です
横から入るタイミングでないと思いますが、すみません。
GetSaveAsFilenameは取得なのでファイル名を指定することは出来ませんでした。また、ブックの作成も
Sheets.Select
ActiveWindow.SelectedSheets.Copy
With ActiveWorkbook
.SaveAs Filename:=saveFilePath, FileFormat:=52
.Close
End With
ThisWorkbook.Activate
Sheets(1).Select Replace:=True
で良かったですね。
代替えの案で多分ダメでしょうけれど、簡単なのは
元ファイルの保存をネットワークフォルダに保存して
そこから操作すれば
Application.Dialogs(xlDialogSaveAs).Show Arg1:=ThisWorkbook.Path & "\" & Range("CF1").Value
で出来ると思います
後はAPIで作るとか、、
煮詰まっている所、失礼しました。
No.9
- 回答日時:
黄色くなるのが①又は②だとすると、シート名が実在しない可能性があります。
①の場合、Sheet7 は存在しますか。
②の場合、建築物(表面5.3 は存在しますか。
建築物(表面5.3)が実際のシート名のような気がします。
全角のとじかっこ")"が提示されたスクリプトにはありません。
No.8
- 回答日時:
>どちら新しいコード部分が黄色くエラーになってしまいます。
黄色くなるのは
①initName = folder & Worksheets("Sheet7").Range("CF1").Value
ですか
②initName = folder & Worksheets("建築物(表面5.3").Range("CF1").Value
ですか、
③他の行
ですか。①②③のどれでしょうか。
No.7
- 回答日時:
>どうすればよいでしょうか?こちら側のPCの設定の問題でしょうか?
申し訳ありません。ネットワーク上の問題となると、こちらではわかりかねます。社内のネットワーク担当者に聞かれるのが、良いかと思います。
initName = folder & Range("CE1").Value
のかわりに
initName = folder & "ABCD"
として、ABCDが表示されれば、アクティブシートの問題になります。
アクティブシートの問題であれば、No5,No6が解決方法です。
なにも表示されなければ、folderの内容がおかしいということになります。
その場合、folderの内容をどのように修正すればよいかは、こちらではわかりません。社内のネットワーク担当者に聞けば解決するかと思います。
No.6
- 回答日時:
ちなみに、そのCE1のシート名がSheet1であるなら
initName = folder & Range("CE1").Value
を
initName = folder & Worksheets("Sheet1").Range("CF1").Value
のようにすると、かならずSheet1のCE1セルを参照するので、シート名
を指定するようにした方が安全です。
そうでないと、今回のような現象が発生します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2022/03/31 12:46
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- Excel(エクセル) Excelのマクロコードについて教えてください。 1 2022/03/27 10:47
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/03/28 14:52
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/03/07 14:05
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/02/21 11:19
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/21 13:29
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/03/02 08:40
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/20 10:00
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/02/17 11:59
このQ&Aを見た人はこんなQ&Aも見ています
-
あなたの「必」の書き順を教えてください
ふだん、どういう書き順で「必」を書いていますか? みなさんの色んな書き順を知りたいです。 画像のA~Eを使って教えてください。
-
フォントについて教えてください!
みなさんの一番好きなフォントは何ですか? よく使うフォントやこのフォント好きだなあというものをぜひ教えてください!
-
【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
【お題】 ・ありそうだけど、絶対に無いことわざを教えてください。
-
集合写真、どこに映る?
あなたが集合写真を撮られるとき、画角のどのあたりにいることが多いですか? 私は振り返ってみると右の端にいることが多い気がします。
-
店員も客も斜め上を行くデパートの福袋
シュールを通り越して店員も客も斜め上を行くデパートの福袋に入ってそうなものを教えて下さい。 よかったらレビューもしてください。
-
Excel 名前を付けて保存のVBA
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「黒歴史」教えて下さい
- ・2024年においていきたいもの
- ・我が家のお雑煮スタイル、教えて下さい
- ・店員も客も斜め上を行くデパートの福袋
- ・食べられるかと思ったけど…ダメでした
- ・【大喜利】【投稿~12/28】こんなおせち料理は嫌だ
- ・前回の年越しの瞬間、何してた?
- ・【お題】マッチョ習字
- ・モテ期を経験した方いらっしゃいますか?
- ・一番最初にネットにつないだのはいつ?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
名前をつけて保存した後、元の...
-
ダウンロードしたexe ファイル...
-
ファイルをダウンロードした時...
-
PDF "最小サイズ"で保存するマクロ
-
イラストレータの別名保存アク...
-
聞々ハヤえもんというサイトが...
-
QTTabBar 日本語化
-
ラベル屋さんの文字化けunicode
-
mp4ファイルの保存方法
-
プリモPDFのファイル保存先で困...
-
質問です。 PC版Lineでトークル...
-
irvineで
-
セルの値を使ってファイルを保存
-
Pagesファイルが開かなくなった。
-
exeファイルの中身を見ることは...
-
フォルダは残してファイルだけ...
-
jlbという拡張子のファイルを開...
-
MacのExcleですが ”Excelのオプ...
-
cerファイル、pfxファイルの基...
-
windows11におけるファイルの並...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
名前をつけて保存した後、元の...
-
ダウンロードしたexe ファイル...
-
PDF "最小サイズ"で保存するマクロ
-
ファイルをダウンロードした時...
-
Irvine でフォルダごとにダウン...
-
irvineで
-
Mozilla Thunderbirdの添付ファ...
-
イラストレータの別名保存アク...
-
ホームページビルダー 21 sp で...
-
Power DVDを日本語化したい
-
写真など画像ファイルにWINDOWS...
-
mp4ファイルの保存方法
-
プリントスクリーンを押し、グ...
-
Craving Explorerで保存したフ...
-
Photoshopのバッチ処理で保存ダ...
-
autucad2014LT を使用中エラー...
-
Auto-CAD 複数ファイルを一度に...
-
質問です。 PC版Lineでトークル...
-
ラベル屋さんの文字化けunicode
-
PowerDVDでキャプチャした静止...
おすすめ情報
回答ありがとうございます。
貴殿のご指示通りに
Application.Dialogs InitialFileName:="\\nas-sp01\~
に設定をしましたが、
エラーが出てしましました。
申し訳ありませんが対処方法を教えてください。
尚、私の都合で申し訳ありませんが、
本日、これから地方に出かけますので確認は明日の朝以降になると思います。
よろしくお願いいたします。
ご連絡が遅くなり、申し訳ありませんでした。
上手く設定が出来ました。
しかし同じ、コードをコピーして
下記のように少し内容を変更した場合ダイアログボックスを表示の「ファイル名」に何も表示が無く
空白になってしまいます。
Sub 電子保存()
Const folder As String = "\\Nas-sp01\share\~\"
Dim newName As Variant
Dim initName As String
initName = folder & Range("CF1").Value
newName = Application.GetSaveAsFilename(InitialFileName:=initName, FileFilter:="Excel マクロ有効ブック(*.xlsm), *.xlsm")
If newName = False Then Exit Sub
ThisWorkbook.SaveAs (newName)
End Subのコードです。問題がありますでしょうか?
回答ありがとうございます。
指定フォルダー以外に
initName = folder & Range("CE1").Value
を変更しております。何度かか、マクロを削除し、作成し直したり
ファイル名を変更して保存し直したり、しましたが、指定フォルダーのダイナログは間違いなく開くのですが、ファイル名にセルCE1値が表示されません
新しいファイル「テスト」で「紙保存」「電子保存」のマクロを作成しまして実行しましたが
やはり、紙保存では指定フォルダが開き、セルCF1値の名前が表示されますが、電子保存を実行した場合は、元データーと同じ状況で、ダイナログで指定フォルダには行きますが、やはり、ファイル名にセル値CE1が表示されません、何か問題があるのでしょうか?
何度も申し訳ありません、よろしくお願いいたします。
回答ありがとうございます。問題点が解ったように思います。紙保存のマクロを使用しセルCFとCE1とで試してみるとそれぞれ上手くフェイル名が表示されます。電子保存先の指定フォルダに問題があるのでしょうか?ワードにそれぞれの指定フォルダを保存して紙保存指定フォルダををクリックすると
「share」からフォルダ名が始まりますが、電子保存の指定フォルダをクリックすると「ネットワーク share」となります。この違いではないかと思いますが、指定フォルダを選択する時はお内容にコピーをしているのですが、shareの前にネットワークがあるのが問題だと思いますが、
どうすればよいでしょうか?こちら側のPCの設定の問題でしょうか?
申し訳ありません、よろしくお願いいたします。
何度もありがとうございます。ご指示の通り、initName = folder & Worksheets("Sheet7").Range("CF1").Value又はinitName = folder & Worksheets("建築物(表面5.3").Range("CF1").Valueと実際のシート名にしましたがどちら新しいコード部分が黄色くエラーになってしまいます。
両方のフォルダ先を調べた処、紙保存のフォルダ名が長い為、ネットワークが画面に表されないだけの様です。困りました。何が原因なのかがさっぱりわからなくなってしまいまして・・・よく使うマクロは電子保存なのでこれだけでも上手くいけばよいのですが。
よろしくお願いいたします。
多くの回答ありがとうございます。initName = folder & "ABCD"ですが全く何も表示されませんでした。又、①②ともエラーが出てしまい。黄色くなります。initName = folder & Worksheets("建築物(表面)5.3").Range("CE1").Value シートですが「建築物(表面)5.3」のシートにセルを合わしてマウスの右クリックをし、「コードの表示を表示すると「Sheet7(建築物(表面)5.3)」のところを示します。紙保存も同じシートなのですが・・やはり、こちら側の問題でしょうか?
よろしくお願いいたします。
お世話になっております。ダイナログ表示無のコードを設定するとCE1値でのファイル名で自動保存されました。
試しに、Sub 電子保存()
Const folder As String = "\\nas-sp01\share\○○部\○○\○○\○○班用\★★★○○申請\"
Dim newName As Variant
newName = folder & Range("CF1").Value & ".xlsm"
ThisWorkbook.SaveAs (newName)
End Sub ダイナログが問題なのでしょうか?
よろしくお願いいたします。本日、これからパソコンから離れてしまします。勝手申しますが、確認を明日の朝以降となります。もぅしわけ有りません。
ありがとうございます。相当に詰まってまして・・色々回答していただけているのに上手くいかず、どうしてよいかが検討が付きません。紙保存では上手くいくのに電子保存で指定フォルダを変更すると上手くいかないんです。貴殿の助言を参考にさせて頂こうと思いますが、全てのコードを教えて頂けますでしょうか?申し訳ありません、よろしくお願いいたします。
おはようございます。数日前より数多くの回答をありがとうございます。今回のシートのコピペでもやはり上手くいきませんでした、ダイヤログを表示させる目的はコード設定した指定フォルダ「\\Nas-sp01\~\1.受付\」最後の受付フォルダの中に物件ごとのフォルダがあり、保存する場合にその物件ごとのフォルダ内に保存をする事が目的です。(この物件フォルダは日々変更されますので)現状の方法として、貴殿から教えて頂きました、ダイヤログを表示させない方法では\1.受付\内にCE1値のファイル名で保存されますので、その後、そのファイルを物件ごとに移動する方法があります。当面はこの方法でやっていきたいと思いますが、今回の内容で別案がありましたらお願いできますでしょうか?何度も申し訳ありません、補足回数も後1回になってしまいました。よろしくお願いいたします。