Excel VBA質問箱 IV

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

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


6013 / 13644 ツリー ←次へ | 前へ→

【47638】エクセルファイルのコピーと貼り付け kei 07/3/17(土) 2:12 質問[未読]
【47642】Re:エクセルファイルのコピーと貼り付け ichinose 07/3/17(土) 7:13 発言[未読]
【47649】フォルダーの作成 kei 07/3/17(土) 16:49 質問[未読]
【47651】Re:フォルダーの作成 かみちゃん 07/3/17(土) 17:24 発言[未読]
【47653】Re:フォルダーの作成 kei 07/3/17(土) 17:49 発言[未読]
【47654】Re:フォルダーの作成 かみちゃん 07/3/17(土) 18:05 発言[未読]
【47656】Re:フォルダーの作成 kei 07/3/17(土) 18:24 お礼[未読]
【47658】Re:フォルダーの作成 ichinose 07/3/17(土) 19:04 発言[未読]
【47663】Re:フォルダーの作成 かみちゃん 07/3/17(土) 22:03 発言[未読]
【47671】Re:フォルダーの作成 ichinose 07/3/18(日) 8:26 発言[未読]
【47674】Re:フォルダーの作成 かみちゃん 07/3/18(日) 11:08 発言[未読]
【47677】Re:フォルダーの作成 ichinose 07/3/18(日) 21:01 発言[未読]

【47638】エクセルファイルのコピーと貼り付け
質問  kei  - 07/3/17(土) 2:12 -

引用なし
パスワード
   いつもいつもお世話になっております m(__)m

下の場所に下のファイルがあるのですが、
C:\Documents and Settings\Kei\デスクトップ\平成19年3月.xls

このファイルを同じデスクトップ上に平成19年4月.xlsという名前でコピーと貼り付けをマクロ(Userformのコマンドボタン)で行いたいのですが、
そんな事で可能なのでしょうか?

もし可能でしたら教えて下さい。

もう一つ!
同じデスクトップ上に新規フォルダーを作成して、そのフォルダーに「Kei」という名前で作成で可能でしょうか?

どなたかご教授ください。 お願いいたしますっ!

【47642】Re:エクセルファイルのコピーと貼り付け
発言  ichinose  - 07/3/17(土) 7:13 -

引用なし
パスワード
   ▼kei さん:
おはようございます。

以下のコードを参考にして下さい

'========================================================
Sub main()
  Dim desktop As String
  With CreateObject("WScript.Shell")
    desktop = .SpecialFolders("Desktop")
    End With
  FileCopy desktop & "\aaa.xls", desktop & "\bbb.xls"
  '  実際は、aaa.xlsではなく、存在するファイルを指定します
  MkDir desktop & "\更に下のフォルダ"
End Sub

【47649】フォルダーの作成
質問  kei  - 07/3/17(土) 16:49 -

引用なし
パスワード
   ありがとうございました!成功しました!!!!

他にもお聞きしたいのですが、
もし
  MkDir desktop & "\更に下のフォルダ"

に同じファイル名が存在する場合は作成しない
というプログラムをIf構文で作成したいのですが・・・

お願いいたしますっ

【47651】Re:フォルダーの作成
発言  かみちゃん  - 07/3/17(土) 17:24 -

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

>  MkDir desktop & "\更に下のフォルダ"
>
>に同じファイル名が存在する場合は作成しない

意味がわかりません。
同じファイル名とは、ichinoseさんのサンプルで言うと、aaa.xlsですか?
bbb.xlsですか?
また、作成しないというのは、desktop & "\更に下のフォルダ" を作成しないということですか?
そもそも、同じファイル名があってもなかっても、desktop & "\更に下のフォルダ" があれば作成できないと思うのですが、いかがでしょうか?

つまり、フォルダがなければ、作成するということにすればいいのではないでしょうか?

【47653】Re:フォルダーの作成
発言  kei  - 07/3/17(土) 17:49 -

引用なし
パスワード
   質問が悪くてスイマセン・・・

「フォルダがなければ、作成するということ」

です。

お願いいたします

【47654】Re:フォルダーの作成
発言  かみちゃん  - 07/3/17(土) 18:05 -

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

>「フォルダがなければ、作成するということ」

ichinoseさんからのコメントの流れだと、FileSystemObjectを使って、フォルダの
存在チェックをしてもいいのですが、
Dir関数でもできます。まずは、ヘルプの使用例にコードが載っていますから、
確認しましょう。

なお、FileSystemObject(FSO)については、以下がわかりやすいと思います。
http://www.officetanaka.net/excel/vba/filesystemobject/index.htm
(先頭4文字は、全角文字なので、半角文字にしてください。)

【47656】Re:フォルダーの作成
お礼  kei  - 07/3/17(土) 18:24 -

引用なし
パスワード
   出来ました!!!

本当に有難うございますっ

【47658】Re:フォルダーの作成
発言  ichinose  - 07/3/17(土) 19:04 -

引用なし
パスワード
   解決後ですが、

>
>「フォルダがなければ、作成するということ」
>
>です。
私なら、

on error resume next
MkDir desktop & "\更に下のフォルダ"
on error goto 0

としますけどね!!

【47663】Re:フォルダーの作成
発言  かみちゃん  - 07/3/17(土) 22:03 -

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

>>「フォルダがなければ、作成するということ」
>>
>>です。
>私なら、
>
>On Error Resume Next
>MkDir desktop & "\更に下のフォルダ"
>On Error GoTo 0
>
>としますけどね!!

その心は何ですか?
フォルダの存在チェックだけでは甘いということでしょうか?
On Error 〜
は、なんとなく本質的な回避処理ではないように思えるのですが、違いますでしょうか?
なんでもかんでも、
On Error 〜
で回避したほうがよいということなのでしょうか?

【47671】Re:フォルダーの作成
発言  ichinose  - 07/3/18(日) 8:26 -

引用なし
パスワード
   おはようございます。
>>私なら、
>>
>>On Error Resume Next
>>MkDir desktop & "\更に下のフォルダ"
>>On Error GoTo 0
>>
>>としますけどね!!
>
>フォルダの存在チェックだけでは甘いということでしょうか?
>On Error 〜
>は、なんとなく本質的な回避処理ではないように思えるのですが、違いますでしょうか?
>なんでもかんでも、
>On Error 〜
>で回避したほうがよいということなのでしょうか?

あっはは、私、「なんでもかんでも、On Error」なんて趣旨の発言をどこかでしましたっけ?

上記の記述を読むと、「なんでもかんでも、On Errorは使いたくない」
というような印象を受けましたよ!!

かみちゃんさんは以前にもOn Errorの件で意見交換をさせて頂いたことがありましたね?

私がファイルI/OでOn Error 〜を使うのは、基本的には、
www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=23067;id=excel
↑ここでちゃっぴさんが言っていることと同じ理由です。

>いちいち、全部のCaseを洗い出してCheckするとなると
>工数もかかりますし、何より複雑になってわかりづらくなります。

と、おっしゃっていますが、

私がちょっと言い換えればファイルI/Oや人の作った
オブジェクト等は、考え得るエラーを全部列挙する(コードでエラーチェックする)事などできない と思っています。

よって、On Error 〜で予想できないエラーも拾ってもらった方がよい というのがOn Error 〜を使用する理由です。

想定できない と言ってもエラーが発生するステートメントは特定はしていますよね?


Mkdirステートメントについても同じです。
デスクトップの下にフォルダを作るという今回の事象では、
私も既に存在するフォルダを作成しようとしている(実際には、「パスが無効です」)
以外のエラーは殆どないと思いますが、一般的にMkdirステートメントで発生するエラーとなれば、上記以外にもあるかもしれませんよ!!
FAT16やFAT32のファイルシステムを使っていれば、
作成できるファイル(フォルダ)数には、制限がありますよね?
(FAT16なんて、ルートディレクトリは512でしたっけ?)
FDにフォルダを作成するなんてことも想定すれば、もっと少ない数も想定しなければなりません(試さない方がよいですよ、FDのファイル作成数限界なんか試すとWin98辺りだとシステムに支障きたすかもしれません。以前試したら、おかしくなってOSをいれなおした覚えがあります)
On error 〜なら、これらの想定していないエラーも拾ってくれます。

ここでの投稿では、趣旨と異なれば、付けないコードを投稿する場合もありますが、
私は実務では、ファイルI/OやADOやWSHなど(想定できないエラーが発生するかもしれない事象)は、殆どラップしたプロシジャーを用意します。

Function openfile_input(filepath As Variant) As Long
  On Error Resume Next
  Dim flno As Long
  flno = FreeFile
  Open filepath For Input As #flno
  openfile_input = Err.Number
  On Error GoTo 0
End Function
上記のようなコードをCallしている呼び出し元では、戻り値でエラーチェックを行います。

>On Error 〜
>は、なんとなく本質的な回避処理ではないように思えるのですが、違いますでしょうか?
私は、この想定できないエラーも拾ってくれるようなエラー処理は、
On Error 〜を使う以外の方法があるのなら知りたいと思っています。

ON Error を使うことが「本質的な回避処理ではない」という場合も
あるでしょうね!!

【47674】Re:フォルダーの作成
発言  かみちゃん  - 07/3/18(日) 11:08 -

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

>>なんでもかんでも、
>>On Error 〜
>>で回避したほうがよいということなのでしょうか?
>
>あっはは、私、「なんでもかんでも、On Error」なんて趣旨の発言をどこかでしましたっけ?
>
>上記の記述を読むと、「なんでもかんでも、On Errorは使いたくない」
>というような印象を受けましたよ!!

私は、原因となる回避(今回の場合は、フォルダが存在しなければという条件)
をすれば、いいと思っていたのですが、「なんでもかんでも」という表現に気分
を害されたなら、謝ります。

>私がファイルI/OでOn Error 〜を使うのは、基本的には、
>www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=23067;id=excel
>↑ここでちゃっぴさんが言っていることと同じ理由です。

大変よくわかりました。
今後も参考にさせていただきます。
フォルダの存在チェックだけだったら、私の方法で十分のでしょうけど、
ファイルI/Oには、それ以外のエラーも潜在するから、
On Error 〜のほうが、なおいいということですね。

何か、私が間違ったことを書いたのかと思って、疑問に思い、たずねた次第です。
ichinosさんの真意はよく理解できました。ご気分を害されて申し訳ありませんでした。

【47677】Re:フォルダーの作成
発言  ichinose  - 07/3/18(日) 21:01 -

引用なし
パスワード
   こんばんは。

>>あっはは、私、「なんでもかんでも、On Error」なんて趣旨の発言をどこかでしましたっけ?
>「なんでもかんでも」という表現に気分
>を害されたなら、謝ります。

気分等、害しておりません(きっぱり)。

上記の記述は冗談のつもりで記述したのです。
(この掲示板では冗談なんてJakaさんにしか言ったことないんですが、
かみちゃんさんにも一歩踏み込んでみた だけなんですが・・・)。

勇み足でした。ごめんなさい。
相手の方にこんなに深刻に受け取られるような記述をしたこと
反省します。まだまだ、修行がたりません。

これに懲りず、またよろしくお願いします。

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