• ベストアンサー

ExcelVBAでデスクトップのPATHを取得するには

こんにちわ。ExcelVBAで、ワークシートのA列に入力されているデータをTextファイルに保存するプログラムを作りました。下記のものです。 ================================= Sub Expo_TXT() Dim Rows As Long Dim StrData As String Dim Fs As Object, A As Object Set Fs = CreateObject("Scripting.FileSystemObject") Set A = Fs.CreateTextFile("c:\test.txt", True) For Rows = 1 To 10 StrData = Worksheets("Sheet1").Cells(Rows, 1).Value A.WriteLine StrData Next Rows A.Close End Sub ================================= しかし見てのとおりcドライブのルートにtest.txtという名前で保存するようになっています。 できれば、そのパソコンのデスクトップに保存したいのですが、どうすれば、パソコンのデスクトップのPATHを取得できるでしょうか? それぞれのパソコンのデスクトップは c:\windows\デスクトップという様にWin98マシンもあれば c:\Documents and Settings\Hanako\デスクトップや c:\Documents and Settings\Taro\デスクトップという場合もあります。多分APIとか使うんだろうなと思い、Webの解説ページを読んだりしましたがAPI使ったことが無いのでチンプンカンプンでした。 できれば具体的なコーディング例をご提示いただければ助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • iiikkk
  • ベストアンサー率37% (92/247)
回答No.2

Dim MyWSH As Object Set MyWSH = CreateObject("WScript.Shell") myDeskTopPath = MyWSH.SpecialFolders("Desktop") Set MyWSH = Nothing これでどうでしょうか。

souta_n
質問者

お礼

ばっちりです。 ありがとうございました。

その他の回答 (1)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

本体のファイルを各自のデスクトップに置いてもらい、 ThisWorkbook.Pathで取得したらいかがでしょうか?

souta_n
質問者

お礼

う~ん、確かにデスクトップに本体ファイルを置ければ苦労はないのですが。 また、それができれば、pathを指定せず、ファイル名だけ指定すれば、同じデレクトリ、つまりデスクトップにファイルが出来上がるので、ThisWorkbook.Pathで取得する必要もなくなるのです。 いや、でもシンプルに考えればそれもありか・・・ ありがとうございました。

関連するQ&A

  • VBAでtxtを読み込みxlsで保存したい

    C:\Documents and Settings\All Users\デスクトップ\sample.txt は次のようなデータになっています。 A B C 1,234 567,890 23,333 1,234 567,890 23,333 このデータをVBAを使ってExcelに読み込み、C:\Documents and Settings\All Users\デスクトップ\sample.xls として保存にしたいのですが、どのようなコードを書けばよいものでしょうか? sub test() Dim fso, f, ts Dim sline As String Set fso = CreateObject("scripting.filesystemobject") Set f = fso.getfile("C:\Documents and Settings\All Users\デスクトップ\sample.txt") Set ts = f.openastextstream(1) Do While ts.atendofstream <> True sline = sline & ts.readline & vbCrLf Loop ts.Close ' MsgBox sline End Sub ここまでいったのですが、slineをexcelにだすことができません。 教えていただけると助かります・。

  • 統合マクロでパスの取得方法

    お世話になります。 集計ファイルでエリア・商品で集計をとっています。 一つのファイルにまとめたいのでエリアをシート名による串刺し 商品を統合を使って集計していますが 毎回統合ボタンを押すのが大変で マクロを使い下記のコードを使っていますがファイルのパスで固定されているので 人に渡すとファイル名の変更、ユーザーの違いによりエラーになってしまいます。 現在開いているファイルの名前とパスをマクロに取り込み統合させる事は可能でしょうか Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2009/9/29 ユーザー名 : user ' ' Sheets("一般A").Select Range("b6").Select Selection.Consolidate Sources:=Array( _ "'C:\Documents and Settings\user\デスクトップ\[8期資料.xls]〇〇一般A'!R6C2:R64C9", _ "'C:\Documents and Settings\user\デスクトップ\[8期資料.xls]□□一般A'!R6C2:R64C9", _ "'C:\Documents and Settings\user\デスクトップ\[8期資料.xls]△△一般A'!R6C2:R64C9", _ "'C:\Documents and Settings\user\デスクトップ\[8期資料.xls]××一般A'!R6C2:R64C9", _ "'C:\Documents and Settings\user\デスクトップ\[8期資料.xls]●●一般A'!R6C2:R64C9", _ "'C:\Documents and Settings\user\デスクトップ\[8期資料.xls]■■一般A'!R6C2:R64C9", _ "'C:\Documents and Settings\user\デスクトップ\[8期資料.xls]▲▲一般A'!R6C2:R64C9", _ "'C:\Documents and Settings\user\デスクトップ\[8期資料.xls]++一般A'!R6C2:R64C9", _ "'C:\Documents and Settings\user\デスクトップ\[8期資料.xls]※※一般A'!R6C2:R64C9", _ "'C:\Documents and Settings\user\デスクトップ\[8期資料.xls]%%一般A'!R6C2:R64C9"), _ Function:=xlSum, TopRow:=False, LeftColumn:=False, CreateLinks:=False Sheets("一般B").Select Range("b6").Select Selection.Consolidate Sources:=Array( _ "'C:\Documents and Settings\user\デスクトップ\[8期資料.xls]〇〇一般B'!R6C2:R64C9", _ "'C:\Documents and Settings\user\デスクトップ\[8期資料.xls]□□一般B'!R6C2:R64C9", _ "'C:\Documents and Settings\user\デスクトップ\[8期資料.xls]△△一般B'!R6C2:R64C9", _ ・ ・ ・ ・ End Sub DIMとかActiveWorkbook.Pathとか組み込みましたが うまく行かないです。 どうぞ助けてください。

  • ExcelVBA+xdoc2txtでデスクトップのファイルをコンバートしたい。

    ExcelVBA+xdoc2txtを使い、以下の手順でPDFをtxtに変換します。 ・xdoc2txt.exeがいるフォルダを指定させる。 ・PDFがいるフォルダを指定させる。 ・以上を組み合わせxdoc2txt.exeを起動する。 この手順ですが、xdoc2txt.exe及びpdfがDドライブ直下などに 存在する場合は実現出来ています。 問題は両者がデスクトップに存在する場合です。 おそらくデスクトップのフルパスがスペースを含んでいるので 上手く行かないではないかと想像しています。 xdoc2txtのヘルプには「※空白を含むファイル名の場合、""で囲ってください」とあるので、例えば、 "C:\Documents and Settings\hogehoge\デスクトップ\xdoc2txt\xdoc2txt.exe -f C:\Documents and Settings\hogehoge\デスクトップ\PDF\xxx.pdf" あるいは C:\Documents and Settings\hogehoge\デスクトップ\xdoc2txt\xdoc2txt.exe -f "C:\Documents and Settings\hogehoge\デスクトップ\PDF\xxx.pdf" という風にダブルコーテーションで囲ってみたのですが、上手く動作しません。 その実現方法についてご教示いただけると幸いです。

  • [Active Basic]デスクトップのパスを取得

    Active Basicでデスクトップへのファイルパスを取得するための方法を教えていただきたいのですが・・・・ C:\Documents and Settings~っといった感じの絶対パス(?)で取得する方法を知りたいです。 どなたか知っている方、いらっしゃいましたらご教授ください。 お願いします。

  • フルパスの中にワイルドカードを使いたい

    ファイル削除のバッチファイルを作成しているのですが、フルパスの中でワイルドカードを使用したいのですが、可能でしょうか? 例として、 C:\Documents and Settings\user\デスクトップ\abc\test.txt C:\Documents and Settings\user\デスクトップ\edf\test.txt C:\Documents and Settings\user\デスクトップ\gh\test.txt を削除させたいです。 別の場所に同名のテキストファイルがあり、それは消したくないので、「*test.txt」とはしたくないです。 試しに下記のようにワイルドカードを使用してみたところNGでした。 del "C:\Documents and Settings\user\デスクトップ\*\test.txt" よろしくお願いします。

  • ExcelVBA テキストファイルの文字列置換え

    VBA初心者のものです。 複数のフォルダの中にある同名テキストファイル(INIファイル)の中の特定の文字列 を置換えるマクロを作成していますが、うまくいかずエラーになります。 フォルダは毎回名前が変わるのでこれを変数にしてパスの中に入れて、その下の 階層のINIファイルを文字列置換えするというものです。 文字列置換えはReplace関数を使って、テキストファイルの読み込みと別ファイルとして書き出して、元ファイルを削除、新ファイルの名前を元ファイルの名前に変更するというもので、 置換える文字列はエクセルシートのB2・B3セルを読み取ってます。 テキストを開く際にパスを変数でなくフォルダ名を指定して作ると文字列置換えは出来るので、パスへの変数の組み込み方か条件設定がおかしいのかなと思うんですが、エラーはパスが不明といった内容のものが出ます。 エクセルファイルはデスクトップにあるNew Projectフォルダの中に置いて、同階層にresultフォルダがありその中に複数のフォルダ(このフォルダ名を変数にしようとしています)、それぞれの中の2つ下層に同名テキスト(INI)ファイルがあります。 もしくは違う良い方法があるのか、浅学で稚拙なコードですがどうかご教示をお願いします。 Sub MyMacro1() Dim a As String Dim z As String Dim MyF As String Dim DirName As String Dim MyIniNo As Integer Dim YourIniNo As Integer MyIniNo = FreeFile YourIniNo = FreeFile DirName = "C:¥Documents and Settings¥AAA¥デスクトップ¥NewProject¥result¥" MyF = Dir(DirName, 16) If MyF <> "" Then Do Until MyF = "" Open "C:¥Documents and Settings¥AAA¥デスクトップ¥NewProject¥result¥" & MyF & "¥EzInst¥SETUP.INI" For Input As MyIniNo Open "C:¥Documents and Settings¥AAA¥デスクトップ¥NewProject¥result¥" & MyF & "¥EzInst¥SETUP2.INI" For Input As YourIniNo b = Range("B2") c = Range("B3") While Not EOF(1) Line Input #MyIniNo, a z = Replace(a, b, c) Print #YourIniNo, z Wend Close MyIniNo Close YourIniNo Kill "C:¥Documents and Settings¥AAA¥デスクトップ¥NewProject¥result¥" & MyF & "¥EzInst¥SETUP.INI" Name "C:¥Documents and Settings¥AAA¥デスクトップ¥NewProject¥result¥" & MyF & "¥EzInst¥SETUP2.INI" As "C:¥Documents and Settings¥AAA¥デスクトップ¥NewProject¥result¥" & MyF & "¥EzInst¥SETUP.INI" Loop End If End Sub

  • VBAマクロ、パスがありませんでとまります。

    Excel2003 VBAのコードを作成して、 実行しましたら ”実行時エラー'76' パスが見つかりません。" と表示されて Open pase ...... の行でとまってしまいます。 なにが原因とかんがえられますか? すいませんが、ご回答よろしくおねがいいたしますm(_ _)m Sub Macro1() Dim strarray() As Variant Dim counter As Integer Dim i As Long pase="C:\Documents and Settings\user\My Documents\" myname=Dir("C:\Documents and Settings\user\My Documents\",vbNormal) Do While myname <> "" If (GetAttr("C:\Documents and Settings\user\My Documents\" &_ myname) And vbNormal) = vbNormal Then ReDim Preserve strarry(counter+1) strarray(counter) = myname counter = counter + 1 End If myname = Dir Loop For i = 1 to counter Open pase & strarray(i) For Input As #1 Do Until EOF(1) ・ '処理 ・ ・ Loop Next i

  • 実行時エラー1004

    下記マクロを実行するとA1に入力した文字に名前をつけて保存するような マクロをつくりましたが A1に 「保存横一列」なら保存できますが 「保存(alt+エンター) セルに2行」 というように(alt+エンター)を入れて複数行にすると 「実行時エラー1004」が出てしまいます。 「保存セルに2行」というように1列にして保存したいのですが どのようにしたらいいのでしょうか? よろしくお願いします。 Sub Macro1() Dim name As String name = Range("A1").Value ChDir "C:\Documents and Settings\E-MACHINE\デスクトップ" ActiveWorkbook.SaveAs Filename:= _ "C:\Documents and Settings\E-MACHINE\デスクトップ\" & name & ".xls", FileFormat:=xlNormal, _ Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _ CreateBackup:=False End Sub

  • ExcelVBAの使い方 ¥の使い方おしえてください。

    ExcelVBAの使い方 ¥の使い方おしえてください。 現在、パス名取得に努めているのですが、最後がうまくいきません。 Dim MyObjFo As Object Dim Myname As String Set MyObjFo = CreateObject("Shell.Application") _ .BrowseForFolder(0, "フォルダを選択して下さい", 0, "C:\Documents and Settings\ユーザー名\My Documents\") If MyObjFo Is Nothing Then Exit Sub MsgBox MyObjFo.Items().Item().Path MsgBox MyObjFo.Items.Item.Path Myname = MyObjFo.Self.Path For i = 1 To 7 ActiveSheet.Pictures.Insert( _ " " & Myname & " & " ¥ " & " & Cells(i, "A") & ".JPG").Select 上は途中までのそーすですが変数MynameとCells(i, "A") をつなぐ間に入る¥がうまく機能しなく エクセルシート上に画像が張り付いていかないのでパス名の中の¥をうまくつないでフルパスにする方法を 教えてください。 お願いします。

  • 「パスが見つかりません」というエラー

    data.txtにセルの入力内容を出力したくて下記のようなプログラムを書きました。 ところが Open StrFN For Output As #IntFlNo のところで パスが見つかりません というエラーが出てしまいます。原因はわかりますでしょうか。 Sub test() Dim StrFN As String Dim i As Long Dim IntFlNo As Integer StrFN = "c\data.txt" IntFlNo = FreeFile Open StrFN For Output As #IntFlNo For i = 2 To 400000 Write #IntFlNo, Cells(i, 1) & "$" & Cells(i, 2) Next i Close #IntFlNo End Sub

専門家に質問してみよう