Excel VBA質問箱 IV

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

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


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

【41329】Excel2003 pikuミン 06/8/6(日) 12:03 質問[未読]
【41330】Re:Excel2003 Blue 06/8/6(日) 12:52 回答[未読]
【41331】Re:Excel2003 pikuミン 06/8/6(日) 12:57 お礼[未読]
【41332】Re:Excel2003 Blue 06/8/6(日) 12:57 回答[未読]

【41329】Excel2003
質問  pikuミン E-MAIL  - 06/8/6(日) 12:03 -

引用なし
パスワード
   VBAで作成したシートをデスクトップの保存の方法を教えて下さい。

VBA利用者&利用端末が異なる為、使用環境に応じたプログラムを組みたいのですが
以下の方法だと"C:\Documents and Settings\ 〜ログインユーザ名〜
で保存されてしまいます。

'*******************************************************
Option Explicit

Private Declare Function GetUserName Lib "ADVAPI32.dll" Alias "GetUserNameA" _
  (ByVal lpBuffer As String, nSize As Long) As Long

sub test ()
 
  Dim myName As String
  Dim num  As Long
  Dim Rtn  As Long
  Dim sPath As string
  
  'ログインユーザー名取得
  myName = String(250, Chr(0))
  num = Len(myName)
  Rtn = GetUserName(myName, num)
  
  'Pathを指定
  sPath = "C:\Documents and Settings\" & myName & _
         "\デスクトップ\" & "test.xls"
  '指定したPathに保存
  ActiveWorkbook.SaveAs Filename:=sPath

End Sub
'*******************************************************

"C:\Documents and Settings\" _
    & myName & "\デスクトップ\" & "test.xls"
に保存するにはどうすればいいのでしょうか?

【41330】Re:Excel2003
回答  Blue  - 06/8/6(日) 12:52 -

引用なし
パスワード
   デスクトップのパス(特殊フォルダのパス)を取得するには
WScript.ShellオブジェクトのSpecialFoldersメソッドを使います。

Dim DesktopPath As String 
' デスクトップのパスを取得
DesktopPath = CreateObject("WScript.Shell").SpecialFolders("Desktop")
' 表示
MsgBox DesktopPath

またShell.Applicationオブジェクトでも取得できます。

Const ssfDESKTOPDIRECTORY = 16
Dim DesktopPath As String
' デスクトップのパスを取得
DesktopPath = CreateObject("Shell.Application").NameSpace(ssfDESKTOPDIRECTORY).Self.Path
' 表示
MsgBox DesktopPath

それとAPIを使うならば、SHGetSpecialFolderPathあたりでしょうか。

【41331】Re:Excel2003
お礼  pikuミン E-MAIL  - 06/8/6(日) 12:57 -

引用なし
パスワード
   ありがとうございます☆

ちょっぴり感動しました(^^)/

またよろしくお願いします。

【41332】Re:Excel2003
回答  Blue  - 06/8/6(日) 12:57 -

引用なし
パスワード
   ちなみに
>"C:\Documents and Settings\" _
>    & myName & "\デスクトップ\" & "test.xls"
>に保存するにはどうすればいいのでしょうか?
は、APIで取得した myName に vbNullChar が含まれているからでしょう。

きちんと、APIを取得した文字列は、Instr+Left関数あたりを使って、
文字列を整形する必要があります。

  myName = String(250, vbNullChar)
  num = Len(myName)
  Rtn = GetUserName(myName, num)
  myName = Left$(myName, InStr(myName, vbNullChar) - 1)

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