|
まずコーデングの定石として、何度も使う長いパスは定数で宣言します。
Const DskTop As String = _
"C:\Documents And Settings\Daisuke\デスクトップ\"
で本題ですが、そのコードには決定的なミスがあります。
>結果ファイル1 = Dir("c:\documents and settings\daisuke\デスクトップ\" _
> & 製番1 & ActiveSheet.Name, Attributes:=vbNormal)
>If 結果ファイル1 = "結果.txt" Then
この部分のコードは「製番1 & ActiveSheet.Name」の文字列が "結果.txt"
になっていれば・・という条件判定をしています。だから、もしここが True なら
>c:\documents and settings\daisuke\デスクトップ\"& 製番1 & _
>ActiveSheet.Name & "\結果.txt"
の文字列は、
c:\documents and settings\daisuke\デスクトップ\結果.txt\結果.txt"
と、等価である。ということになります。どう見てもおかしいでしょ ?
そーいうミスを避ける意味でも、長い文字列は文字列型の変数に格納して、
使った方がいいのです。あと、FSO.GetFileName 〜 の部分は、単に
Dim OldF As String, NewF As String '←この宣言も抜けています。
OldF = Selection.Value & ".dwg"
NewF = 製番1 & ActiveSheet.Name & "\" & 番号 & 材料名 & _
"×" & サイズ & "×" & 長さ & "-" & 数量 & "s.dwg"
と、するだけでいいです。実は全く同じ意味ではなく、GetFileNameを使うと
ファイルの存在チェックか出来るのですが、存在しなければ実行時エラーに
なるはずだから、それをトラップするコードがないと意味なしになります。
それから、Selection を使うのは出来るかぎり避けること。そこには値だけ
でなく「現在選択されている、あらゆるもの」が入ってしまうので、とても
危険です。
>myfso.CreateTextFile 〜
↑これは無意味なようですが・・。
以上のようなことに気をつけて、再度書き直してみて下さい。
|
|