北の窓から(芦田っち)

PC関連と私的雑感のブログ。
2015年7月10日、カッコ内に名前を加えました。昔の友だちに気付いてほしくて・・・

おやぢチップス (55) : Excel VBA でシステムフォルダーに変更を加えるには

2017-01-04 12:13:51 | おやぢチップス
MSDN Forum でこんな質問がありました。

  Excel VBA で "Program Files" フォルダーに新しいフォルダーを追加したい
  (が、システムフォルダーなので書き込み不可となる)

  How to Write create new folder in Program file with VBA ??

  C# とか VB だとシステムフォルダーのアクセス権を取得/設定できますが、
  VBA だとできない(オヤヂにはその方法がわからない)・・・

  こんなときは Excel を管理者権限で実行すればOKです。

上のリンクに書いた内容を転載します。

  Excel でこんなシートを作りました。
  

   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 を起動してこのコードを実行すると、書き込みできない旨のエラーが発生します。
  

  C:\Program Files フォルダーはシステムフォルダーの一つなので、
  そこにフォルダーやファイルを作ったり削除したりするには管理者権限が必要だからです。

なので、Excel を管理者として実行すれば良い・・・ということになります。

  管理者権限で実行するには・・・
  Excel を右クリックして[管理者として実行]を選択します。
  
  (上の絵はデスクトップ上のショートカット Excel を右クリックしたもの)

  # ここで「ユーザーアカウント制御」(UAC)確認があるので、[はい]を選択。
    
    

  それから、フォルダーを追加する Excel ファイル(ブック)を開いて、実行すればOK。

  ひと手間増えますが、システムフォルダーに変更を加えるような VBA を実行することは少ないと思うので
  これで十分だと思います。

  管理者権限を取得するコードを書くわけではないので、最もお手軽・・・

でも、VBA で管理者権限を取得する方法をご存知でしたら、ぜひご一報ください m(__)m

---------------------------------------------------------
ブログ記事についてのお問い合わせは「質疑応答 掲示板」で・・・


ここをクリックして、北窓舎のサイトにもお立ち寄りください・・・
ジャンル:
ウェブログ
コメント   この記事についてブログを書く
この記事をはてなブックマークに追加
« お年賀がわりに・・・ DataGr... | トップ | 仮想メモリーは必要だった・・・ »
最近の画像もっと見る

コメントを投稿

おやぢチップス」カテゴリの最新記事

トラックバック

この記事のトラックバック  Ping-URL