[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『相対パス名でファイルを保存するマクロ』(ろっしい)
今まで、こんなプログラムを作っていました。
@my_path = "C:\Documents and Settings\Abc\My Documents\test\data\"
Amy_book = "input_data.xls"
Boutput_path ="C:\Documents and Settings\Abc\My Documents\test\data\"
Coutput_book = "output_data.xls"
<< 処理 >>
DWorkbooks.Add
EActiveWorkbook.SaveAs Filename:=output_path & output_book
FActiveWindow.Close
として結果を保存していたのですが、これを相対パスで行う必要が出てきました。
状況としては
1.あるフォルダに「data」と「macro」の2つのフォルダがある
2.「macro」フォルダに現在作っているマクロを入れている。
だったので、フォルダごと一度に他のフォルダに移動しても(上で書いてあるところの
test フォルダです)パス名を書き直さないで動くプログラムに変えたいのです。
そこで、相対パスを使って
@を my_path ="../data"
としたら、ファイルを開いて操作することができたのですが、Eの部分で保存するときに
output_path ="../data" とするとエラーが出てしまいます。
検索で色々見てみたのですが、Chdir や Curdir を使うのかなぁという感じですが、テキトーに
やってみたところ上手く動きませんでいた。
ご教授頂けると幸いです。よろしくお願いします。
相対パスより、絶対パスがよいと思うのですが...(あきお) はずしてたら、すみません C:\Documents and Settings\Abc\My Documents +-- TEST1 +-- DATA +-- output_data.xls +-- TEST2 +-- DATA +-- output_data.xls
Sub TEST() my_path = "C:\Documents and Settings\Abc\My Documents" my_book = "input_data.xls" output_book = "output_data.xls" ChDir my_path & "\TEST1\DATA"
For I = 1 To 2 MsgBox "処理!" Workbooks.Add カレントディレクトリ = P_dir("TEST" & I & "/DATA") ActiveWorkbook.SaveAs Filename:=カレントディレクトリ & "\" & output_book ActiveWindow.Close Next I End Sub 'こんなふうに↓ChDir しなくっても、フルパスで書いたほうがいいと思ふ(追記) Function P_dir(LC_Path) ChDir "../" 'ひとつ上のディレクトリ(フォルダ)へ ChDir "../" & LC_Path 'さらに、ひとつ上のディレクトリ(フォルダ)へいって、下がる P_dir = CurDir End Function
回答ありがとうございますm(__)m。まだ書いていただいたコードを理解している最中です。
一応、やりたいことは、マクロを触ったことが無い人に、その人のPCに適当にdataフォルダとmacroフォルダを作ってもらって、そこにデータとマクロが入ったエクセルファイルをコピーしてもらい、その人がコードを書き換えなくても問題なく動くようなマクロを作りたかったためです。
まずは、書いていただいたコードを動かしてみます。ありがとうございました(ろっしい)
'下記は、取得したコンピュータ名を利用する方法ですが、 'ユーザ名を取得する GetUserName というのもあります(あきお) 'ただ、GetUserName は、ユーザ名が全角だとうまくいきませんでした。 'Option Explicit Private Declare Function GetComputerName Lib "Kernel32" Alias "GetComputerNameA" _ (ByVal lpBuffer As String, nSize As Long) As Integer Sub TEST() Dim P_ME As String Dim my_path As String Dim my_book As String Dim output_book As String Dim i As Integer Dim 保存先 As String P_ME = P_Who() my_path = "C:\Documents and Settings\" & P_ME & "\My Documents" my_book = "input_data.xls" output_book = "output_data.xls" For i = 1 To 2 MsgBox "処理!" Workbooks.Add 保存先 = my_path & "\TEST" & i & "\DATA" ActiveWorkbook.SaveAs Filename:=保存先 & "\" & output_book ActiveWindow.Close Next i End Sub Private Function P_Who() As String Dim LC_User As String Dim LC_Byte As Long Dim LC_Re As Long LC_Byte = 16 LC_User = Space(LC_Byte) LC_Byte = Len(LC_User) LC_Re = GetComputerName(LC_User, LC_Byte) P_Who = Left$(LC_User, LC_Byte) End Function '訂正 あきお
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.