20170706xlVBA根据工资汇总表生成个人工资条

时间:2024-08-09 21:32:50
Sub NextSeven20170706001()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.Calculation = xlCalculationManual
Application.StatusBar = ">>>>>>>>程序正在运行>>>>>>>>" 'On Error GoTo ErrHandler Dim StartTime, UsedTime As Variant
StartTime = VBA.Timer Dim wb As Workbook
Dim OneSht As Worksheet
Dim Rng As Range
Const FirstRow As Long = 4
Dim FormatRng As Range
Dim Arr As Variant
Dim i As Long, j As Long
Dim PasteRow As Long
Dim DesRow As Long
Dim OpenWb As Workbook
Dim OpenSht As Worksheet Dim RngAdr As String
Dim FilePath As String
Dim High(1 To 8) As Double With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False
.InitialFileName = ThisWorkbook.Path
.Title = "请选择工资表!"
.Filters.Clear
.Filters.Add "Excel工作簿", "*.xls*"
If .Show = -1 Then
FilePath = .SelectedItems(1)
Debug.Print FilePath
Else
MsgBox "您没有选中任何文件夹,本次汇总中断!"
Exit Sub
End If
End With Set wb = Application.ThisWorkbook
Set OpenWb = Application.Workbooks.Open(FilePath)
For Each OneSht In wb.Worksheets
RngAdr = RangeAddress(OneSht.Name)
Set OpenSht = OpenWb.Worksheets(OneSht.Name)
With OpenSht
Set Rng = .UsedRange
Arr = Rng.Value
End With
With OneSht
.UsedRange.Offset(8).Clear
For i = 1 To 8
High(i) = .Cells(i, 1).RowHeight
Next i Set FormatRng = .Range(RngAdr)
For i = LBound(Arr) + 1 To UBound(Arr) - 1 If i = 2 Then
For j = LBound(Arr, 2) To UBound(Arr, 2)
.Cells(FirstRow, j + 1).Value = Arr(i, j)
Next j
Else
'复制一次格式
PasteRow = .Cells(.Cells.Rows.Count, 1).End(xlUp).Row + 4
FormatRng.Copy .Cells(PasteRow, 1)
DesRow = PasteRow + 3 For j = LBound(Arr, 2) To UBound(Arr, 2)
.Cells(DesRow, j + 1).Value = Arr(i, j)
Next j End If
Next i EndRow = .Cells.Find("*", .Cells(1, 1), xlValues, xlWhole, xlByRows, xlPrevious).Row For i = 1 To EndRow
x = (i - 1) Mod 8 + 1
.Rows(i).RowHeight = High(x)
Next i
End With Next OneSht OpenWb.Close False Set wb = Nothing
Set OneSht = Nothing
Set FormatRng = Nothing
Set OpenWb = Nothing
Set OpenSht = Nothing ErrorExit:
Set wb = Nothing
Set OneSht = Nothing
Set FormatRng = Nothing
Set OpenWb = Nothing
Set OpenSht = Nothing Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.Calculation = xlCalculationAutomatic
Application.StatusBar = False
Exit Sub
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ErrHandler:
If Err.Number <> 0 Then
MsgBox Err.Description & "!", vbCritical, "NextSeven Excel Studio QQ84857038"
'Debug.Print Err.Description
Err.Clear
Resume ErrorExit
End If
End Sub Function RangeAddress(ByVal SheetName As String) As String
Select Case SheetName
Case "岗位工资制"
RangeAddress = "A1:AG8"
Case "叉车工资制"
RangeAddress = "A1:AJ8"
Case "产能工资制"
RangeAddress = "A1:AH8"
End Select
End Function