![](https://blogimg.goo.ne.jp/user_image/7c/1b/ab2cae4880572673ce1adfae7483e882.png)
MSDN Forum でこんな質問がありました。
Excel VBA で "Program Files" フォルダーに新しいフォルダーを追加したい
(が、システムフォルダーなので書き込み不可となる)
How to Write create new folder in Program file with VBA ??
C# とか VB だとシステムフォルダーのアクセス権を取得/設定できますが、
VBA だとできない(オヤヂにはその方法がわからない)・・・
こんなときは Excel を管理者権限で実行すればOKです。
上のリンクに書いた内容を転載します。
Excel でこんなシートを作りました。
![](https://blogimg.goo.ne.jp/user_image/71/46/1cffddd5ecd5a5d0abf477b2096ba1ba.png)
Target Folder(フォルダーを作る対象のフォルダー)を C2 に入力。
New Folder(作りたい新フォルダー名)を C4 に入力。
ボタン [Create Folder] を押すと、Target Folder に New Folder が作成されます。
ボタンのコード(VBA)は次のとおり。
-------------------------------------------
Private Sub btnCreateFolder_Click()
Dim objShell
Dim objFolder
Dim targetFolderPath 'As String -- you should not add "As String"
Dim newFolderName 'As String -- you should not add "As String"
' --- input check: target folder [C2]
targetFolderPath = Range("C2").Value
If (targetFolderPath = "") Then
MsgBox "Input target folder path [C2]"
Exit Sub
End If
' --- input check: new folder name [C4]
newFolderName = Range("C4").Value
If (newFolderName = "") Then
MsgBox "Input new FolderName [C4]"
Exit Sub
End If
' --- directory check if it exists
If (Dir(targetFolderPath & "\" & newFolderName, vbDirectory) <> "") Then
MsgBox "Error: [" & newFolderName & "]" & " has already existed"
Exit Sub
End If
' --- create new folder
Set objShell = CreateObject("shell.application")
Set objFolder = objShell.Namespace(targetFolderPath)
If (Not objFolder Is Nothing) Then
objFolder.newFolder (newFolderName)
MsgBox "OK: [" & newFolderName & "]" & " has been created"
End If
Set objFolder = Nothing
Set objShell = Nothing
End Sub
-------------------------------------------
通常どおり Excel を起動してこのコードを実行すると、書き込みできない旨のエラーが発生します。
![](https://blogimg.goo.ne.jp/user_image/78/e5/1b7127326b25124128a94a34c164bf9d.png)
C:\Program Files フォルダーはシステムフォルダーの一つなので、
そこにフォルダーやファイルを作ったり削除したりするには管理者権限が必要だからです。
なので、Excel を管理者として実行すれば良い・・・ということになります。
管理者権限で実行するには・・・
Excel を右クリックして[管理者として実行]を選択します。
![](https://blogimg.goo.ne.jp/user_image/29/4e/36c2814fed6eadcbae3f2e5687535ad3.png)
(上の絵はデスクトップ上のショートカット Excel を右クリックしたもの)
# ここで「ユーザーアカウント制御」(UAC)確認があるので、[はい]を選択。
![](https://blogimg.goo.ne.jp/user_image/79/59/ececae961136f7352576600056ce3dac.png)
![](https://blogimg.goo.ne.jp/user_image/13/1b/6a66f71fbd81b52396f4443b2c7a5500.png)
それから、フォルダーを追加する Excel ファイル(ブック)を開いて、実行すればOK。
ひと手間増えますが、システムフォルダーに変更を加えるような VBA を実行することは少ないと思うので
これで十分だと思います。
管理者権限を取得するコードを書くわけではないので、最もお手軽・・・
でも、VBA で管理者権限を取得する方法をご存知でしたら、ぜひご一報ください m(__)m
---------------------------------------------------------
ブログ記事についてのお問い合わせは「質疑応答 掲示板」で・・・
![](https://blogimg.goo.ne.jp/user_image/74/f8/4c92568b05b542c5adef7ac20a148706.png)
ここをクリックして、北窓舎のサイトにもお立ち寄りください・・・
Excel VBA で "Program Files" フォルダーに新しいフォルダーを追加したい
(が、システムフォルダーなので書き込み不可となる)
How to Write create new folder in Program file with VBA ??
C# とか VB だとシステムフォルダーのアクセス権を取得/設定できますが、
VBA だとできない(オヤヂにはその方法がわからない)・・・
こんなときは Excel を管理者権限で実行すればOKです。
上のリンクに書いた内容を転載します。
Excel でこんなシートを作りました。
![](https://blogimg.goo.ne.jp/user_image/71/46/1cffddd5ecd5a5d0abf477b2096ba1ba.png)
Target Folder(フォルダーを作る対象のフォルダー)を C2 に入力。
New Folder(作りたい新フォルダー名)を C4 に入力。
ボタン [Create Folder] を押すと、Target Folder に New Folder が作成されます。
ボタンのコード(VBA)は次のとおり。
-------------------------------------------
Private Sub btnCreateFolder_Click()
Dim objShell
Dim objFolder
Dim targetFolderPath 'As String -- you should not add "As String"
Dim newFolderName 'As String -- you should not add "As String"
' --- input check: target folder [C2]
targetFolderPath = Range("C2").Value
If (targetFolderPath = "") Then
MsgBox "Input target folder path [C2]"
Exit Sub
End If
' --- input check: new folder name [C4]
newFolderName = Range("C4").Value
If (newFolderName = "") Then
MsgBox "Input new FolderName [C4]"
Exit Sub
End If
' --- directory check if it exists
If (Dir(targetFolderPath & "\" & newFolderName, vbDirectory) <> "") Then
MsgBox "Error: [" & newFolderName & "]" & " has already existed"
Exit Sub
End If
' --- create new folder
Set objShell = CreateObject("shell.application")
Set objFolder = objShell.Namespace(targetFolderPath)
If (Not objFolder Is Nothing) Then
objFolder.newFolder (newFolderName)
MsgBox "OK: [" & newFolderName & "]" & " has been created"
End If
Set objFolder = Nothing
Set objShell = Nothing
End Sub
-------------------------------------------
通常どおり Excel を起動してこのコードを実行すると、書き込みできない旨のエラーが発生します。
![](https://blogimg.goo.ne.jp/user_image/78/e5/1b7127326b25124128a94a34c164bf9d.png)
C:\Program Files フォルダーはシステムフォルダーの一つなので、
そこにフォルダーやファイルを作ったり削除したりするには管理者権限が必要だからです。
なので、Excel を管理者として実行すれば良い・・・ということになります。
管理者権限で実行するには・・・
Excel を右クリックして[管理者として実行]を選択します。
![](https://blogimg.goo.ne.jp/user_image/29/4e/36c2814fed6eadcbae3f2e5687535ad3.png)
(上の絵はデスクトップ上のショートカット Excel を右クリックしたもの)
# ここで「ユーザーアカウント制御」(UAC)確認があるので、[はい]を選択。
![](https://blogimg.goo.ne.jp/user_image/79/59/ececae961136f7352576600056ce3dac.png)
![](https://blogimg.goo.ne.jp/user_image/13/1b/6a66f71fbd81b52396f4443b2c7a5500.png)
それから、フォルダーを追加する Excel ファイル(ブック)を開いて、実行すればOK。
ひと手間増えますが、システムフォルダーに変更を加えるような VBA を実行することは少ないと思うので
これで十分だと思います。
管理者権限を取得するコードを書くわけではないので、最もお手軽・・・
でも、VBA で管理者権限を取得する方法をご存知でしたら、ぜひご一報ください m(__)m
---------------------------------------------------------
ブログ記事についてのお問い合わせは「質疑応答 掲示板」で・・・
![](https://blogimg.goo.ne.jp/user_image/74/f8/4c92568b05b542c5adef7ac20a148706.png)
ここをクリックして、北窓舎のサイトにもお立ち寄りください・・・