アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBAであるテンプレートのファイルを開いて、ファイル名をB3セルに入力された名前で保存したいのです。まず、下にマクロを示します。


Sub 新規_試作マスタ作成()

ChDir "C:\Users\H1250-201\Desktop"
Workbooks.Open Filename:="C:\Users\H1250-201\Desktop\試作マスター.xlsm"
ChDir "D:\A\" & Format(Date, "yyyy年") & "\" & Format(Date, "yyyy年m月") & ""
ActiveWorkbook.SaveAs Filename:="D:\A\" & Format(Date, "yyyy年") & "\" & Format(Date, "yyyy年m月") & "\" & Format(Date, "yyyymmdd") & " " & ThisWorkbook.Sheet1.Range("B3").Value & " 試作.xlsm", FileFormat _
:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False

End Sub

Dドライブの中のAというフォルダがあり、その中に、2014年→2014年1月の順にフォルダがあります。ただし、Aの中には2013年~2020年、2014年の中には、2014年1月~2014年12月のフォルダがあるのです。そこで、今日の日付を参照してそれに応じたフォルダ分けを行い、ファイルの頭に「日付」、その後に「B3セルに入力された名前」、「試作」の順に
「日付」 「B3セルに入力された名前」 「試作」という名前で保存されるマクロを作成したいのです。
上のマクロでは、ThisWorkbook.Sheet1.Range("B3").Valueの部分がおかしくてうまく行きません。個々の部分をただ文字列として"○○"とするとうまくいきました。
つまり、マクロのある自身のファイルのセルを参照したいのです。差し支えなければご回答願います。

A 回答 (2件)

ThisWorkbook.Sheet1.Range("B3").Value



ThisWorkbook.Worksheets("Sheet1").Range("B3").Value

こうするとどないだ。

これだけではなんなのでちょっと解説を。
ThisWorkbook.Sheet1
この書き方だと、ThisWorkbook(自分自身のブックを指すExcel.Workbookクラスのインスタンスを返す)にSheet1というメソッドないしはプロパティがあるというプログラムになる。Excel.Workbookクラスのメソッドにはシート一覧(Excel.Worksheetsクラスのインスタンス)を返すWorksheetsメソッドがあり、さらにExcel.Worksheetsクラスには個々のシートを返すItems(key)というメソッドがある。なので、上のコードはより正確に書くと
ThisWorkbook.Worksheets.Items("Sheet1").Range("B3").Value
となるが、Excel.WorksheetsクラスのItemsメソッドはメソッド名を省略する事ができる(これを規定のプロパティ、規定のメソッドなどと呼ぶ)のでWorksheets("Sheet1")と書いてもOKなのよん。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。仰るとおりにすると、うまくいきました。書き方によってはメソッドとして処理してしまう場合があるのですね。
Itemsは知らなかったです!
ファイルだけでなく、シートの参照もかなり奥が深いのですね。

お礼日時:2014/01/12 15:57

shintoshin258さん


こんにちは。

多分、皆さん誰も何が問題かわからないと思います。
失礼ですが、VBAは初心者ですか?

問題点が絞られているのなら、ご自身でセルB3の内容を確かめれば良いことだけです。
回答者はセルB3に何が入っているのか分かりませんので…

【一応質問に対しての回答ですが】
「ThisWorkbook.Sheet1.Range("B3").Value」が正しいですか?とのことだと思います。
完璧に正しいです。
Sheet1が初期のままで、修正していなければOKのはずです。
確認するとしたら、VBE画面の左にツリーでVBAProject--Sheet1(Sheet1)になっていると思います。
括弧の中がシートタブの名前で、左側のSheet1がオブジェクト名です。

【問題があればデバッグすれば良いです】
イミディエイト(ウィンドウ)があるかと思います。…表示されていなければctrl+Gで表示して下さい。
そこで ? ThisWorkbook.Sheet1.Range("B3").Value と入力して Enterを押せばセルB3の
値が表示されると思います。
その値を確認して下さい。
注)? は Print と同じです。

ちなみに「ChDir "C:\Users\H1250-201\Desktop"」の命令を実行していますが、意味がないです。
Workbooks.Open Filename:="C:\Users…とフルパスを指定していますので、Chdirは必要ありません。

またまた「ちなみに」となりますが、
「ChDir "D: …」も意味がありません。
ChDirを行う前に【ChDrive "D" 】をしないと意味がありません。

申し訳ありませんが、もし初心者の方なら一つずつ命令の意味や作用を丁寧に理解しないと、無駄で雑で分かりにくいプログラムになってしまいます。
頑張って勉強して下さい。 
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。私は、VBA初心者です。今まではマクロの記録を主な手段として使っていたため、どうしても無駄なコードが多くなりがちでした。これからもっと勉強して適切にプログラムできたらと思います。

お礼日時:2014/01/12 15:58

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