Access VBAでフォルダ権限をチェックする

このQ&Aのポイント
  • Access VBAを使用して、フォルダの存在を確認し、権限をチェックする方法について教えてください。
  • フォルダの有無を確認し、存在する場合はアクセス権限をチェックし、指定のフォルダ内にmdbファイルを作成したいです。しかし、権限のチェック方法がわかりません。
  • Access VBAでフォルダのアクセス権限をチェックし、存在する場合には指定のフォルダ内にmdbファイルを作成する方法を教えてください。
回答を見る
  • ベストアンサー

Access VBA で フォルダ権限をチェックする

フォルダの有無を以下のようにチェックして フォルダがあった場合はフォルダの権限をチェックしてそのフォルダ内にmdbを作成するという事を行いたいのですが、 フォルダのアクセス権限かあるかどうかのチェックの仕方がわかりません。 Dim ExtDirName1 AS String ExtDirName1 = "C:\TEMP If (objFileSys.FolderExists(ExtDirName1) = True) Then   'ここでフォルダのアクセス権限をチェック 'フォルダがあった場合はこのフォルダにmdbを作成 End IF よろしくお願いします。

  • rariko
  • お礼率28% (223/790)

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

  • ベストアンサー
回答No.1

MDB を作成 ( CreateDatabase ? ) するところを On Error GoTo ... でトラップしてやるのが簡単だと思いますけど・・・。 API の GetFileSecurity を使用してやれば、アクセス権があるかどうか調べることができると思います。なかなか面倒臭そうな気がしますが。 http://www.vbstation.net/spec/S6.htm にサンプルがあるみたいですので、見てみてはいかがでしょうか。

rariko
質問者

お礼

ご丁寧にご回答ありがとうございました。 やはり面倒だったので、おっしゃるとおりに On Error GoTo でトラップしてやることにしました。

関連するQ&A

  • vbsのFolderExistsで部分一致をさせたい

    VBSで以下のコードを作成しましたが動作しません。 ********動作しない************************** if (objFileSys.FolderExists("200810*")= True) then  msgbox "yes" else  msgbox "no" end if ********動作する************************** if (objFileSys.FolderExists("200810")= True) then  msgbox "yes" else  msgbox "no" end if 部分一致でフォルダが存在するかをしたいのですが、 どうしたらいいのでしょうか。 よろしくお願いします。

  • フォルダの中に本日付けのフォルダが存在するか確認し、

    フォルダの中に本日付けのフォルダが存在するか確認し、 存在した場合メッセージをだしたいのですが、実際存在するのに もかかわらずメッセージが表示されません。 ちなみにシートのD1にDATE関数が入っています。 If (fFso.FolderExists(DirPathad) = True)のTrueをFalseにすると メッセージが表示されます。 ・・ですが実行させてDirPathadにカーソルをもってくると2010612のように フォルダ名が表示されます。 何がおかしいのでしょうか? Dim fFso As Object Dim DirPathad As String DirPathad = Year(Range("D1")) & Month(Range("D1")) & Day(Range("D1")) Set fFso = CreateObject("Scripting.FileSystemObject") If (fFso.FolderExists(DirPathad) = True) Then MsgBox "本日付けのフォルダが存在します。" Set fFso = Nothing      End IF

  • アクセスvba if文の記述方法

    検索フォームを作成しました。 入力項目は「氏名」「カナ」で入力チェックをおこなっております。 (未入力)メッセージを表示「未入力です」 (入力有)結果一覧のフォームを表示 未入力チェックは正常に処理されておりメッセージが表示されます。 項目に値を入力した場合フォームが起動しません。 if文から外した場合は正常に実行されます。 この条件の場合if文でどのように記述したらよいのでしょうか。 宜しくお願いします。 Private Sub 検索_Click() Dim mct As Control Dim flg As Boolean flg = False For Each mct In Me.Controls  If mct.ControlType = acTextBox Then   If mct.Tag = "Check" Then    If Not IsNull(mct) Then     flg = True     Exit Sub    End If   End If  End If Next mct If flg = True Then  Dim str As String  str = "[氏名] Like ""*" & Me!氏名 & "*"" And [カナ] Like ""*" & Me!カナ & "*"""  DoCmd.OpenForm "結果一覧", , , str Else  MsgBox ("未入力です") End If End Sub

  • エクセルVBAでフォルダの作成-2

    先ほどダブルクリックすると、クリックしたその名前にしたフォルダを作成して、ハイパーリンクを設定する、ということで質問させていただき、良い回答を頂き質問を閉じましたが、また質問があります。 A列をクリックするとイベントを発生させるのを、 A4セルから、その下のデータが入っているセルまで をイベントが有効な範囲にしたいと思い、考えています。 「If Target.Column = 1 Then」の部分がそれだと思い、 If Target.Range("A4", Range("A" & Rows.Count).End(xlUp)) Then のように考えて実行しましたが、これはダメでした。 このように限られた範囲に変更すにはどのようにすればいいでしょうか? Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Const path As String = "D:\TEMP\倉庫\" Dim wkStr As String  If Target.Column = 1 Then   wkStr = path & Target.Value   If Dir(wkStr, vbDirectory) = vbNullString Then    MsgBox wkStr & "フォルダがありません。作成します。"    MkDir wkStr   Else    MsgBox wkStr & "フォルダは存在します。"   End If   ActiveSheet.Hyperlinks.Add Anchor:=Target, Address:=wkStr  End If End Sub

  • もしフォルダがなかったら作成するというコード

    エクセルvbaで、 フォルダA(FileA)の中のPDFファイル全部を、フォルダB(FileB)へコピーする というコードを作成しました。 が、パスが見つかりませんとエラーが出ます。 その理由は、移動先にフォルダがないからです。 フォルダがない場合は、フォルダを作成するというコードを入れたいのですが、 もしご存知の方いらっしゃいましたら、どうか教えてください。 エクセル2010dを使用しています。 vba初心者で、ここまでネット検索などで作りましたので、いびつかもしれません。 どうぞよろしくお願いいたします。 ---------------------------------- Sub CopyPDFwithFile() 'フォルダ内のPDFを全てAをBへコピー Dim objFileSys As Object Dim strScriptPath As String Dim strCopyFrom As String Dim strCopyTo As String Dim MaxRow As Integer Dim i As Long Dim k As Long Dim FileA, FileB As String n = Range("V6").Value MaxRow = ThisWorkbook.Sheets(n).Cells(11, 22).End(xlDown).Row For i = 1 To MaxRow - 10 FileA = Range("V" & i + 10).Value FileB = Range("W" & i + 10).Value Debug.Print FileA Debug.Print FileB Set objFileSys = CreateObject("Scripting.FileSystemObject") strScriptPath = ThisWorkbook.Path Debug.Print strScriptPath strCopyFrom = objFileSys.BuildPath(FileA, ".pdf") strCopyTo = objFileSys.BuildPath(FileB, "new\.pdf") objFileSys.CopyFile FileA & "\*.pdf", FileB  '←ここでエラー、ストップします Set objFileSys = Nothing                                Next i End Sub ---------------------------------------------

  • もし該当のアクセスファイルが開いているのなら開かな

    エクセルからアクセスを開く方法を教えてください。 そして、 「もし該当のアクセスファイルが開いているのなら開かない」 と言う条件も付け加えたいです。 Sub test1() Dim strAcName As String Dim accApp As Object strAcName = "D:\ アクセスファイル名.mdb " 「GetObject」「CreateObject」どちらにしても結果は同じ? Set accApp = GetObject(strAcName) Set accApp = CreateObject(strAcName) 既にAccessファイルを開いている場合は、Visible = Trueにしたらエラーになる。 If Not accApp Is Nothing Then accApp.Visible = True accApp.OpenCurrentDatabase (strAcName) End If Set accApp = Nothing End Sub だと、 OpenCurrentDatabase の部分で、実行時エラー7867 既にこのデータベースは開いています。 になります。 だからってこの部分をコメントアウトすると 前回と同じように Set accApp = Nothingを通り越すと 折角開いたアクセスファイルが閉じてしまいます。 エクセルからアクセスを開く時にもハイパーリンクで Sub test2() Dim strAcName As String strAcName = "D:\ アクセスファイル名.mdb " ThisWorkbook.FollowHyperlink strAcName End Sub で開けたのですが、 「もし該当のアクセスファイルが開いているのなら開かない」 が出来ないので、 「GetObject」か「CreateObject」を 使って開くのかな?と思っています。

  • エクセル VBA for文について

    再び失礼します。 昨日VBAを始めた初心者です。 1、チェックボタン17個にそれぞれ変数を設定 2、2つだけチェックを入れると仮定して、実行ボタンを押したときに チェックが入っている2つの中で変数の大きいものをMax、小さいものをMinとしてシートに出力したいのですが、”ここ”と書いてあるところに Me("hensuu" & n). hensuu & n など入れてみたのですがエラーになります。 くだらないミスだと思いますがよくわかりません。 どなたかご教授お願いします。 Private Sub CommandButton2_Click() If Check1.Value = True Then hensuu1 = "9" End If If Check2.Value = True Then hensuu2 = "8" End If If Check3.Value = True Then hensuu3 = "7" End If If Check4.Value = True Then hensuu4 = "6" End If If Check5.Value = True Then hensuu5 = "5" End If If Check6.Value = True Then hensuu6 = "4" End If If Check7.Value = True Then hensuu7 = "3" End If If Check8.Value = True Then hensuu8 = "2" End If If Check9.Value = True Then hensuu9 = "1" End If If Check11.Value = True Then hensuu10 = "1/2" End If If Check11.Value = True Then hensuu11 = "1/3" End If If Check12.Value = True Then hensuu12 = "1/4" End If If Check13.Value = True Then hensuu13 = "1/5" End If If Check14.Value = True Then hensuu14 = "1/6" End If If Check15.Value = True Then hensuu15 = "1/7" End If If Check16.Value = True Then hensuu16 = "1/8" End If If Check14.Value = True Then hensuu17 = "1/9" End If Dim n As Long Dim Max As Long Dim Min As Long For n = 1 To 17 If Me("Check" & n).Value = True Then Max = ”ここ” If Me("Check" & n).Value = True Then Exit For Next n For n = Max To 17 If Me("Check" & n).Value = True Then Min = ”ここ” If Me("Check" & n).Value = True Then Exit For Next n Worksheets("Sheet1").Range("A1") = Min Worksheets("Sheet1").Range("B1") = Max MsgBox hensuu End Sub

  • vistaのフォルダ操作、アクセス権限について

    vistaのフォルダ操作、アクセス権限についての質問です。 1. 「フォルダオプション」→「保護されたオペレーティングシステムファイルを表示しない」のチェックを外す 2. その後、表示されるようになったショートカット等から対象フォルダへアクセスしようとしても「アクセスが拒否されました。」とコメントが出て、アクセスできません。 上記のフォルダへのアクセス、またはフォルダ操作をするにはどのようにすれば良いでしょうか? とりあえず管理者権限のアカウントではログインしているんですが・・・

  • アクセス権限がない?!

    Windows 7を使用しています。Windows 8 Release Previewを試してみたくて、VHDを使用してインストールをしました。Windows 7側のユーザーフォルダ内にあるデータを参照しようとしたところ、アクセス権限が必要とでたのでWindows 8側で許可しました。そして、元に戻そうとWindows 8側のアクセス権限をすべて拒否にしてしまいました。 Windows 7側に戻ると、ユーザーファイルにアクセスできないようで、起動のたびに新規ユーザーのような状態で起動してしまいます。 仮にユーザー名を"A"とするなら、"A"のユーザーフォルダとは別に"TEMP"というフォルダが作成され、そちらにデスクトップやドキュメントなどのデータを格納しているようです。シャットダウンすると消えますので、完全に一時的なユーザーフォルダです。 "A"のユーザーフォルダにはWindows 7側でもWindows 8側でもアクセスできません。バックアップはとっていないため、大事なファイルや画像、音楽、Officeのデータなど、消えてこそいないもののアクセスできずに困っています。 私の知識不足が最大の原因ではありますが、アクセス権限を取得するにはどうしたらいいでしょうか? また、最悪データだけでもかまいませんが、Windows 7側では、従来のデスクトップの状態に復元することはできますでしょうか? 

  • VBA チェックした項目以外を非表示

    現在下記のようなコードがあります。 C列に項目が入力されており そのC列に入力されている項目と同じ文字が ユーザーフォームのチェックボックスのキャプションになっています。 今回やりたいのはチェックボックスにチェックした項目以外を 非表示にしたいというものですが 現状は、1つだけのチェックなら正常に機能します。 2つ以上チェックしてしまうとオブジェクト名が大きい方が優先されて しまい1つだけの項目しか表示されません。 どのようにコードを書き換えればよろしいでしょうか? Private Sub CommandButton1_Click() Dim i As Integer Dim d As Date Dim y As Date Dim myMSG As String Dim myFlg As Boolean Dim rng As Range Dim rng2 As Range myFlg = False For i = 1 To 14 If Me.Controls("CheckBox" & i).Value = True Then myMSG = Me.Controls("CheckBox" & i).Caption myFlg = True End If Next i If myFlg = False Then GoTo Label1 End If Set rng2 = Range("C:C").Find(what:=myMSG, lookat:=xlWhole) If rng2 Is Nothing Then MsgBox Me.ComboBox1 & "日に" & myMSG & "は使用していません。", vbInformation Exit Sub Else For x = 2 To Range("C65536").End(xlUp).Row If Range("C" & x).Value <> myMSG Then Rows(x & ":" & x).EntireRow.Hidden = True End If Next x End If End Sub

専門家に質問してみよう