旧実績表用Office2016対応化VBA定型文
概要
Office2016へのアップグレードによって使用できなくなるVBAへの対応。
コード例1
標準モジュールのコード
'//ボタンクリック時呼び出し
Sub 更新_Click()
ProgressForm.Show vbModeless
If Worksheets("Sheet2").Range("A11") = 0 Then NASI
If Worksheets("Sheet2").Range("A11") = 0 Then Exit Sub
Application.ScreenUpdating = False
Call Data_Clear("実績表", "X", 1)
Call Main("Sheet1", "実績表", "X", 4)
Application.ScreenUpdating = True
Unload ProgressForm
End Sub
'//既存のデータをクリアする
Sub Data_Clear(SheetName As String, z As String, i As Integer)
Do While Worksheets(SheetName).Cells(i + 3, "A") <> ""
i = i + 1
Loop
Worksheets(SheetName).Range("A4:" & z & i + 4).Clear
Worksheets(SheetName).Range("A4:" & z & 4).Borders.LineStyle = xlContinuous
End Sub
'//メインセクション
Sub Main(SheetNameA As String, SheetNameB As String, f As String, v As Long)
ProgressUpdate 1, "データベース参照中"
Dim i As Integer, b As Integer
Sheets(SheetNameA).Select
Range("A2").Select
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
ProgressUpdate 2, "データコピー中"
i = 2
Do While Worksheets(SheetNameA).Cells(i, "A") <> ""
i = i + 1
Loop
Worksheets(SheetNameB).Range("A" & v & ":" & f & i + v).Value = Worksheets(SheetNameA).Range("A2:" & f & i + 2).Value
Worksheets(SheetNameB).Range("A" & v & ":" & f & i + 1).Borders.LineStyle = xlContinuous
Worksheets(SheetNameB).Range("R" & v & ":W" & i + 1).NumberFormatLocal = "#,##0; [赤]-#,##0"
Sheets(SheetNameB).Select
Range("A4").Select
Application.Goto Worksheets(SheetNameB).Range("A4"), True
ProgressUpdate 3, "データ準備完了"
End Sub
'//必須項目未入力時
Private Sub NASI()
Sheets("条件入力").Select
Range("A3").Select
Application.Goto Worksheets("条件入力").Range("A1"), True
MsgBox ("計上日を入力して下さい。")
Application.Goto Worksheets("条件入力").Range("A1"), True
Range("A3").Select
Unload ProgressForm
End Sub
'//進捗率更新処理
Sub ProgressUpdate(i As Long, str As String)
ProgressForm.ProgressBar.Value = i
ProgressForm.Label_progress.Caption = str
DoEvents '//イベント更新*Progress bar更新後表示更新の為に必要
End Sub
'//終了
Sub 終了()
ActiveWorkbook.Close (False)
End Sub
'//表示シートの変更
Sub 条件入力()
Application.Goto Worksheets("条件入力").Range("A1"), True
Application.ScreenUpdating = False
Range("A3").Select
End Sub
コード例2
Progress Formのコード
'//フォーム呼び出し時
Private Sub UserForm_Initialize()
With ProgressBar
.Min = 0
.Max = 10 '工程数に応じて変更
.Value = 0
End With
Label_progress.Caption = "データ初期化中"
DoEvents
End Sub
'//フォーム開放のキャンセル処理
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then
Cancel = True
End If
End Sub