Category
Recent Entries
Search
Archive
Navigation
ホーム 戻る サイトマップ
Appeals
にわか日ハムファン友の会
Syndicate
RSS 1.0
Powered
Powered by blosxom 2.1.2

[Access] 全てのオブジェクトをテキストとして保存する。

転ばぬ先の杖程度。


'----------------------------------------------------------------------
'   Sub : gsub_SaveAsText
'         全てのオブジェクトをテキストとして保存する
'         復旧にはLoadFromTextを用いる
'         例) LoadFromText acDataAccessPage, "", "ファイルパス"
'----------------------------------------------------------------------
Public Sub gsub_SaveAsText()
    Dim obj     As Object
    Dim i       As Long
    Dim strDir  As String
    Dim strName As String
    Dim tdf     As TableDef
    Dim qdf     As QueryDef
On Error Resume Next

    strDir = CurrentProject.Path & "\SaveAsText\"
    If (PathIsDirectory(strDir) = False) Then
        MkDir strDir
    End If

'---< TABLE >
    SaveAsText acDataAccessPage, "", strDir & "Tables" & gcntExtensionTxt
'---< QUERY >
    For Each qdf In CurrentDb.QueryDefs
        strName = qdf.Name
        If Not (Left(strName, 1) = "~") Then
            SysCmd acSysCmdSetStatus, strName & " Exporting..."
            SaveAsText acQuery, strName, strDir & strName & gcntExtensionTxt
        End If
    Next qdf
'---< FORM >
    For i = 0 To CurrentProject.AllForms.Count - 1
        strName = CurrentProject.AllForms(i).Name
        SysCmd acSysCmdSetStatus, strName & " Exporting..."
        SaveAsText acForm, strName, strDir & strName & gcntExtensionTxt
    Next i
'---< REPORT >
    For i = 0 To CurrentProject.AllReports.Count - 1
        strName = CurrentProject.AllReports(i).Name
        SysCmd acSysCmdSetStatus, strName & " Exporting..."
        SaveAsText acReport, strName, strDir & strName & gcntExtensionTxt
    Next i
'---< MACRO >
    For i = 0 To CurrentProject.AllMacros.Count - 1
        strName = CurrentProject.AllMacros(i).Name
        SysCmd acSysCmdSetStatus, strName & " Exporting..."
        SaveAsText acMacro, strName, strDir & strName & gcntExtensionTxt
    Next i
'---< MODULE >
    For i = 0 To CurrentProject.AllModules.Count - 1
        strName = CurrentProject.AllModules(i).Name
        SysCmd acSysCmdSetStatus, strName & " Exporting..."
        SaveAsText acModule, strName, strDir & strName & gcntExtensionTxt
    Next i

'---< END >
    MsgBox "Done.", vbInformation

End Sub

[Access] データベースウィンドウ非表示


'---< データベースウィンドウ非表示 >
    DoCmd.SelectObject acForm, Me.Name, True
    DoCmd.RunCommand acCmdWindowHide

フォームに記述する場合のサンプル。 先にSelectObjectで自分自身を選択しておくのがミソ。

[Access] 半角全角混じりの文字列をぴったり60Byteに揃える

下の例ではmcntDetail(定数),mrst!ItemName(レコードセットから取り出した品名)を60byteまで削るか、60byte以下ならスペースで補完して返す。 固定長テキストの作成時のサンプル。


Dim i       As Long
Dim strTemp As String
Dim str     As String

strTemp = mcntDetail & " " & mrst!ItemName
i = LenB(StrConv(strTemp, vbFromUnicode))
If (i > 60) Then
    Do Until (i <= 60)
        strDetail = Left(strTemp, Len(strTemp) - 1) 'LENで削り、LENBでカウント
        i = LenB(StrConv(strTemp, vbFromUnicode))   '全角文字がLENBで切断されるとNULL文字が発生する
    Loop
End If
i = 60 - LenB(StrConv(strTemp, vbFromUnicode)) '不足分を補完
str = str &strTemp & Space(i)                  'ぴったり60Byteに

[Access] Microsoft Office Service Pack URL

Microsoft Office 2000

Microsoft Office XP

Microsoft Office 2003

Microsoft Office 2007

[Access] 値が入力されているかを調べる

人の目には同じような空のコントロール、あるいはフィールドに見えても、 実際にはNull、Empty、ゼロ桁文字列などの別の値が格納されていることがある。 フォーム上で省略不能項目のチェックを行ったり、レコードセット上で値の有無をチェックしたいとき、 汎用の関数を定義していると便利だ。
以下の関数を定義し、「gfnc_value(調べたい値 or コントロール名)=True」なら何か値が入力されている。


'--------------------------------------------------
'   Function : gfnc_Value
'              入力チェック
'              varValue   : 処理文字列
'--------------------------------------------------
Public Function gfnc_Value(ByVal varValue As Variant) As Boolean

    If (IsEmpty(varValue) = True) Then
        Exit Function
    End If
    If (IsNull(varValue)) Then
        Exit Function
    End If
    If (varValue = vbNullString) Then
        Exit Function
    End If
    If (StrComp(varValue, "") = 0) Then
        Exit Function
    End If

'---< CHECK OK >
    gfnc_Value = True

End Function

vbNullStringについての判別は、StrCompを用いた「""(ゼロ桁文字列)」の判別より前におくべきである(2007-05-15修正)。 でないと、InputBoxでキャンセルした返り値で実行時エラー5が発生する。 InputBoxの返り値は空でOKしたものもキャンセルで回避したものもvbNullStringと判断されるが、 これを区別する場合にはStrPtr関数を使う。

[Access] テーブルを削除する

VBAから任意の名称のテーブルを削除する。


	DoCmd.DeleteObject acTable, "テーブル名"

[Access] テーブルが存在するか調べる

データベースmdb内に任意名のテーブルがあるかどうかを調べる。 テーブルを処理毎に作り直す等の場合に利用する。


'----------------------------------------------------
'   Function : Table-Exist-Check
'----------------------------------------------------
Public Function gfnc_ExistTable(ByVal strTableName As String) As Boolean
    Dim dbs As Database
    Dim rst As Recordset
    Dim tdf As TableDef

    Set dbs = CurrentDb

'---< LOOP TABLEDEFS >
    For Each tdf In dbs.TableDefs
        If (tdf.Name = strTableName) Then
            gfnc_ExistTable = True
            Exit For
        End If
    Next tdf

End Function

gfnc_ExistTable("テーブル名")がTrueを返せば、その名称のテーブルが存在する。

Page : 1/2 ( 1 2 )