遅延バインデバイデングによるEXCELの開き方(Excel2013対応も)

 Dim myXLS As Object

 Dim myWKB As Object

 Dim myWKS As Object

Dim conn As New ADODB.Connection

Dim rs  As New ADODB.Recordset

Dim cmd As New ADODB.Command

Set conn = CurrentProject.Connection

Set cmd.ActiveConnection = conn


 
On Error Resume Next
Set myXLS = CreateObject("Excel.Application.15")
Set myXLS = CreateObject("Excel.Application")

 
  
Set myWKB = myXLS.Workbooks.Add

    Set myWKS = myWKB.Worksheets("sheet1")

    myWKS.Application.Visible = True

    myXLS.Visible = True   '--------------------------Workbookを開く

'******* 時間を秒して保存

    Dim a

    Dim b

    Dim c As Long

    Dim d As Long

    Dim cc As Long

    Dim dd As Long

    Dim w As Long

    Dim x As Long

    Dim y As Long

    Dim z As Long

   

    Dim ww As Long

    Dim xx As Long

    Dim yy As Long

    Dim zz As Long

   

   

    Set cmd.ActiveConnection = cnn

    Set rs3 = New ADODB.Recordset

    Set rs2 = New ADODB.Recordset

 

   

    b = Me.一覧.Column(0)

    a = Format(Me.月度, "yyyy/mm")

   

    rs3.Open "SELECT KND_TANCOD,KND_SYUGYO,KND_KYUSYU from D_勤怠 where KND_TANCOD = " & Val(b) & "", cnn, , , adCmdText

    If rs3.EOF Then Exit Sub

   

      With cmd

       .CommandText = "DELETE * FROM 勤怠実績 WHERE 月度 = '" & Me.月度 & "' and 社員番号 = '" & b & "'"

       .CommandType = adCmdText

       .Execute

      End With

  

     rs3.MoveFirst

    

     ' Debug.Print Format(Nz(rs3.Fields("KND_SYUGYO"), 0), "h,n,s") ' "**:**:**" を "**,**,**" に変換

   

   

    Do Until rs3.EOF

      

       Set rs4 = New ADODB.Recordset

       rs4.Open "SELECT * from 勤怠実績 where 月度 = '" & Me.月度 & "' and  社員番号 = '" & b & "'", cnn, , , adCmdText

                    

                     w = (Format(Nz(rs3.Fields("KND_SYUGYO"), 0), "h")) * 3600

                     x = (Format(Nz(rs3.Fields("KND_SYUGYO"), 0), "n")) * 60

                     y = (Format(Nz(rs3.Fields("KND_SYUGYO"), 0), "s"))

                     z = w + x + y

                     c = z

                    

                     ww = (Format(Nz(rs3.Fields("KND_KYUSYU"), 0), "h")) * 3600

                     xx = (Format(Nz(rs3.Fields("KND_KYUSYU"), 0), "n")) * 60

                     yy = (Format(Nz(rs3.Fields("KND_KYUSYU"), 0), "s"))

                     zz = ww + xx + yy

                     d = zz

      

      

       If rs4.EOF Then

       

        rs2.Open "勤怠実績", cnn, adOpenKeyset, adLockOptimistic, adCmdTableDirect

                  

        

        rs2.AddNew

        

        rs2("社員番号") = Trim(Str(rs3.Fields("KND_TANCOD")))

        rs2("月度") = Me.月度

        rs2("勤怠集計数") = c

        rs2("祭日勤怠数") = d

           rs2.Update

           rs2.Close

         Else

                  cc = c + rs4.Fields("勤怠集計数")

                  dd = d + rs4.Fields("祭日勤怠数")

                                 

                                  With cmd

                                  .CommandText = "UPDATE 勤怠実績 SET 勤怠集計数 = " & cc & ",祭日勤怠数 = " & dd & " WHERE 月度 = '" & Me.月度 & "' and 社員番号 = '" & rs4.Fields("社員番号") & "'"

                                  .CommandType = adCmdText

                                  .Execute

                                  End With

                                 

        End If

      rs3.MoveNext

    Loop

'*******

  和暦の例(Function側)

Public Function wareki(warekitosi As Variant, warekituki As Variant, warekihi As Variant) As Variant

   Dim B

     Dim c

     Dim D

     Dim x

     Dim cc

     Dim dd

     Dim y

   '  Dim warekitosi

   '  Dim warekituki

   '  Dim warekihi

    

     B = Date

     Dim cn As New ADODB.Connection

     Dim rs As ADODB.Recordset

     Set rs = New ADODB.Recordset

    

     Set cn = CurrentProject.Connection

 

      rs.CursorType = adOpenStatic

      rs.LockType = adLockOptimistic

      rs.LockType = adLockOptimistic

     rs.Open "SELECT * from 元号 order by 始年月日", cn, , , adCmdText

      If rs.EOF = True Then

      End If

   rs.MoveFirst

  Do Until rs.EOF

       D = rs.Fields("始年月日")

       c = rs.Fields("元号")

     rs.MoveNext

      If rs.EOF Then

      y = c

      Exit Do

      End If

       dd = rs.Fields("始年月日")

       cc = rs.Fields("元号")

     If B >= D And B < dd Then

       y = c

     Exit Do

     End If

  Loop

       x = Year(B) - Year(D) + 1

    

     If x = "1" Then x = ""

   

  warekitosi = y & x & ""

  warekituki = Format(B, "mm")

  warekihi = Format(B, "dd")

End Function

和暦の例(sub側)

Call wareki(warekitosi, warekituki, warekihi)

Call xwareki(xwarekitosi, xwarekituki, xwarekihi)

Call ywareki(ywarekitosi, ywarekituki, ywarekihi)

  Me..RowSourceType = "Value List"

'  D = Format(DateAdd("yyyy", -1, Date), "GGGEE") & ";" & Format(Date, "GGGEE") & ";" & Format(DateAdd("yyyy", 1, Date), "GGGEE") & ";"

  D = xwarekitosi & ";" & warekitosi & ";" & ywarekitosi & ";"

印刷のキャンセル時

      If rs2.EOF Then Exit Sub

         If Me.選択1 = "供養" Then

            DoCmd.OpenReport "案内書棚経", acPreview

         Else

        

            DoCmd.OpenReport "案内書", acPreview

         End If

          

          

   If MsgBox("印刷してもよいですか", vbYesNo) = vbNo Then

        DoCmd.Close

   Else

      On Error GoTo ErrRtn

              DoCmd.RunCommand acCmdPrint

              DoCmd.Close

          Set rs31 = New ADODB.Recordset

    

        rs31.Open "SELECT * FROM 追善一時 where 確認 = yes ", cn, , , adCmdText

   

        If Not rs31.EOF Then

         rs31.MoveFirst

    

         Do Until rs31.EOF

           If rs31.Fields("印刷") = "0" Then

           B = "1"

           Else

           B = "2"

           End If

             With cmd

             .CommandText = "UPDATE 実施 SET 印刷 = '" & B & "' where 実施ID = " & rs31.Fields("実施ID") & ""

             .CommandType = adCmdText

             .Execute

              End With

             With cmd

             .CommandText = "UPDATE 追善一時 SET 印刷 = '" & B & "' where 追善ID = " & rs31.Fields("追善ID") & ""

             .CommandType = adCmdText

             .Execute

              End With

          

           rs31.MoveNext

        Loop

        Else

        End If

      Me.Form.Requery

   End If

     Me.Refresh

ErrRtn:

         DoCmd.Close acReport, "案内書棚経", acSaveNo

         DoCmd.Close acReport, "案内書", acSaveNo

氏名で、 「姓 名」と「姓名」のダブリチエック機能

         Dim x

        Dim xx

        Dim y

        Dim yy

       

        Dim cn   As ADODB.Connection

        Dim rs   As New ADODB.Recordset

        Dim rs4   As New ADODB.Recordset

        Dim rs3   As New ADODB.Recordset

        Dim rs31   As New ADODB.Recordset

        Dim rs32   As New ADODB.Recordset

        Set cn = CurrentProject.Connection

    

       Set rs32 = New ADODB.Recordset

      rs32.Open "SELECT * from 過去帳 where 地区 = '" & Me.地区 & "'", cn, , , adCmdText

               

      If Not rs32.EOF Then

       rs32.MoveFirst

     Do Until rs32.EOF

        y = Replace(rs32.Fields("俗名"), " ", "")

        yy = Replace(Me.俗名, " ", "")

        If y = yy Then

          MsgBox "登録済です"

         Exit Sub

         End If

       rs32.MoveNext

    Loop

      

       Else

       End If

      Set rs3 = New ADODB.Recordset

      rs3.Open "SELECT * from 過去帳 where 地区 = '" & Me.地区 & "' and 俗名 = '" & Replace(Me.俗名, " ", "") & "'", cn, , , adCmdText

               

      If Not rs3.EOF Then

        x = Replace(rs3.Fields("俗名"), " ", "")

        xx = Replace(Me.俗名, " ", "")

        If x = xx Then

          MsgBox "登録済です"

         Exit Sub

         End If

       Else

       End If

      Set rs4 = New ADODB.Recordset

      rs4.Open "SELECT * from 過去帳 where 地区 = '" & Me.地区 & "' and 俗名 = '" & Me.俗名 & "'", cn, , , adCmdText

               

      If Not rs4.EOF Then

        If rs4.Fields("俗名") = Me.俗名 Then

          MsgBox "登録済です"

         Exit Sub

         End If

       Else

       End If

     

      Set rs31 = New ADODB.Recordset

      rs31.Open "SELECT * from 過去帳一時 where 地区 = '" & Me.地区 & "' and 俗名 = '" & Me.俗名 & "'", cn, , , adCmdText

               

      If Not rs31.EOF Then

        If rs31.Fields("俗名") = Me.俗名 Then

          MsgBox "入力済です"

         Exit Sub

         End If

       Else

       End If

プロシジャーコード他 3

 秒単位の集計結果を [hh]:nn:ss 書式に変換するには

 標準モジュールに下記の関数を作成しておいて

Public Function Second2TimeStr(v As Long) As String

  Dim t As Long

  Second2TimeStr = Format(v Mod 60, "\:00")

  t = v \ 60

  Second2TimeStr = Format(t Mod 60, "\:00") & Second2TimeStr

  t = t \ 60

  Second2TimeStr = Format(t, "00") & Second2TimeStr

 End Function

 Second2TimeStr([集計値])

とします。

 集計値が160114秒なら、44:28:34 が返ります。

  印刷プレビユー時のON ERROR GO TO の例

   Dim cnn As ADODB.Connection

   Dim rs As ADODB.Recordset

     Set cnn = CurrentProject.Connection

   Set rs = New ADODB.Recordset

   rs.Open "SELECT * from tmp_受注 where 選択 = True ", cnn, , , adCmdText

   

     If rs.EOF = True Then Exit Sub

    ARG = rs.Fields("見積番号")

 

         DoCmd.OpenReport "受注印刷再", acPreview

           If MsgBox("印刷してもよいですか", vbYesNo) = vbNo Then

             DoCmd.Close

            Else

    On Error GoTo ErrRtn

         DoCmd.RunCommand acCmdPrint

              DoCmd.Close

   cnn.Execute "UPDATE 受注表 SET 印刷日='" & Format(Now(), "gee/mm/dd") & "' WHERE 見積番号='" & ARG & "' ;"

   cnn.Close: Set cnn = Nothing

        

   End If

ErrRtn:

         DoCmd.Close acReport, "受注印刷再", acSaveNo

'リボン非表示
' DoCmd.ShowToolbar "Ribbon", acToolbarNo

'ナビゲーションウィンドウを非表示にする
' DoCmd.SelectObject acForm, "", True
' DoCmd.RunCommand acCmdWindowHide

 リストボックスの選択対象の削除

Dim element

    For Each element In Me.一覧.ItemsSelected

        '選択解除

        Me.一覧.Selected(element) = False

    Next

 

  ON ERROR GO TO の例

On Error GoTo ErrRtn

    DoCmd.Echo False

    DoCmd.SetWarnings False

        DoCmd.OpenQuery "3_Add(出荷テーブル)"

        DoCmd.OpenQuery "3_UpDate(受注テーブル)"

        DoCmd.OpenQuery "1_Delete(在庫)"

        DoCmd.OpenQuery "1_Add(在庫)"

    DoCmd.SetWarnings True

    DoCmd.Echo True

    MsgBox "登録しました"

    Exit Sub

ErrRtn:

    DoCmd.SetWarnings True

    DoCmd.Echo True

    MsgBox "登録できませんでした"

    Exit Sub

    Resume Next