ACCESS でCSV出力ツール作ってみた(その4)

で実際にフォームでプログラムを使用する際に埋め込んでみたわけです。

まあグタグタですな。ダイアログボックスはNETで調べると案外出てます。色々調べて完成はさせてみましたが、フォーマット固定が多いんでどう使うかは考えものです。
アップローダあればアップして、いろんな人に評価して頂いてソースを綺麗にしたいです。


'#
'# 参照ボタンクリック(CSV取込)
'#
Private Sub Cmd_import_Click()          '参照ボタンクリック時(データインポート)

    Dim j, k As Integer                     '複数strpass選択時のカウンタ
    Dim m, n As Integer                     'テーブル名取得用カウンタ
    Dim strpass As String                   'インポート対象パス
    Dim strVal As Boolean                   '関数結果受け取り
    Dim strFName As String                  'テーブル名取得用、ファイル名入力用
    Dim strpassW As String                   'インポートパス分割ワーク用
    Dim strMsg As String
   
    Dim strSheetName As String              'EXCEL取込時のシート名格納用
   
    'テーブルバックアップ用
    Dim strTableName  As String                       'テーブル名
    Dim db_Dao As DAO.Database
    Dim TableLoop As TableDef
    
    '拡張子判別用
    Dim strEXT As String                    '拡張子格納用
   
    '関数受取
    Dim strRtn As String
   
   
    '//* ダイアログでファイル選択
    strpass = Dialog.MGetFile("D:\Documents and Settings\a20626\My Documents")               'ダイアログ呼び出し
    'strpassを選択していない場合は何もしない
    If strpass = "" Then
        Exit Sub
    End If
   
    '//* テーブルバックアップ
        Set db_Dao = CurrentDb
        For Each TableLoop In db_Dao.TableDefs
           strTableName = TableLoop.Name                    'テーブル名取得
       
        '特殊テーブルは除外:テーブルバックアップ
           If Left(strTableName, 2) <> "MS" And Left$(strTableName, 3) <> "~TM" And Left$(strTableName, 4) <> "USys" Then
                  If TableOparate.TableExists(strTableName) = True Then
                        strVal = TableOparate.Tablebkup(strTableName)
                  End If
           End If
         Next TableLoop
   
    j = 0               'カウンタに0をセット
    k = Len(strpass)    '文字長を取得する
   
    'ファイル名の文字数をカウントする
    Do Until k <= 0
       j = InStr(k, strpass, "\")
       If j > 0 Then
            Exit Do
       End If
       k = k - 1
    Loop
   
   
    '//* ファイルのテーブルへの取込
    'テーブル用ファイル名取得
    '  ①最終文字でなければ分解する
    ' ②フルパス文字列から改行コード直前までの文字列を取得(strpassW)
    ' ③フルパス文字列の改行コード以降の文字列を取得(strpass)
    ' ④ファイル名を取得する
    ' ⑤CSVインポート

'砂時計開始
    Application.Screen.MousePointer = 11
   
    Do Until strpass = ""
    
     '選択したファイル名の分解)
       If InStr(strpass, vbCr) <> 0 Then                         '最終文字列を取得できるようにするための条件
         '改行コードの直前までを取り出し
             strpassW = Left$(strpass, InStr(strpass, vbCr) - 1)
         '改行コードの直後から取り出し
             strpass = Mid$(strpass, InStr(strpass, vbLf) + 1)
       Else
             strpassW = strpass
             strpass = ""                                        '最終取込後に初期化してループを抜ける様にする
      
       End If
      
       strFName = FileOparate.FileNameGet(strpassW, 5)   'テーブル名生成用
      
       strMsg = strpassW & Chr(13) & "ファイルを取込みます。" & _
                "取込テーブルは" & strFName & "となります。" & _
                Chr(13) & "よろしければ、OKをクリックして下さい。"
    
       If strFName = "" Then
           Exit Sub
       End If
        
       If MsgBox(strMsg, vbOKCancel) = vbOK Then
             strEXT = FileOparate.FileNameGet(strpassW, 3)               '拡張子取得
             Select Case strEXT
                 Case Is = ".csv", ".txt"
                         strRtn = Csv_op.FromCSV(CONFIGTABLENAME, strFName, strpassW, strEXT)
                
                 Case Is = ".xls"
                        
                          strSheetName = InputBox("取込EXCELのシート名を指定してください。")
                          strRtn = FromExcel(CONFIGTABLENAME, strFName, strpassW, strSheetName)
                
                 Case Else
                        MsgBox "取込めないファイルを選択している可能性があります。" & Chr(13) & _
                               "TXT,CSV,XLSのいずれかのデータを選択してください。"
                                Application.Screen.MousePointer = 0
             End Select
        End If
   
    Loop
       
    '//* 終了
    If strRtn = "True" Then
         Application.Screen.MousePointer = 0
         MsgBox strFName & "をテーブルに取込みました。", vbInformation
        Exit Sub
    Else
         Application.Screen.MousePointer = 0
         MsgBox "処理を中断しました。もう一度やり直してください。", vbCritical
    End If

End Sub

Private Sub b_Sort_Click()
'#
'# 並替ボタンクリック(データ並替)
'#

    Dim strIname As String
    Dim strOname As String
    Dim strRtn As String
   
    strIname = InputBox("取込んだファイルの名前を入力してください。")
    strOname = InputBox("出力するテーブル名を入力してください。")

   
    If strIname <> "" And strOname <> "" Then
        strRtn = DataSort.Sorter(TRASFERTABLENAME, strIname, strOname)
    Else
        MsgBox ("ファイル名を入力してください。")
        Exit Sub
    End If


    If strRtn = "True" Then
        MsgBox ("処理が完了しました。")
    Else
       MsgBox "処理を中断しました。もう一度やり直してください。" & Chr(13) & "取込ファイル名が誤っている可能性が考えられます。", vbCritical
    End If

End Sub

Private Sub Cmd_export_Click()      '保存ボタンクリック(データエクスポート)
'#
'# 保存ボタンクリック(EXCELにエクスポート)
'#

    Dim strac As String
    Dim varFlname As String
    Dim strMsg As String
    Dim strOext As String
    Dim strSheetName As String

    '関数受取
    Dim strRtn As String

    strac = InputBox("出力テーブル名を入力してください。")                '出力テーブルの指定
   
    If strac <> "" Then
        varFlname = oDialog.GetFile("")
        strMsg = strac & " を、ファイルへ出力します。" & _
                 "出力先は" & Chr(13) & varFlname & "です。" & _
                  "よろしければ、OKをクリックして下さい。"
    Else
        MsgBox ("出力テーブル名が入力されていません。")
        Exit Sub
    End If
   
    If varFlname = "" Then
        Exit Sub
    End If
       
        If MsgBox(strMsg, vbOKCancel) = vbOK Then
           '砂時計開始
            Application.Screen.MousePointer = 11
            strOext = FileOparate.FileNameGet(varFlname, 3) '//拡張子取出
            Select Case strOext
           
                Case Is = ".csv", ".txt"
                        strRtn = Csv_op.ToCsv(strac, varFlname, strOext)
                       
                Case Is = ".xls"
                        '出力シートの指定
                        strSheetName = InputBox("出力先のシート名を入力してください。")
                        strRtn = Excel_op.ToExcel(strac, varFlname, strSheetName)
               
                Case Else
                        MsgBox "出力できないファイルを選択している可能性があります。" & Chr(13) & _
                               "TXT,CSV,XLSのいずれかのデータを選択してください。"
                                Application.Screen.MousePointer = 0
                        Exit Sub
            End Select
         End If

    If strRtn = "True" Then
        Application.Screen.MousePointer = 0
        '//* バックアップテーブル削除
        Call TableOparate.TableDel
        MsgBox strac & "データを出力しました。", vbInformation
        Exit Sub
    Else
        Application.Screen.MousePointer = 0
        MsgBox "処理を中断しました。もう一度やり直してください。" & Chr(13) & "出力したいテーブル名が誤っている可能性が考えられます。", vbCritical
    End If
       
End Sub

コメント

このブログの人気の投稿

証券外務員1種勉強(計算式暗記用メモ)

GASでGoogleDriveのサブフォルダとファイル一覧を出力する

マクロ経済学(IS-LM分析)