Mình có 2 Sub như bên dưới, và muốn rút gọn chương trình bằng cách tạo 1 chương trình con và mỗi khi chay thi gọi lên
cám ơn nhiều
Mã:
Sub Open_New_File()
Dim I As Long
Dim J As Long
Dim Arr_N()
Dim Arr_D()
Dim K As Long
Dim End_Row As Long
Dim Dic As Object
Dim Filename As Variant
Dim wbSource
Dim wbTarget
Dim shSource As Worksheet
Dim shTarget As Worksheet
Dim arr
Set wbTarget = ThisWorkbook.Worksheets("W2")
Set Dic = CreateObject("Scripting.Dictionary")
Filename = Application.GetOpenFilename("Text File(*.xlsx),*.xlsx")
If Filename <> "False" Then
'
wbTarget.Range("O2") = Filename
Else 'Cancel
' MsgBox "Cancel"
End
End If
Set wbSource = Workbooks.Open(Filename)
Set shSource = wbSource.Worksheets("NVL")
End_Row = shSource.Range("B100000").End(xlUp).Row
Arr_N = shSource.Range("B2:K" & End_Row)
ReDim Arr_D(1 To UBound(Arr_N, 1), 1 To 10)
K = 0
For I = 1 To UBound(Arr_N, 1)
K = K + 1
If Arr_N(I, 1) = "Wire" Then
Arr_D(K, 1) = Arr_N(I, 5)
Arr_D(K, 2) = Arr_N(I, 6)
Arr_D(K, 3) = Arr_N(I, 7)
Arr_D(K, 4) = Arr_N(I, 8)
Arr_D(K, 5) = Arr_N(I, 9)
Arr_D(K, 6) = Arr_N(I, 10)
End If
Next
wbTarget.Range("o5:T1000").Clear
wbTarget.Range("o5").Resize(K, 6) = Arr_D
wbTarget.Range("o5").Resize(K, 6).sort key1:=Sheet1.Range("o5"), key1:=Sheet1.Range("o5"), ORDER1:=xlAscending, ORDER2:=xlDescending
wbSource.Close False
arr = wbTarget.Range("o5:T1000").Select
format_all
End Sub
Sub Open_Old_File()
Dim I As Long
Dim J As Long
Dim Arr_N()
Dim Arr_D()
Dim K As Long
Dim End_Row As Long
Dim Dic As Object
Dim Filename As Variant
Dim wbSource
Dim wbTarget
Dim shSource As Worksheet
Dim shTarget As Worksheet
Dim arr
Application.ScreenUpdating = False
Dim KJ
Dim LastRow
Dim W2
Dim buf As Long
KJ = 5
Set wbTarget = ThisWorkbook.Worksheets("W2")
Set Dic = CreateObject("Scripting.Dictionary")
Filename = Application.GetOpenFilename("Text File(*.xlsx),*.xlsx")
If Filename <> "False" Then
'
wbTarget.Range("Y2") = Filename
Else 'Cancel
' MsgBox "Cancel"
End
End If
Set wbSource = Workbooks.Open(Filename)
Set shSource = wbSource.Worksheets("NVL")
End_Row = shSource.Range("B100000").End(xlUp).Row
Arr_N = shSource.Range("B2:K" & End_Row)
ReDim Arr_D(1 To UBound(Arr_N, 1), 1 To 10)
K = 0
For I = 1 To UBound(Arr_N, 1)
K = K + 1
If Arr_N(I, 1) = "Wire" Then
Arr_D(K, 1) = Arr_N(I, 5)
Arr_D(K, 2) = Arr_N(I, 6)
Arr_D(K, 3) = Arr_N(I, 7)
Arr_D(K, 4) = Arr_N(I, 8)
Arr_D(K, 5) = Arr_N(I, 9)
Arr_D(K, 6) = Arr_N(I, 10)
End If
Next
wbTarget.Range("Y5:ad1000").Clear
wbTarget.Range("y5").Resize(K, 6) = Arr_D
wbTarget.Range("y5").Resize(K, 6).sort key1:=Sheet1.Range("y5"), key1:=Sheet1.Range("y5"), ORDER1:=xlAscending, ORDER2:=xlDescending
wbSource.Close False
arr = wbTarget.Range("y5:ad1000").Select
format_all
End Sub
cám ơn nhiều
Lần chỉnh sửa cuối: