魚山田のブログ -10ページ目

魚山田のブログ

ブログの説明を入力します。

Function funct_CreateFLASH(CREATE_DATABASE_FULLNAME As String) As Variant


'分割用 確認完了


'汎用 NameListのエクスポートユニット


' テンポラリ・データベースを作る → クルーリストのデータをレコードセット → 読み込んだクルーリストの件数を返す


If Len(CREATE_DATABASE_FULLNAME) = 0 Then

funct_CreateFLASH = Array(-1, -1, -1)
Exit Function

End If


Dim myMDB_FullName As String
myMDB_FullName = CREATE_DATABASE_FULLNAME


Dim myDB As DAO.Database
Dim myRECORD As DAO.Recordset
Dim myTBL As DAO.TableDef


Dim myCrewRows(0 To 2) As Long
Dim myCrewRange As Range


Dim myTMP_ADDRESS(1 To 2) As String
Dim LoopEXPO As Long

Dim myRegularRange As Range
Dim mytraineeRange As Range
Dim myTmpCounter As Long
Dim myActivateCrews(1 To 2) As Long

Dim LoopTables As Integer
Dim LoopLAND As Integer
Dim LoopCapt As Integer

Dim strNOTES(0 To 1) As String


Dim boolFlag As Boolean
Dim varFlag As Variant
Dim lngDB_RES As Long
Dim strSQLCOMM As String





'レギュラーの範囲


Set myCrewRange = ActiveWorkbook.Sheets(NAME_LIST_SHEET).Range("レギュラー")

With myCrewRange

myCrewRows(1) = .Cells(.Rows.Count, 2).End(xlUp).Row
myCrewRows(1) = myCrewRows(1) - 1


myTMP_ADDRESS(1) = Range(.Cells(1, 1), .Cells(myCrewRows(1), .Columns.Count)).Address

End With

Set myCrewRange = Nothing

'新人の範囲

Set myCrewRange = ActiveWorkbook.Sheets(NAME_LIST_SHEET).Range("新人")

With myCrewRange

myCrewRows(2) = .Cells(.Rows.Count, 2).End(xlUp).Row
myCrewRows(2) = myCrewRows(2) - 1

myTMP_ADDRESS(2) = Range(.Cells(1, 1), .Cells(myCrewRows(2), .Columns.Count)).Address

End With

Set myCrewRange = Nothing


' _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
' _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/


'DBを削除する

Set objTarget = CreateObject("Scripting.FileSystemObject")

If objTarget.FileExists(myMDB_FullName) = True Then

Kill myMDB_FullName

End If

Set objTarget = Nothing

'---------------------------------------------------------------------------

'新規作成

Set myDB = CreateDatabase(myMDB_FullName, dbLangJapanese)

myDB.Close

Set myDB = Nothing


'---------------------------------------------------------------------------

'テーブル定義

Set myDB = OpenDatabase(myMDB_FullName)

Set myTBL = myDB.CreateTableDef(SCHE_DB)

With myTBL

.Fields.Append .CreateField("SortID", dbInteger)
.Fields.Append .CreateField("NickName", dbText, 255)
.Fields.Append .CreateField("InteriorRed", dbInteger)
.Fields.Append .CreateField("InteriorGreen", dbInteger)
.Fields.Append .CreateField("InteriorBlue", dbInteger)
.Fields.Append .CreateField("FontRed", dbInteger)
.Fields.Append .CreateField("FontGreen", dbInteger)
.Fields.Append .CreateField("FontBlue", dbInteger)
.Fields.Append .CreateField("Note_SCHE", dbText, 255)
.Fields.Append .CreateField("SH_Address", dbText, 255)

.Fields("NickName").AllowZeroLength = True
.Fields("Note_SCHE").AllowZeroLength = True
.Fields("SH_Address").AllowZeroLength = True

' 追加
.Fields.Append .CreateField("InvDate", dbDouble)
.Fields.Append .CreateField("Departure", dbDouble)
.Fields.Append .CreateField("InvStore", dbText, 255)
.Fields.Append .CreateField("SVName", dbText, 255)

.Fields("InvStore").AllowZeroLength = True
.Fields("SVName").AllowZeroLength = True

End With


myDB.TableDefs.Append myTBL

Set myTBL = Nothing



Set myTBL = myDB.CreateTableDef(CREW_DB)

With myTBL

.Fields.Append .CreateField("Syozoku", dbInteger)
.Fields.Append .CreateField("RowID", dbLong)
.Fields.Append .CreateField("IPL", dbLong)
.Fields.Append .CreateField("CrewName", dbText, 255)
.Fields.Append .CreateField("bNickName", dbText, 255)
.Fields.Append .CreateField("Unten", dbText, 255)
.Fields.Append .CreateField("Kobetsu", dbText, 255)
.Fields.Append .CreateField("ActiveAvail", dbText, 255)
.Fields.Append .CreateField("Note_CREW", dbText, 255)
.Fields.Append .CreateField("EMail", dbText, 255)
.Fields.Append .CreateField("Phonetic", dbText, 255)


.Fields("CrewName").AllowZeroLength = True
.Fields("bNickName").AllowZeroLength = True
.Fields("Unten").AllowZeroLength = True
.Fields("Kobetsu").AllowZeroLength = True
.Fields("ActiveAvail").AllowZeroLength = True
.Fields("Note_CREW").AllowZeroLength = True
.Fields("EMail").AllowZeroLength = True
.Fields("Phonetic").AllowZeroLength = True

End With

myDB.TableDefs.Append myTBL



Set myTBL = myDB.CreateTableDef(ACTB_DB)

With myTBL

.Fields.Append .CreateField("Act_WorkBook", dbText, 255)
.Fields("Act_WorkBook").AllowZeroLength = True

End With

myDB.TableDefs.Append myTBL




' _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
' _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/


' リストのインポート


Erase myActivateCrews


Set myRECORD = myDB.OpenRecordset(CREW_DB)

For LoopTables = 1 To 2

' 1回目 → レギュラー
' 2 → 新人

Set myCrewRange = ActiveWorkbook.Sheets(NAME_LIST_SHEET).Range(myTMP_ADDRESS(LoopTables))

With myCrewRange

For LoopEXPO = 1 To .Rows.Count

For LoopLAND = 1 To .Columns.Count

' ワークシート上にエラー値が存在する

If IsError(.Cells(LoopEXPO, LoopLAND).Value) = True Then

' エラーCallBackを返す

funct_CreateFLASH = Array(-3, -1, -1)

Set myCrewRange = Nothing
Set myRECORD = Nothing
Set myTBL = Nothing

myDB.Close

Set myDB = Nothing

Exit Function

End If

Next LoopLAND

Select Case True

Case (Val(.Cells(LoopEXPO, 1).Value) > 0) And (Len(.Cells(LoopEXPO, 2).Value) > 0) And (Len(.Cells(LoopEXPO, 3).Value) > 0)

myTmpCounter = myTmpCounter + 1

myRECORD.AddNew

myRECORD(0).Value = LoopTables
myRECORD(1).Value = .Cells(LoopEXPO, 1).Row
myRECORD(2).Value = Val(.Cells(LoopEXPO, 1).Value)
myRECORD(3).Value = CStr(.Cells(LoopEXPO, 2).Value)
myRECORD(4).Value = CStr(.Cells(LoopEXPO, 3).Value)
myRECORD(5).Value = CStr(.Cells(LoopEXPO, 4).Value)
myRECORD(6).Value = CStr(.Cells(LoopEXPO, 5).Value)
myRECORD(7).Value = CStr(.Cells(LoopEXPO, 6).Value)

If Len(myRECORD(7).Value) > 0 Then

myActivateCrews(LoopTables) = myActivateCrews(LoopTables) + 1

End If


' 全配列のコメントを取得する
Erase strNOTES

For LoopLAND = 1 To .Columns.Count

strNOTES(1) = CStr(.Cells(LoopEXPO, LoopLAND).NoteText)

If Len(strNOTES(0)) = 0 And Len(strNOTES(1)) > 0 Then

strNOTES(0) = strNOTES(1)

ElseIf Len(strNOTES(0)) > 0 And Len(strNOTES(1)) > 0 Then

strNOTES(0) = strNOTES(0) & CONV_CR_LETTER & strNOTES(1)

End If

Next LoopLAND


strNOTES(0) = funct_KAIGYOU_LETTER(strNOTES(0), True) '改行を $ に置き換える(データベースの障害防止)
myRECORD(8).Value = strNOTES(0)


' メアド
myRECORD(9).Value = CStr(.Cells(LoopEXPO, 7).Value)


myRECORD.Update

Erase strNOTES


End Select

Next


End With

Set myCrewRange = Nothing

Next LoopTables

Set myRECORD = Nothing
Set myTBL = Nothing



' ワークブック名

Set myRECORD = myDB.OpenRecordset(ACTB_DB)

With myRECORD

.AddNew

myRECORD(0).Value = ActiveWorkbook.Name

.Update

End With

Set myRECORD = Nothing


myDB.Close

Set myDB = Nothing

' _-~_-~_-~_-~_-~_-~_-~_-~_-~_-~_-~_-~_-~_-~_-~_-~_-~_-~_-~_-~_-~_-~_-~_-~_-~_-~_-~_-~_-~_-~_-~_-~_-~_-~_-~_-~_-~

' NameList 重複チェック

' 必須項目の重複を排除する


' ① IPL重複抽出クエリ

strSQLCOMM = "SELECT IPL" & Chr(10) & _
"FROM " & CREW_DB & Chr(10) & _
"GROUP BY IPL" & Chr(10) & _
"HAVING (((Count(Syozoku))>1));"


boolFlag = funct_mdbSQL_Create(myMDB_FullName, CREW_DB_CHK1, strSQLCOMM)

' ② 通称重複抽出クエリ

strSQLCOMM = "SELECT bNickName" & Chr(10) & _
"FROM " & CREW_DB & Chr(10) & _
"GROUP BY bNickName" & Chr(10) & _
"HAVING (((Count(Syozoku))>1));"


boolFlag = funct_mdbSQL_Create(myMDB_FullName, CREW_DB_CHK2, strSQLCOMM)

' ③ EMail重複抽出クエリ

strSQLCOMM = "SELECT EMail" & Chr(10) & _
"FROM " & CREW_DB & Chr(10) & _
"GROUP BY EMail" & Chr(10) & _
"HAVING (((Count(Syozoku))>1));"


boolFlag = funct_mdbSQL_Create(myMDB_FullName, CREW_DB_CHK3, strSQLCOMM)


' ④ 通称の文字列

strSQLCOMM = "SELECT bNickName" & Chr(10) & _
"FROM " & CREW_DB & Chr(10) & _
"GROUP BY bNickName" & Chr(10) & _
"HAVING (((Len(bNickName))>" & ALLOW_NICKNAME_LEN & "));"


boolFlag = funct_mdbSQL_Create(myMDB_FullName, CREW_DB_CHK4, strSQLCOMM)


' ⑤ 新規テーブルを作って、IPL重複レコードを追加する

strSQLCOMM = "SELECT " & CREW_DB & ".IPL, CrewName AS 氏名, bNickName AS 通称, EMail, " & _
"IIf([Syozoku] Is Null,'','') AS 通称_Len, " & _
"IIf([Syozoku] Is Null,'●','●') AS IPL_Dup, " & _
"IIf([Syozoku] Is Null,'','') AS 通称_Dup, " & _
"IIf([Syozoku] Is Null,'','') AS EMail_Dup" & _
" INTO " & CREW_ERR_DB & Chr(10) & _
"FROM " & CREW_DB & _
" LEFT JOIN " & CREW_DB_CHK1 & _
" ON " & CREW_DB & ".IPL = " & CREW_DB_CHK1 & ".IPL" & Chr(10) & _
"WHERE (((" & CREW_DB_CHK1 & ".IPL) Is Not Null));"

lngDB_RES = funct_mdbSQL_NEWTBL(myMDB_FullName, strSQLCOMM, CREW_ERR_DB)


' ⑥ 通称重複レコードを、⑤のテーブルに追加する

strSQLCOMM = "INSERT INTO " & CREW_ERR_DB & " ( IPL, 氏名, 通称, EMail, 通称_Len, IPL_Dup, 通称_Dup, EMail_Dup )" & Chr(10) & _
"SELECT IPL, CrewName AS 氏名, " & CREW_DB & ".bNickName AS 通称, EMail, " & _
"IIf([Syozoku] Is Null,'','') AS 通称の文字数, " & _
"IIf([Syozoku] Is Null,'','') AS IPL重複, " & _
"IIf([Syozoku] Is Null,'●','●') AS 通称重複, " & _
"IIf([Syozoku] Is Null,'','') AS EMail重複" & Chr(10) & _
"FROM " & CREW_DB & _
" LEFT JOIN " & CREW_DB_CHK2 & _
" ON " & CREW_DB & ".bNickName = " & CREW_DB_CHK2 & ".bNickName" & Chr(10) & _
"WHERE (((" & CREW_DB_CHK2 & ".bNickName) Is Not Null));"


lngDB_RES = lngDB_RES + funct_mdbSQL_ADDON(myMDB_FullName, strSQLCOMM, CREW_ERR_DB)


' ⑦ EMail重複レコードを、⑤のテーブルに追加する

strSQLCOMM = "INSERT INTO " & CREW_ERR_DB & " ( IPL, 氏名, 通称, EMail, 通称_Len, IPL_Dup, 通称_Dup, EMail_Dup )" & Chr(10) & _
"SELECT IPL, CrewName AS 氏名, bNickName AS 通称, " & CREW_DB & ".EMail, " & _
"IIf([Syozoku] Is Null,'','') AS 通称の文字数, " & _
"IIf([Syozoku] Is Null,'','') AS IPL重複, " & _
"IIf([Syozoku] Is Null,'','') AS 通称重複, " & _
"IIf([Syozoku] Is Null,'●','●') AS EMail重複" & Chr(10) & _
"FROM " & CREW_DB & _
" LEFT JOIN " & CREW_DB_CHK3 & _
" ON " & CREW_DB & ".EMail = " & CREW_DB_CHK3 & ".EMail" & Chr(10) & _
"WHERE (((IIf([" & CREW_DB & "].[EMail] Is Null Or Len([" & CREW_DB & "].[EMail])=0,0,1))=1)" & _
" AND ((" & CREW_DB_CHK3 & ".EMail) Is Not Null));"


lngDB_RES = lngDB_RES + funct_mdbSQL_ADDON(myMDB_FullName, strSQLCOMM, CREW_ERR_DB)


' ⑧ 通称の制限文字列オーバーを、⑤のテーブルに追加する

strSQLCOMM = "INSERT INTO " & CREW_ERR_DB & " ( IPL, 氏名, 通称, EMail, 通称_Len, IPL_Dup, 通称_Dup, EMail_Dup )" & Chr(10) & _
"SELECT IPL, CrewName AS 氏名, " & CREW_DB & ".bNickName AS 通称, " & CREW_DB & ".EMail, " & _
"IIf([Syozoku] Is Null,'" & ALLOW_NICKNAME_LEN & "文字以下に','" & ALLOW_NICKNAME_LEN & "文字以下に') AS 通称の文字数, " & _
"IIf([Syozoku] Is Null,'','') AS IPL重複, " & _
"IIf([Syozoku] Is Null,'','') AS 通称重複, " & _
"IIf([Syozoku] Is Null,'','') AS EMail重複" & Chr(10) & _
"FROM " & CREW_DB & _
" LEFT JOIN " & CREW_DB_CHK4 & _
" ON " & CREW_DB & ".bNickName = " & CREW_DB_CHK4 & ".bNickName" & Chr(10) & _
"WHERE (((" & CREW_DB_CHK4 & ".bNickName) Is Not Null));"

lngDB_RES = lngDB_RES + funct_mdbSQL_ADDON(myMDB_FullName, strSQLCOMM, CREW_ERR_DB)


' ⑨ 最終エラーリスト

strSQLCOMM = "SELECT IPL, 氏名, 通称, EMail, Max(通称_Len) AS 通称の文字数, Max(IPL_Dup) AS IPL重複, Max(通称_Dup) AS 通称重複, Max(EMail_Dup) AS EMail重複" & Chr(10) & _
"FROM " & CREW_ERR_DB & Chr(10) & _
"GROUP BY IPL, 氏名, 通称, EMail;"

boolFlag = funct_mdbSQL_Create(myMDB_FullName, CREW_ERR_XLS, strSQLCOMM)






If lngDB_RES > 0 Then

' 何かしらの重複レコードがある場合

' 新規ブックにエラーリストを作る

Workbooks.Add
Sheets(1).Select

strSQLCOMM = "SELECT *" & Chr(10) & "FROM " & CREW_ERR_XLS
varFlag = funct_SQL_ODBC(dirODBC(1) & ODBC_FLASH, "A1", strSQLCOMM, True, True)

' エラーCallBackを返す

funct_CreateFLASH = Array(-2, -1, -1)


Else

' 取得結果のCallBackを返す

' 戻り値

'総登録人数 レギュラー 新人
funct_CreateFLASH = Array(myTmpCounter, myActivateCrews(1), myActivateCrews(2))


End If






End Function