Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


7844 / 13645 ツリー ←次へ | 前へ→

【36507】翌月ファイルを作りたい 春まき 06/4/2(日) 11:58 質問[未読]
【36508】Re:翌月ファイルを作りたい ぱっせんじゃー 06/4/2(日) 12:08 発言[未読]
【36509】Re:翌月ファイルを作りたい ぱっせんじゃー 06/4/2(日) 12:09 発言[未読]
【36510】Re:翌月ファイルを作りたい ぱっせんじゃー 06/4/2(日) 12:14 発言[未読]
【36511】Re:翌月ファイルを作りたい かみちゃん 06/4/2(日) 12:19 発言[未読]
【36512】お礼とブックの閉じ方 春まき 06/4/2(日) 12:37 お礼[未読]
【36515】Re:お礼とブックの閉じ方 ぱっせんじゃー 06/4/2(日) 12:59 発言[未読]
【36517】説明不足でした 春まき 06/4/2(日) 13:09 質問[未読]
【36519】Re:説明不足でした ぱっせんじゃー 06/4/2(日) 13:18 発言[未読]
【36520】Re:説明不足でした かみちゃん 06/4/2(日) 13:18 発言[未読]
【36521】Re:説明不足でした 春まき 06/4/2(日) 13:28 発言[未読]
【36522】Re:説明不足でした ぱっせんじゃー 06/4/2(日) 13:31 発言[未読]
【36527】エラーっぽいのですが 春まき 06/4/2(日) 14:32 質問[未読]
【36529】Re:エラーっぽいのですが かみちゃん 06/4/2(日) 14:36 発言[未読]
【36531】解決できました 春まき 06/4/2(日) 14:56 お礼[未読]
【36524】Re:デスクトップパスの取得方法 かみちゃん 06/4/2(日) 13:45 発言[未読]

【36507】翌月ファイルを作りたい
質問  春まき  - 06/4/2(日) 11:58 -

引用なし
パスワード
   事情がありボタンクリック1つで翌月のエクセルファイルができるように考えています。今まではその月使っていたファイルをコピー&ペーストでコピーを作り、ファイルの名前を翌月にして、データーを初期化すると手作業で行っていました。

このファイルの名前を変更する部分がマクロ記録ではできないので御教授をお願いします。
ファイルの名前をABCD4月とすると新しいファイルはABCD5月となります。
セルA80に関数のでMONTH+1の値が出るようにしてあるので
ファイル名がABCD(A80)月となれば良いのですが
コードはどうなりますでしょうか。
よろしくお願いします。

【36508】Re:翌月ファイルを作りたい
発言  ぱっせんじゃー  - 06/4/2(日) 12:08 -

引用なし
パスワード
   データを初期化した状態のブックを付けて、

FileCopy

でブックをコピーすればいいかと思います。

VBAヘルプで、
FileCopy ステートメント
を調べてみてください。

ブックの名前は、
Date
などから付けたらいいかと思います。

DateAdd

も参考になるでしょう。

【36509】Re:翌月ファイルを作りたい
発言  ぱっせんじゃー  - 06/4/2(日) 12:09 -

引用なし
パスワード
   >データを初期化した状態のブックを付けて、

データを初期化した状態のブックを作っておいて

でした。
失礼しました。

【36510】Re:翌月ファイルを作りたい
発言  ぱっせんじゃー  - 06/4/2(日) 12:14 -

引用なし
パスワード
   自ブックをコピーするのは
「名前を付けて保存」の作業をマクロの自動記録すれば
参考になるコードが得られます。

出来たコードのブックの名前の部分に変数で付けた名前
を代入させてやればいいです。

↓のような感じです。

Dim Fmei as String
   Fmei = "ABCD" & Worksheets("Sheet1").Range("A80").Value & "月.xls"

【36511】Re:翌月ファイルを作りたい
発言  かみちゃん  - 06/4/2(日) 12:19 -

引用なし
パスワード
   こんにちは。かみちゃん です。

> Dim Fmei as String
>   Fmei = "ABCD" & Worksheets("Sheet1").Range("A80").Value & "月.xls"

ぱっせんじゃーさんの方法で十分なのですが、参考に、
現在の日付からファイル名を生成するならば
Fmei = "ABCD" & Format(Date, "mm""月.xls""")
こんな感じでもできますね。

【36512】お礼とブックの閉じ方
お礼  春まき  - 06/4/2(日) 12:37 -

引用なし
パスワード
   質問後10分でこれほどレスを頂けるとは感激しました。
ぱっせーんじゃーさん、何度もわかりやすく説明してくださりありがとうございます。
かみちゃんさん、毎度丁寧にコード書いていただき感謝に堪えません。

もうひとつわからない所が出てきたのですがこのトピで質問してもいいでしょうか。
それは一度データーを初期化して新しいファイルを作るのことになるのですが
元のファイルはまだ残り10日ぐらい使うはずなので
初期化したあと上書き保存されたら困りますのでマクロ使った後
保存せずにブックを終了させたいのですが、これも同一マクロ内に
そういうコードを入れれますでしょうか?

便乗質問ですいませんが加納ならコードを教えてください。

【36515】Re:お礼とブックの閉じ方
発言  ぱっせんじゃー  - 06/4/2(日) 12:59 -

引用なし
パスワード
   名前をつけて保存、をマクロの自動記録してみれば分かるのですが、
名前を付けて保存したあとは制御は新しいブックに移ります。
名前を雲梯tケレン、塗装が必要です。天板保存した後にアクティブな
ブックに対して初期化を行いアクティブなブックを上書き保存して
閉じれば元のブックには何も影響はありません。

ちなみに、ブックの編集を破棄して閉じる場合は、

ThisWorkBook.Saved = True
ThisWorkBook.Close

とします。
1行で記述する方法もあったような・・・。

【36517】説明不足でした
質問  春まき  - 06/4/2(日) 13:09 -

引用なし
パスワード
   すいませんFileCopy ステートメントのヘルプを調べましたが
既に開いているファイルに使用するとエラーになるとありました。

ボタンは今月使っているファイル上に置くため開いている状態で
マクロを使うことになります。
そのファイルがある同一ディレクトリィ内に翌月ファイルを作るのですが
試しに名前を付けて保存を記録させると

  ActiveWorkbook.SaveAs Filename:= _
    "C:\Documents and Settings\私の名前\デスクトップ\AB\AB CD 4月 β2.xls", FileFormat:= _
    xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
    , CreateBackup:=False

となりました。これはファイルを置く場所を指定しながら名前を付けているようで

Dim Fmei as String
   Fmei = "ABCD" & Worksheets("Sheet1").Range("A80").Value & "月.xls"

をどこに入れて良いかわからず困りました。

それと自宅のパソコンで作業しているのですが
これだと職場のPCに持っていったときに動くでしょうか?
質問ばかりですいません。PCを選ばず同一ディレクトリ内に保存できるように
したいのですが、可能でしょうか。
ちょっと混乱してしまいました。何かアドバイスいただけたら幸いです。

【36519】Re:説明不足でした
発言  ぱっせんじゃー  - 06/4/2(日) 13:18 -

引用なし
パスワード
   同じフォルダでいいのなら、↓でいけると思います。

Fmei = ThisWorkBook.Path & "\" & "ABCD" & Worksheets("Sheet1").Range("A80").Value & "月.xls

【36520】Re:説明不足でした
発言  かみちゃん  - 06/4/2(日) 13:18 -

引用なし
パスワード
   こんにちは。かみちゃん です。

> Dim Fmei as String
>   Fmei = "ABCD" & Worksheets("Sheet1").Range("A80").Value & "月.xls"
>
>をどこに入れて良いかわからず困りました。

 Dim Fmei as String
 Fmei = "C:\Documents and Settings\私の名前\デスクトップ\AB\AB CD" & _
      Worksheets("Sheet1").Range("A80").Value & "月 β2.xls"
 ActiveWorkbook.SaveAs Filename:= Fmei
です。

>PCを選ばず同一ディレクトリ内に保存できるようにしたい

そのPCのデスクトップのABというフォルダに保存したいということでしょうか?
また、OSは、WindowsXPのみでいいのでしょうか?

【36521】Re:説明不足でした
発言  春まき  - 06/4/2(日) 13:28 -

引用なし
パスワード
   >そのPCのデスクトップのABというフォルダに保存したいということでしょうか?

そういう条件でもOKです。ファイルのディレクトリを移してしまう人が
いるかもしれませんので、同一フォルダ内という条件で可能なら
その方が助かります。


>また、OSは、WindowsXPのみでいいのでしょうか?

OKです。

【36522】Re:説明不足でした
発言  ぱっせんじゃー  - 06/4/2(日) 13:31 -

引用なし
パスワード
   念のため、ブック存在の有無もチェックした法がいいかもしれませんね。

If Dir(Fmei) <> "" Then
  MsgBox "既に存在するブックです。"
Else
  '名前を付けて保存する処理
End If

【36524】Re:デスクトップパスの取得方法
発言  かみちゃん  - 06/4/2(日) 13:45 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>>そのPCのデスクトップのABというフォルダに保存したいということでしょうか?
>
>そういう条件でもOKです。ファイルのディレクトリを移してしまう人が
>いるかもしれませんので、同一フォルダ内という条件で可能なら
>その方が助かります。

同一フォルダ内という解釈を私が間違っていたかもしれません。
このマクロが入っているブックと同じフォルダであれば、ぱっせんじゃーさんがおっしゃるとおりです。
ThisWorkbook.Path
になります。

ただ、どのWindowsXPのPCでもデスクトップやマイドキュメントという同じフォルダに入れたい
ということであれば、以下のURLに特殊フォルダのフォルダ名の取得が紹介されているので参考になりますでしょうか?
http://www.nurs.or.jp/~ppoy/access/access/acEt013.html

また、WindowsAPIを使う方法を、
[#19421]で紹介したこともあります。

【36527】エラーっぽいのですが
質問  春まき  - 06/4/2(日) 14:32 -

引用なし
パスワード
   >念のため、ブック存在の有無もチェックした法がいいかもしれませんね。
>
> If Dir(Fmei) <> "" Then
>  MsgBox "既に存在するブックです。"
> Else
>  '名前を付けて保存する処理
> End If
========================
以下のように書きました
  Dim Fmei As String
  If Dir(Fmei) <> "" Then
  MsgBox "既に存在するブックです。"
  Else
 Fmei = ThisWorkbook.Path & "\" & "ABCD" & _
      Worksheets("○○").Range("A80").Value & "月.xls"
 ActiveWorkbook.SaveAs Filename:=Fmei
     End If
End Sub


ところがブックがあってもなくても 「MsgBox "既に存在するブックです。"」
が出てしまい翌月ファイルを作ってくれません。
どこかおかしいでしょうか?
IF文を使わなければ翌月ファイルを作ってくれる所まではこぎつけました

【36529】Re:エラーっぽいのですが
発言  かみちゃん  - 06/4/2(日) 14:36 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>  Dim Fmei As String
>  If Dir(Fmei) <> "" Then
>  MsgBox "既に存在するブックです。"
>  Else
> Fmei = ThisWorkbook.Path & "\" & "ABCD" & _
>      Worksheets("○○").Range("A80").Value & "月.xls"
> ActiveWorkbook.SaveAs Filename:=Fmei
>     End If

変数Fmeiの内容を格納してから、ファイルの存在チェックをしなければいけません。

 Dim Fmei As String
 Fmei = ThisWorkbook.Path & "\" & "ABCD" & _
      Worksheets("○○").Range("A80").Value & "月.xls"
 If Dir(Fmei) <> "" Then
  MsgBox "既に存在するブックです。"
 Else
  ActiveWorkbook.SaveAs Filename:=Fmei
 End If

です。

【36531】解決できました
お礼  春まき  - 06/4/2(日) 14:56 -

引用なし
パスワード
   ぱっせんじゃー様、かみちゃん様 ありがとうございました。
速レスのおかげで何日かかるかと思ったコードが数時間で
できあがりました。満足です。
(すぐに真っ赤になるコードとエラーメッセージで泣けましたが)

素人の稚拙な説明、質問にも関わらず
何度ものご説明、アドバイスで大変感謝しております。
さっそく日曜残業で職場に向かいコードを仕込んできます。

ありがとうございました。

7844 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free