多重層のフォルダを作成する」VBAソースコード:2024年04月18日 22時09分25秒

「多重層のフォルダを作成する」VBAソースコード:

Declare Function SHCreateDirectoryEx Lib "shell32" Alias "SHCreateDirectoryExA" ( _
ByVal hwnd As Long, _
ByVal pszPath As String, _
ByVal psa As Long) As Long

Public Function MkFolder(FL As String) As Boolean
'作成者:jyo_fukyo
'作成日:2024/04/18
'変更日:2024/04/18
'多重層のフォルダ作成

'フォルダの存在確認
If FSO_PH_Check(FL) = True Then
MkFolder = True
Else
'多重層のフォルダ作成
If (MsgBox(FL & "は見つかりませんでした。作成しますか?", 36) = 7) Then
Exit Function
End If
Dim rc As Long
Dim Target As String
Target = FL
rc = SHCreateDirectoryEx(0&, Target, 0&)
If rc = 0 Then
'正常終了
MkFolder = True
Else
'異常終了
MkFolder = False
End If
End If
Exit Function
End Function
Public Function Make_Folder(FL As String) As Boolean
'作成者:jyo_fukyo
'作成日:2024/04/18
'変更日:2024/04/18
'多重層のフォルダ作成

'フォルダの存在確認
If FSO_PH_Check(FL) = True Then
Make_Folder = True
Else
'多重層のフォルダ作成
Dim rc As Long
Dim Target As String
Target = FL
rc = SHCreateDirectoryEx(0&, Target, 0&)
If rc = 0 Then
'正常終了
Make_Folder = True
Else
'異常終了
Make_Folder = False
End If
End If
Exit Function
End Function
Function FSO_PH_Check(Folder_CK As String) As Boolean
'作成者:jyo_fukyo
'作成日:2024/04/18
'変更日:2024/04/18
'フォルダー有無のチェック
'FSOを利用するので、「MicroSoft Scripting Runtime」の参照設定が必須!

Dim cFso As FileSystemObject 'オブジェクト変数宣言

Set cFso = New FileSystemObject '変数にオブジェクトの代入

If cFso.FolderExists(Folder_CK) Then
FSO_PH_Check = True 'フォルダー有り
Else
FSO_PH_Check = False 'フォルダー無し
End If
Exit Function
End Function

フォルダの有無を確認して存在しない場合は多重層のフォルダ作成する2016年11月04日 18時07分03秒

フォルダの有無を確認して存在しない場合は多重層のフォルダ作成する
業務用のシステムを作るようになると、一般に紹介されている関数の「使えなさ」に苛立つ事がしばしばあります。
その中でフォルダの作成用の関数「MkDir」は私にとっては代表格です。
どうしてそう思うのか?
多重層のフォルダを作成できないからです。
多重層とは、例えばCドライブの下に「123」というフォルダを作って、さらにその下に「456」というフォルダを作成する事です。
「MkDir」Cドライブの下に「123」というフォルダしか作れないのです!

以下に提示した例は、「FSO_PH_Check」でフォルダの有無を確認して、存在しない場合、多重層でもフォルダを作成してくれるロジックです。

'MkFolderで多重層のフォルダ作成に使います(宣言セクションに記述します!)。
Declare Function SHCreateDirectoryEx Lib "shell32" Alias "SHCreateDirectoryExA" ( _
ByVal hwnd As Long, _
ByVal pszPath As String, _
ByVal psa As Long) As Long
’ここからは標準モジュールに記述します。
Function FSO_PH_Check(Folder_CK As String) As Boolean
'フォルダー有無のチェック
'FSOを利用するので、「MicroSoft Scripting Runtime」の参照設定が必須!

Dim cFso As FileSystemObject 'オブジェクト変数宣言

Set cFso = New FileSystemObject '変数にオブジェクトの代入

If cFso.FolderExists(Folder_CK) Then
FSO_PH_Check = True 'フォルダー有り
Else
FSO_PH_Check = False 'フォルダー無し
End If
End Function
'
Function MkFolder(FL As String) As Boolean
'フォルダの存在確認
If FSO_PH_Check(FL) = True Then
MkFolder = True
Else
If (MsgBox("フォルダ「" & FL & "」が存在しません!作成しますか??", 4) = 7) Then
MkFolder = True
Exit Function
Else
'多重層のフォルダ作成
Dim rc As Long
Dim Target As String
Target = FL
rc = SHCreateDirectoryEx(0&, Target, 0&)
If rc = 0 Then
'正常終了
MkFolder = True
Else
'異常終了
MkFolder = False
End If
End If
End If
End Function

業務ツールを作成する場合、関数「MkDir」は大抵の場合、役に立ちません。
多重層のフォルダを作成する事は、お仕事で利用する場合、必須ですからね!

開発事例


Accessで正規表現を使う2016年11月03日 21時20分17秒

Accessで正規表現を使う

正規表現を使うと、データの中にある文字列を簡単に抽出する事が出来ます。
以下のサンプルは、半角文字を抽出する例です。
使い方は、クエリで関数として使います。

Function Hankaku(STR_STR As String) As String
'参照設定「Microsoft Script Regular Expressions 5.5」
'正規表現を使って検索、抽出した文字列を返す。
On Error Resume Next
'正規表現で半角文字検索
Dim strSample
Dim regPattern
Dim colMatches
Dim objMatch
Dim Seiki_Str As String
Dim Kekka As String

'正規表現のパターンを設定
Seiki_Str = "[ -~]+"’半角文字を検索する正規表現のパターン
'文字列変数「Kekka」の初期化
Kekka = ""
strSample = STR_STR’読み込むデータ(クエリで読み込むデータ)を設定
Set regPattern = New RegExp
regPattern.Pattern = Seiki_Str '検索の正規表現
regPattern.Global = True
Set colMatches = regPattern.Execute(strSample)
For Each objMatch In colMatches
Kekka = Kekka & objMatch
Next

Dim cn As Long
cn = Len(Kekka)
If cn = 0 Then
Hankaku = "半角文字は見つかりませんでした!"
Else
Hankaku = Kekka’見つかった半角文字を返します。
End If

Exit Function
End Function

※正規表現のパターンを変更することで、メールアドレスやURL等の抽出が面倒なデータも簡単に抽出できます。

開発事例


VBAでテキストファイルに出力2016年11月03日 21時05分51秒

VBAでテキストファイルに出力

EUCツールを改修する仕事をした時に、実行時のSQL文を確認したい事がありました。
そんな時に変数で作成されたSQL文をテキストファイルに出力して確認していました。

今回ははExcelでのVBAの事例です。
※以下の例は、Bookが保存されているパスに123.txtという名前でSQL文を出力する例です。

テキストファイルに上書き(Output)で出力
Sub Out_txt()
Dim str_SQL As String
str_SQL = "selext * from tb1;"
Open ThisWorkbook.Path & "\123.txt" For Output As #1
Print #1, str_SQL
Close #1
End Sub

テキストファイルに追記(Append)で出力
Sub Out_txt()
Dim str_SQL As String
str_SQL = "selext * from tb1;"
Open ThisWorkbook.Path & "\123.txt" For Append As #1
Print #1, str_SQL
Close #1
End Sub

テキストファイルに出力するロジックは、知っていると意外と便利です。

開発事例


MySQLのテーブルをリンクテーブルにする2016年10月29日 14時15分00秒

MySQLのテーブルをリンクテーブルにする

ODBC接続のデータベースのテーブルをAccessにハードリンクする方法を記載します。
事前に、
①リンクするデータベース(今回はMySQL)のインストールが完了している。
②リンクするデータベース用のODBCドライバのインストールが完了している(ODBCデータソースアドミニストレータでドライバが確認できる)。
③ODBC DNS エントリの作成が完了している。

※上記の事前準備が完了している前提で、以下の手順でMySQLのテーブルをリンクテーブルにします。
開発事例


パススルークエリの作り方2016年10月29日 13時23分00秒

パススルークエリの作り方:

※パススルークエリは、SQLサーヴァーへ直接SQL文を送信して実行するので、SQLサーヴァー側のSQL文法に合わせたSQL文を作成しなければならない。
開発事例


クエリのSQL文を書き換える2016年10月29日 13時03分28秒

クエリのSQL文を書き換える

AccseeのクエリのSQL文を書き換えるには、クエリのSQLプロパティを書き換えます。
以下に基本的なパススルークエリのSQL文の変更方法を記載します。
開発事例


更新用パススルークエリの設定2016年10月29日 12時44分11秒

更新用パススルークエリの設定

※更新系のパススルークエリを作成する場合、設定の不具合でエラーが表示(実行時エラー'3325')され、実行時エラーで停止する事がある。
以下の設定を行う事で、エラー表示および実行時エラーを回避する事ができる。

開発事例


「ODBC DNS エントリの作成」2016年10月28日 16時57分47秒

「ODBC DNS エントリの作成」

MySQLにマイクロソフトのOffice製品で接続する場合、ODBC接続を使います。
以下、PDFにMySQLのODBC接続ドライバをインストール後の「ODBC DNS エントリの作成」手順を記載します。
開発事例


ExcelでMySQLサーバーへ接続2016年10月28日 16時47分11秒

ExcelでMySQLサーバーへ接続

マイクロソフトのOffice製品でMySQLに接続するには、
1.MySQL用のODBC接続ドライバをインストールする。
2.「ODBCデータソースアドミニストレータ」でDNSを作成・設定する。
3.VBAでODBC接続のプログラムを作成する。


Sub MySQL接続()
On Error GoTo errHandler
Dim myCon As New ADODB.Connection 'Connectionオブジェクト

'接続文字列を設定する
myCon.ConnectionString = "Driver={MySQL ODBC 5.1 Driver};" _
& "Server=localhost; Database=kokyaku_kanri; Uid=root; Pwd=1234"'MySQLのIDとパスワード
'Server=localhost;はサーバーの名前、またはIPアドレスを記述。ここでは自分自身を指定している。
'データベースに接続する
myCon.Open
MsgBox "接続しました。"
'※ここにデータベースの処理を記述します。
'接続を切断する
myCon.Close
MsgBox "切断しました。"

procContinue:
Set myCon = Nothing
Exit Sub

errHandler:
'エラーが発生した場合にエラーメッセージを表示する
MsgBox Err.Description
Resume procContinue
End Sub

以上でExcelでMySQLサーバーへ接続が可能になります。
開発事例