ブックの名前を変更するマクロの作り方を教えていただけませんでしょうか?
現在ワークシート上にコンボボックスがあり、そこにブック名にしたい候補の一覧があります。
選んだものをブック名にしたい場合はどのようにしたらよろしいのでしょうか?
ブック名をセルに反映させることはできたのですが、その逆ができません。
よろしくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答3件
0
ベストアンサー
このブックを保存するのでしたら
VBA
1ThisWorkbook.SaveAs ThisWorkbook.Path & "\" & ComboBox1.Value
投稿2020/05/02 04:45
総合スコア119
0
「Excel vba ブック名 変更」で検索すると次のようなページが見つかりますよ。
投稿2020/05/02 02:25
総合スコア1773
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
Yasumichiさん、ありがとうございます。
こちらのサイトも見ていたのですが、変更後の名称をコンボボックスから選ぶ、もしくは指定したセルの名称にする方法がわかりませんでした。
指定したセルの値を取る方法は、分かりますか?ストレートに教えてもいいのですが、以下のページを参照してみてください。
Cells プロパティ (Excel) | Microsoft Docs
https://docs.microsoft.com/ja-jp/office/vba/api/excel.worksheet.cells
VBA セルの値を取得する
https://www.tipsfound.com/vba/07001
あと、「excel vba combobox」とかで検索するとコンボボックスから選ぶ方法も見つかると思いますよ。
あと、マクロの記録も利用すると色んなコードが分かりますよ。
Yasumichiさん、ありがとうございます。
教えていただいたサイトを拝見し、セルの値を取ることはできました。
ですが、その二つをどう組み合わせたら良いのかがわかりません。
教えていただいたサイトのコードでいうと、
'// ファイル名変更ダイアログを表示
sChangePath = Application.GetSaveAsFilename(InitialFileName:=sFileName, Title:="変更後ファイル名")
のあたりかと思って色々変更してみたのですが、うまくいきませんでした。
先に sFileName に cells(?,?).value の値を代入すれば、良いのでは?
ありがとうございます。
セルの値で保存画面までは進めました。
ところが、保存先を指定しても保存になっておらず、再度開くはずのファイルが開きません。
どこがおかしいのでしょうか?
Sub ChangeOpenBookName()
Dim bk As Workbook
Dim iMsg As Integer
Dim sFileName As String
Dim sFullPath As String
Dim sChangePath As String
Set bk = ActiveWorkbook
iMsg = MsgBox("ファイル名を変更する前に保存します。" & vbLf & "よろしいですか?", vbOKCancel)
If iMsg = vbCancel Then
Exit Sub
End If
bk.Save
sFileName = bk.Name
sFullPath = bk.FullName
sChangePath = Application.GetSaveAsFilename(InitialFileName:=Cells(2, 7).Value, Title:="変更後ファイル名")
If sChangePath = "False" Or sFullPath = sChangePath Then
Exit Sub
End If
bk.Close
Name sFullPath As sChangePath
Call Workbooks.Open(sChangePath)
End Sub
ああ、こうしてコードになると自分の答えが間違っていたことに気づきました。
そもそも sChangePath = Application.GetSaveAsFilename (以下、略)の行はいらないですね。ファイル名を取るだけのコードなので。
ryuno_vanilla の提示している
ThisWorkbook.SaveAs ファイル名
を実行しないと実際に保存は行われません。
Yasumichiさん、ありがとうございます。
sChangePath = Application.GetSaveAsFilename(InitialFileName:=Cells(2, 7).Value, Title:="変更後ファイル名")
までは正しいけれど、その下がryuno_vanillaさんにアドバイスいただいた
Dim Path As String
Path = ThisWorkbook.Path & "\" & ThisWorkbook.Name
ThisWorkbook.SaveAs ThisWorkbook.Path & "\" & ComboBox1.Value
Kill Path
にしなければならないということでしょうか?
申し訳ないですけど、正しいかといわれると精査はしてません。
むしろ、ryuno_vanilla のを元に足りない部分があれば、肉づけした方がよいと思います。
あと、各行のコードの意味とか理解していますか?意味を理解しようとしないで組み合わせるのは、危険ですよ。特に Kill とか。
アドバイスありがとうございます。
なるべく理解するようにはしておりますが、まだ全部は理解しきれておりません。
関数みたいに追加するだけならよいのですが・・・。

退会済みユーザー
2020/05/02 12:13
mi_kuさんが混乱しているのは。。
VBAの皆さんの助言もそうなのですが、Combobox(にみえるもの)にも色々あるんです・・。
1、VBAのUserform上に配置したcombobox
2、Excelシートに配置したFormコントロールのCombobox、
3、入力規制でリスト表示でセル範囲を指定したcomboboxのようなもの
このあたりの違いを意識しないと、ご意見をいただくたびに迷うことになりますよ。
アドバイスありがとうございます。
ネットで探してもその辺で戸惑うことがありました。
私は2のケースがほとんどなので、次回から質問させていただく場合はその辺も明記するようにしたいと思います。

退会済みユーザー
2020/05/03 00:33 編集
2のケースが多いとすると、前回の方のファイル名を変えて保存するというコードは
このように違ってきますね・・。エクセルシートに配置したcomboboxはセルに値を転記するわけですから
ThisWorkbook.SaveAs ThisWorkbook.Path & "\" & sheets("data").range("A1").Value
アドバイスありがとうございます。
sheets("date")を追加して問題なく動作いたしました。
他にも試行錯誤中ですが、質問するのも難しいですね。。。

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/02 05:04
2020/05/02 08:34
2020/05/02 09:09
2020/05/02 09:12
2020/05/02 09:15
2020/05/02 09:18
2020/05/02 09:22
2020/05/02 09:23