旧実績表用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