'***************************************************************************************************
' Excelへの時刻データ貼り付けテスト(起動フォーム)
'
' ※Excelワークシートへの時刻データの貼り付けが問題なく行なわれるか試してみます。
' 試してみるのは下記の4種類の方法です。(対象はD2セル)
' ・①TimeSerial関数で18:30:00をそのままセット
' ・②TimeSerial関数で24:30:00をそのままセット
' ・③TimeSerial関数で18:30:00を「日付型差分加算」してセット
' ・④TimeSerial関数で24:30:00を「日付型差分加算」してセット
' ※Excelは参照設定となっています。
'
' 作成者:井上治 URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
' 変更日付 Rev 変更履歴内容---------------------------------------------------------------------->
' 09/06/21(1.0.0.0)新規作成
' 17/04/22(1.0.1.0)記述統制見直し、Excel関連クラス統合作業
'***************************************************************************************************
Imports System.IO
Imports Microsoft.Office.Interop
Public Class dlgExcelKidou
'===============================================================================================
Private Const g_cnsTitle As String = "Excelへの時刻データ貼り付けテスト"
'-----------------------------------------------------------------------------------------------
Private Const g_cnsTempPath As String = "..\..\ExcelTemplate"
Private Const g_cnsTemplate As String = "13_KINMUHYOU1.xltx"
Private ReadOnly g_tblSYORI_MODE() As String = {"", "①", "②", "③", "④"}
'-----------------------------------------------------------------------------------------------
' 新旧日付型の基準値の差分値
Private ReadOnly g_cnsAddTimeforCell As TimeSpan = New TimeSpan(693593, 0, 0, 0)
'***********************************************************************************************
' ■■■ フォーム上のコントロールイベント ■■■
'***********************************************************************************************
'* 処理名 :Button1_Click
'* 機能 :ボタン①クリックイベント
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(既定)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2009年06月21日
'* 作成者 :井上 治
'* 更新日 :2017年04月21日
'* 更新者 :井上 治
'* 機能説明:Excelへの時刻データ貼り付けテスト①
'* 注意事項:※①TimeSerial関数で18:30:00をそのままセット
'***********************************************************************************************
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
'-------------------------------------------------------------------------------------------
' Excelワークブックを開いてD2セルに時刻をセット①
Call GP_SetJikoku1(18, 30, 0)
End Sub
'***********************************************************************************************
'* 処理名 :Button2_Click
'* 機能 :ボタン②クリックイベント
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(既定)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2009年06月21日
'* 作成者 :井上 治
'* 更新日 :2017年04月21日
'* 更新者 :井上 治
'* 機能説明:Excelへの時刻データ貼り付けテスト②
'* 注意事項:※②TimeSerial関数で24:30:00をそのままセット ⇒ 例外発生
'***********************************************************************************************
Private Sub Button2_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button2.Click
'-------------------------------------------------------------------------------------------
' Excelワークブックを開いてD2セルに時刻をセット②
Call GP_SetJikoku1(24, 30, 0)
End Sub
'***********************************************************************************************
'* 処理名 :Button3_Click
'* 機能 :ボタン③クリックイベント
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(既定)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2009年06月21日
'* 作成者 :井上 治
'* 更新日 :2017年04月21日
'* 更新者 :井上 治
'* 機能説明:Excelへの時刻データ貼り付けテスト③
'* 注意事項:※③TimeSerial関数で18:30:00を「日付型差分加算」してセット
'***********************************************************************************************
Private Sub Button3_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button3.Click
'-------------------------------------------------------------------------------------------
' Excelワークブックを開いてD2セルに時刻をセット③
Call GP_SetJikoku2(18, 30, 0)
End Sub
'***********************************************************************************************
'* 処理名 :Button4_Click
'* 機能 :ボタン④クリックイベント
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(既定)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2009年06月21日
'* 作成者 :井上 治
'* 更新日 :2017年04月21日
'* 更新者 :井上 治
'* 機能説明:Excelへの時刻データ貼り付けテスト④
'* 注意事項:※④TimeSerial関数で24:30:00を「日付型差分加算」してセット
'***********************************************************************************************
Private Sub Button4_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button4.Click
'-------------------------------------------------------------------------------------------
' Excelワークブックを開いてD2セルに時刻をセット②
Call GP_SetJikoku2(24, 30, 0)
End Sub
'***********************************************************************************************
' ■■■ サブ処理 ■■■
'***********************************************************************************************
'* 処理名 :GP_SetJikoku1
'* 機能 :Excelワークブックを開いてD2セルに時刻をセット
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :Arg1 = 時(Integer)
'* Arg2 = 分(Integer)
'* Arg3 = 秒(Integer)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2009年06月21日
'* 作成者 :井上 治
'* 更新日 :2017年04月21日
'* 更新者 :井上 治
'* 機能説明:新旧日付型の基準値の差分調整を行なわずにセルに時刻をセット
'* 注意事項:
'***********************************************************************************************
Private Sub GP_SetJikoku1(ByVal intH As Integer, _
ByVal intF As Integer, _
ByVal intS As Integer)
'-------------------------------------------------------------------------------------------
' Excel出力クラスの初期化(Escキーのイベントはクラス側に実装済)
Using clsExcel = New clsAboutExcel1(Me, True)
'---------------------------------------------------------------------------------------
' フルパステンプレート名(実行EXEの2階層上のExcelTemplateフォルダになっています)
Dim objUri1 As New Uri(My.Application.Info.DirectoryPath)
Dim objUri2 As New Uri(objUri1, g_cnsTempPath)
Dim objWbk As Excel.Workbook = Nothing ' Excel.Workbook
Dim strFileName As String = Path.Combine(objUri2.LocalPath, g_cnsTemplate) ' ファイル名
Dim dteTargetTime As Date = TimeSerial(intH, intF, intS) ' 表示する時刻
Dim strMSGHeader As String = "Excel起動中" ' メッセージヘッダ
Try
'-------------------------------------------
' ワークブックを起動(URL上)
If Not clsExcel.GetWorkbook(strFileName, objWbk, strMSGHeader, True) Then Exit Sub
' 差分調整無し
objWbk.Worksheets(1).Cells(2, 4).Value = dteTargetTime.ToOADate
' 保存済み指定
objWbk.Saved = True
' 画面描画再開等終了処理
Call clsExcel.SuspendExcelProc(objWbk, True)
Catch ex As Exception
'-------------------------------------------
' 処理中例外メッセージの表示
Call clsExcel.ShowFatalMessage(g_cnsTitle, strMSGHeader, ex.Message)
Try
' 例外時後始末(但しExcel応答無しなどではここでの対応は働かない!)
Call clsExcel.SuspendExcelProc(objWbk)
Finally
' ここでは無視するしかない!
End Try
End Try
'---------------------------------------------------------------------------------------
End Using
End Sub
'***********************************************************************************************
'* 処理名 :GP_SetJikoku2
'* 機能 :Excelワークブックを開いてD2セルに時刻をセット
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :Arg1 = 時(Integer)
'* Arg2 = 分(Integer)
'* Arg3 = 秒(Integer)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2009年06月21日
'* 作成者 :井上 治
'* 更新日 :2017年04月21日
'* 更新者 :井上 治
'* 機能説明:新旧日付型の基準値の差分調整を行なってセルに時刻をセット
'* 注意事項:
'***********************************************************************************************
Private Sub GP_SetJikoku2(ByVal intH As Integer, _
ByVal intF As Integer, _
ByVal intS As Integer)
'-------------------------------------------------------------------------------------------
' Excel出力クラスの初期化(Escキーのイベントはクラス側に実装済)
Using clsExcel = New clsAboutExcel1(Me, True)
'---------------------------------------------------------------------------------------
' フルパステンプレート名(実行EXEの2階層上のExcelTemplateフォルダになっています)
Dim objUri1 As New Uri(My.Application.Info.DirectoryPath)
Dim objUri2 As New Uri(objUri1, g_cnsTempPath)
Dim objWbk As Excel.Workbook = Nothing ' Excel.Workbook
Dim strFileName As String = Path.Combine(objUri2.LocalPath, g_cnsTemplate) ' ファイル名
Dim dteTargetTime As Date = TimeSerial(intH, intF, intS) ' 表示する時刻
Dim strMSGHeader As String = "Excel起動中" ' メッセージヘッダ
Try
'-------------------------------------------
' ワークブックを起動(URL上)
If Not clsExcel.GetWorkbook(strFileName, objWbk, strMSGHeader, True) Then Exit Sub
' 差分調整有り
objWbk.Worksheets(1).Cells(2, 4).Value = _
dteTargetTime.Add(g_cnsAddTimeforCell).ToOADate
' 保存済み指定
objWbk.Saved = True
' 画面描画再開等終了処理
Call clsExcel.SuspendExcelProc(objWbk, True)
Catch ex As Exception
'-------------------------------------------
' 処理中例外メッセージの表示
Call clsExcel.ShowFatalMessage(g_cnsTitle, strMSGHeader, ex.Message)
Try
' 例外時後始末(但しExcel応答無しなどではここでの対応は働かない!)
Call clsExcel.SuspendExcelProc(objWbk)
Finally
' ここでは無視するしかない!
End Try
End Try
'---------------------------------------------------------------------------------------
End Using
End Sub
'-------------------------------------<< End of Source >>---------------------------------------
End Class