[[20060124124449]] 『相対パス名でファイルを保存するマクロ』(ろっしい) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『相対パス名でファイルを保存するマクロ』(ろっしい)

今まで、こんなプログラムを作っていました。
@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.