フォルダの作成 【途中の階層を含めてフォルダを作る】

'フォルダの作成 【途中の階層を含めてフォルダを作る】

'フォントの関係で円マークは全角の¥で記述しています
'全文丸ごとコピーしたら文字変換で全角の¥を半角の¥にして下さい
'
'アドイン(mda)かaccdbの標準モジュールに記載します
'引数(フォルダ名)を指定して関数を実行します



Option Compare Database
Option Explicit


'*****************************************************************************
'関数名:  procMakeFolder(フォルダ名)
'機  能:  フォルダの作成
'引  数:  フォルダ名(string型)
'戻り値:  なし
'
'【解説】
' ① 作りたいフォルダ名を指定して関数を実行
' ② フルパス名であればフルパスでフォルダを作成
' ③ フルパスでなければ自パスにフォルダが作られる
' ④ すでにフォルダが存在していれば何もしない
' ⑤ フォルダ名引数が空白ならば何もせずに終了する
' ⑥ フォルダ名は途中の階層で存在しないフォルダがあれば全てフォルダが作られる
'****************************************************************************

'フォルダを作成するためのWindowsAPI
Private Declare Function MakeSureDirectoryPathExists _
  Lib "imagehlp.dll" (ByVal lpPath As String) As Long


Function procMakeFolder(ByVal strFolderName As String)


    Dim DB              As DAO.Database                     'パス名を取得するためのDAO
    Dim FSO             As Object                           'FileSystemObject
    Dim fFile           As Object                           'File
    Dim strMyFullPath   As String                           'フルパス名  例("C:¥temp")
    Dim strMyFoldName   As String                           '自パス名

    Dim bytActSW        As Byte                             '処理区分
   
    '------------------------------
    '自パス名を取得
    '------------------------------
    Set DB = CurrentDb()
    strMyFullPath = Trim(DB.Name)
   
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set fFile = FSO.GetFile(strMyFullPath)

    strMyFoldName = FSO.GetParentFolderName(fFile) '末尾¥なし
   
    'フォルダ名がドライブ名の時、末尾に¥が付くので取り除く
    If Right(pstrMyFoldName, 1) = "¥" Then
        pstrMyFoldName = Left(pstrMyFoldName, 2)
    End If
   
    Set fFile = Nothing
    Set FSO = Nothing
    Set DB = Nothing
    '------------------------------
    '指定されたフォルダ名を設置
    '------------------------------
    strFolderName = Trim(strFolderName)
    bytActSW = 0
    '------------------------------
    '入力がない場合、自フォルダとなる
    '------------------------------
    If Len(strFolderName) = 0 Then
        bytActSW = 0  '処理せず
    '------------------------------
    '入力がある場合
    '------------------------------
    Else

        If Mid(strFolderName, 2, 2) = ":¥" Then             'ドライブ名から指定あり
            bytActSW = 1                                    'そのままフォルダ作成
        Else
            If Left(strFolderName, 2) = "¥¥" Then           'ネットワークから指定あり
                bytActSW = 1                                'そのままフォルダ作成
            Else
                If Left(strFolderName, 1) = "¥" Then        '¥付きフォルダ名のみの指定
                    bytActSW = 2                            'フルパス化して作成
                Else                                        '¥なしフォルダ名のみの指定
                    bytActSW = 3                            '¥付けてフルパス化して作成
                End If
            End If
        End If
    End If

    '------------------------------
    'フォルダ名編集
    '------------------------------
    Select Case bytActSW
        Case 0                                              '空白につき処理せず
   
        Case 1                                              'そのままフォルダ作成
      
        Case 2                                              '¥付き フルパス化して作成
            strFolderName = strMyFoldName & strFolderName
       
        Case 3                                              '¥なし フルパス化して作成
            strFolderName = strMyFoldName & "¥" & strFolderName
       
        Case Else                                           '何もしない
            bytActSW = 0
    End Select
    '------------------------------
    'フォルダ作成実行
    '------------------------------
    If bytActSW > 0 Then
   
        'このAPIは必ず末尾に¥を付ける
        If Right(strFolderName, 1) <> "¥" Then
            strFolderName = strFolderName & "¥"
        End If
   
        '□□□□□□□□□□□□□□□
        'フォルダ作成
        '□□□□□□□□□□□□□□□
        MakeSureDirectoryPathExists (strFolderName)
    End If

End Function

このオブジェクトに値を代入することはできません

このオブジェクトに値を代入することはできません


フォームを作って、そのフォームのレコードソースにテーブルを指定します。
まあ、通常のフォームウィザードでテーブルを選んでフォームを作ったとして下さい。

もちろんテキストボックスのコントロールソースには、テーブルのフィールドが指定されています。
(ここら辺もフォームウィザードで自動でできたコントロールですね)

そして、フォームの閉じる時(Form_Close)のイベントで、
テキストボックスへ何か値を入れた、・・・とします。(ここの部分は手入力)

そうすると、「このオブジェクトに値を代入することはできません」と出て、はまってしまいました。

で、解決策ですが、
「読み込み解除時」イベントに、テキストボックスへ値を入れると正常に完了します。


Form_Unload と Form_Close の間のタイミングで、テーブルが閉じてしまうみたいです。


「このオブジェクトに値を代入することはできません」が出る、
というのはいろいろなケースが考えられますし、
Form_Unload に記述すれば間違いなし、とは言い切れませんが、
まあ、いくつかの現象の中で試してみてもいい対応策でしょう。

では。

フォームの色の値指定

フォームの色の値指定

ACCESS 2010 になってから、フォームのプロパティに色の設定が、
「背景 1, 暗め 5%」
とかになっていて、なんだこれ、という気分にさせられます。
そんな明るかろうが、暗かろうが、何%だろうが、どうでもよくって、
色が決まって指定できればどうでもいいと思うのですが、どうなんでしょうね。

そこで、特定の数字を入れれば色を指定できるので、一覧を作ってみました。
参考にして下さい。

0          黒     (black)
16777215    白     (white)
255         赤     (red)
65280       明るい緑 (lime)
16711680    青     (blue)
65535       黄     (yellow)
16711935    ピンク   (fuchsia)
16776960    水色    (aqua)
128        濃い赤   (maroon)
32768       緑      (green)
8388608     濃い青   (navy)
32896       濃い黄   (olive)
8388736     紫     (purple)
8421376     青緑    (teal)
12632256    灰      (silver)
8421504     濃灰    (gray)


2010 フォームのプロパティ一覧

ACCESS 2010 のフォームのプロパティ一覧


【書式】

標題
既定のビュー
フォームビューの許可
データシートビューの許可
ピボットテーブルビューの許可
ピボットグラフビューの許可
レイアウトビューの許可
ピクチャタイプ
ピクチャ
ピクチャ全体表示
ピクチャ配置
ピクチャサイズ

自動中央寄せ
サイズ自動修正
画面に合わせる
境界線スタイル
レコードセレクタ
移動ボタン
ナビゲーションタイトル     
区切り線
スクロールバー
コントロールボックス
閉じるボタン
最小化/最大化ボタン
移動可能
分割フォームのサイズ
分割フォームの方向
分割フォームの分割バー
分割フォームデータシート
分割フォームの印刷
分割バ-の位置の保存
展開したサブデータシート
サブデータシートの高さ
X軸グリッド数
Y軸グリッド数
プリンタフォント
方向
パレット元



【データ】
レーコードソース     
レーコードセット     
既定値を取得     
フィルター     
読み込み時に並べ替えを適用     
後処置まで待機する     
データ入力用     
追加の許可     
削除の許可     
更新の許可     
フィルターの使用     
レコードロック     



【イベント】
レコード移動時     
読み込み時     
クリック時     
更新後処理     
更新前処理     
挿入前処理     
挿入後処理     
削除前確認     
レコード削除時     
削除後確認     
ダーティー時     
フォーカス取得後     
フォーカス喪失後     
ダブルクリック時     
マウスボタンクリック時     
マウスボタン解放時     
マウスボタン移動時     
キー解放時     
キークリック時     
キー入力時     
取り消し時     
開く時     
閉じる時     
サイズ変更時     
アクティブ時     
非アクティブ時     
読み込み解除時     
エラー時     
マウスホイール使用時     
フィルター設定時     
フィルター実行時     
タイマー時     
タイマー間隔     
選択対象変更時     
描画開始時     
最終描画終了後     
描画終了後     
レイアウト後     
接続時     
切断時
クエリ実行前
クエリ実行時
データ変更時
データセット変更時
コマンド実行時
コマンド実行前時
コマンド有効時
コマンドチェック時
ビュー変更時
ピボットテーブルの変更時
ヒント表示前
キーボードイベント取得



【その他】
ポップアップ
作業ウィンドウ固定
Tabキー移動
リボン名
ツールバー  
ショートカットメニュー
メニューバー
ショートカットメニューバー
ヘルプファイル
ヘルプコンテキストID
コード保持
既定の用紙サイズの使用
高速レーザー印刷
タグ

ACCESS に引数を指定して開く方法 (Command文)

ACCESS に引数を指定して開く方法 (Command文)


ACCESSを開く時、引数を与えることができます。
つまり例として、ACCESSを開く時、"ABC"という文字を与えて開くことができます。

◇たとえば、ACCESSを開く時に"ABC"ならば処理1、
"DEF"ならば処理2、というような実行命令を可変させたい場合、とか・・・

◇日付を与えてACCESSを開いたなら自動的にその日付で計算する、とか・・・


◆実際にテストで試してみましょう

(1) まず、空のDatabase1.accdbを作ります

(2)  モジュールに次の3行のみのFunctionを作ります。

Function procTEST()
     MsgBox (Commnd)
End Function

これだけです。
モジュール名は何でもOKで、Module1としておきます。

(3) 自動実行マクロを作ります。
命令は、「プロシージャの実行」
プロシージャ名は、「procTEST()」
マクロの保存名は、autoexec

(4) これで一度Database1.accdbを保存して閉じます。

(5) 次にDatabase1.accdbのショートカットを作ります。

(6) ショートカットを右クリしてプロパティを表示
リンク先に次のように書き加えます。(赤字の部分)

C:\Temp\Database1.accdb /cmd "ABC"

(7) プロパティのダイログのOKボタンを押して閉じます。

(8) これでショートカットをダブクリして実行してみます。
ACCESS が起動して、次に"ABC"というメッセージボックスが開きます。


◆ つまり・・・
ACCESS の起動させるコマンド文に、"/cmd XXXXXXXX" という引数を付けると

ACCESS内部では、/cmd 以下の文字が、
Commnd という命令文で取り出せるということです。

Commnd という一つの変数のようなものですね。


◆ もし、/cmd 以下の指定がなかったらどうなるのか?
Commnd という命令文で取り出せる文字は0バイトの文字でした。
Nullではありませんでした。


試してみて下さい。

livedoor プロフィール
タグクラウド
QRコード
QRコード
  • ライブドアブログ