Làm sao để ghép 2 macro vào chung thành 1 macro (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

phuocrobe

Thành viên hoạt động
Tham gia
2/11/16
Bài viết
131
Được thích
0
Mình có nhiều macro trong 1 file và mỗi sheet sẽ chạy mỗi macro nên mình muốn gộp nhiều macro vào chung 1 macro để mỗi lần chạy macro thì chỉ chạy 1 macro cho tiện, nhờ các anh chị giúp em với, em cám ơn nhiều ạ @$@!^%
 
Lần chỉnh sửa cuối:
Xin hỏi tác giả bài đăng: Sao lại có các dòng lệnh được đánh số sau đây:
PHP:
' . . . . '
1    For I = 1 To 1
        For J = 1 To 18
            Arr1(I, J) = Arr1(I, J) + sArr(I, J)
        Next J
2    Next I
    
    sArr = ActiveWorkbook.Sheets("TIEN").Range("B14:T14").Value
    
3    For I = 1 To 1
        For J = 1 To 19
            Arr2(I, J) = Arr2(I, J) + sArr(I, J)
        Next J
4    Next I
'. . . . . '

Vòng lặp đó do lịch sử để lại hay có lí do gì khác?-\\/.
 
Upvote 0
Thật sự mình cũng không hiểu ý nghĩa chi tiết của câu lệnh này nữa à, lúc trước có nhờ anh chị trong forum code giúp đoạn code này ở file khác cũng tương tự nên giờ tự mình chế biến lại sang file này thôi à
Xin hỏi tác giả bài đăng: Sao lại có các dòng lệnh được đánh số sau đây:
PHP:
' . . . . '
1    For I = 1 To 1
        For J = 1 To 18
            Arr1(I, J) = Arr1(I, J) + sArr(I, J)
        Next J
2    Next I
    
    sArr = ActiveWorkbook.Sheets("TIEN").Range("B14:T14").Value
    
3    For I = 1 To 1
        For J = 1 To 19
            Arr2(I, J) = Arr2(I, J) + sArr(I, J)
        Next J
4    Next I
'. . . . . '

Vòng lặp đó do lịch sử để lại hay có lí do gì khác?-\\/.
 
Upvote 0
Lần chỉnh sửa cuối:
Upvote 0
Đã sửa lại như thế này rồi anh à.
Public Sub chi()
Application.ScreenUpdating = False
Dim sArr(), Arr1(1 To 30, 1 To 18), Arr2(1 To 30, 1 To 19), tArr()
Dim MyName As String, Pat As String, I As Long, J As Long, K As Long, N As Long, L As Long, M As Long
With ActiveWorkbook
MyName = .Name
Pat = .Path & ""
tArr = .Sheets("HUONGDAN").Range("B4", .Sheets("HUONGDAN").Range("B65536").End(xlUp)).Value
End With
For N = 2 To UBound(tArr)
K = K + 1
Workbooks.Open Filename:=Pat & tArr(N, 1)

sArr = ActiveWorkbook.Sheets("VIEC").Range("B15:S15").Value
For J = 1 To 18
Arr1(K, J) = sArr(1, J)
Next J

sArr = ActiveWorkbook.Sheets("TIEN").Range("B14:T14").Value
For J = 1 To 19
Arr2(K, J) = sArr(1, J)
Next J

ActiveWindow.Close False
Next N
Workbooks(MyName).Activate


Sheets("VIEC").Range("B15:S15").Resize(K) = Arr1
Sheets("TIEN").Range("B14:T14").Resize(K) = Arr2

Application.ScreenUpdating = False
End If
End Sub

Hèn gì lúc nãy em chạy nó báo lỗi, sau đó em copy từ file gốc sang sửa lại được rồi à, hi
 
Upvote 0
Nếu bạn ngang ngay sổ thẳng thế này, thì thấy lỗi ngay thôi:
PHP:
Public Sub chi()
 Application.ScreenUpdating = False
 Dim sArr(), Arr1(1 To 30, 1 To 18), Arr2(1 To 30, 1 To 19), tArr()
 Dim MyName As String, Pat As String, I As Long, J As Long, K As Long, N As Long, L As Long, M As Long
 
 With ActiveWorkbook
    MyName = .Name
    Pat = .Path & ""
    tArr = .Sheets("HUONGDAN").Range("B4", .Sheets("HUONGDAN").Range("B65536").End(xlUp)).Value
 End With
 For N = 2 To UBound(tArr)
    K = K + 1
    Workbooks.Open Filename:=Pat & tArr(N, 1)
    sArr = ActiveWorkbook.Sheets("VIEC").Range("B15:S15").Value
    For J = 1 To 18
        Arr1(K, J) = sArr(1, J)
    Next J
    sArr = ActiveWorkbook.Sheets("TIEN").Range("B14:T14").Value
    For J = 1 To 19
        Arr2(K, J) = sArr(1, J)
    Next J
    ActiveWindow.Close False
 Next N
 Workbooks(MyName).Activate
 Sheets("VIEC").Range("B15:S15").Resize(K) = Arr1
 Sheets("TIEN").Range("B14:T14").Resize(K) = Arr2
 Application.ScreenUpdating = False
''' End If      '???''
End Sub

Sao bạn lại từ chối 1 tiện ích thụt đầu dòng các câu lệnh của VBE làm vậy nhỉ?!?
 
Upvote 0
Mình chỉ đang tập tành mày mò thôi à, có biết gì về code đâu, chủ yếu là tự mày mò học hỏi copy => paste thôi mà
Nếu bạn ngang ngay sổ thẳng thế này, thì thấy lỗi ngay thôi:
PHP:
Public Sub chi()
 Application.ScreenUpdating = False
 Dim sArr(), Arr1(1 To 30, 1 To 18), Arr2(1 To 30, 1 To 19), tArr()
 Dim MyName As String, Pat As String, I As Long, J As Long, K As Long, N As Long, L As Long, M As Long
 
 With ActiveWorkbook
    MyName = .Name
    Pat = .Path & ""
    tArr = .Sheets("HUONGDAN").Range("B4", .Sheets("HUONGDAN").Range("B65536").End(xlUp)).Value
 End With
 For N = 2 To UBound(tArr)
    K = K + 1
    Workbooks.Open Filename:=Pat & tArr(N, 1)
    sArr = ActiveWorkbook.Sheets("VIEC").Range("B15:S15").Value
    For J = 1 To 18
        Arr1(K, J) = sArr(1, J)
    Next J
    sArr = ActiveWorkbook.Sheets("TIEN").Range("B14:T14").Value
    For J = 1 To 19
        Arr2(K, J) = sArr(1, J)
    Next J
    ActiveWindow.Close False
 Next N
 Workbooks(MyName).Activate
 Sheets("VIEC").Range("B15:S15").Resize(K) = Arr1
 Sheets("TIEN").Range("B14:T14").Resize(K) = Arr2
 Application.ScreenUpdating = False
''' End If      '???''
End Sub

Sao bạn lại từ chối 1 tiện ích thụt đầu dòng các câu lệnh của VBE làm vậy nhỉ?!?
 
Upvote 0
Lần đầu tiên mới biết việc đánh số cho dòng code mà vẫn chạy cơ mà không hiểu tên gọi "thừa số chung" là thế nào?**~** Anh/chị nào có thể giải thích tên gọi này được không?
 
Upvote 0
Đây là 1 khái niệm tự định nghĩa í mà! Nó là vầy:

Giả dụ ta có 2 macro như sau:
Mã:
 Sub CongThem9()
  Cells(5, 4).Value = Cells(5, 4).Value + 9
 End Sub
Mã:
Sub CongThem8()
  Cells(4, 5).Value = Cells( 4, 5).Value + 8
End Sub

Giờ ta có thể biến 2 anh này thành macro Cha & macro con như sau:

PHP:
Sub Cha()
 Con [D5], 9
 Con [e4], 8
End Sub
PHP:
Sub Con(Cls As Range, Num As Double)
 Cls.Value = Cls.Value + Num
End Sub

Còn việc đánh số dòng lệnh, ta còn cần biết thêm hàm Erl() trong VBA; Rất hữu dụng trong việc bẩy lỗi trong chương trình

Chúc ngày cuối tuần vui vẻ!
 
Upvote 0
Đây là 1 khái niệm tự định nghĩa í mà! Nó là vầy:

Giả dụ ta có 2 macro như sau:
Mã:
 Sub CongThem9()
  Cells(5, 4).Value = Cells(5, 4).Value + 9
 End Sub
Mã:
Sub CongThem8()
  Cells(4, 5).Value = Cells( 4, 5).Value + 8
End Sub

Giờ ta có thể biến 2 anh này thành macro Cha & macro con như sau:

PHP:
Sub Cha()
 Con [D5], 9
 Con [e4], 8
End Sub
PHP:
Sub Con(Cls As Range, Num As Double)
 Cls.Value = Cls.Value + Num
End Sub

Còn việc đánh số dòng lệnh, ta còn cần biết thêm hàm Erl() trong VBA; Rất hữu dụng trong việc bẩy lỗi trong chương trình

Chúc ngày cuối tuần vui vẻ!
Cái này thì đơn giản và dễ hiểu rồi nhưng mà có vẻ không liên quan đến thắc mắc "thừa số chung" của mình -0-/..

Cơ mà tôi cũng phát hiện ra việc đánh số đầu dòng tương tự như việc dùng label nhưng không bắt buộc phải dùng dấu 2 chấm đằng sau (có 2 chấm cũng chả sao --=0) . Dưới đây là ví dụ:
PHP:
Sub v()
    Const teo = 1
    Static mèo As Byte
2:  mèo = mèo + teo
1   MsgBox mèo
    GoTo 5
3   MsgBox "chó"
    GoTo 2
5   MsgBox 5
End Sub
Nhưng cơ mà vẫn chẳng hiểu nổi "Thừa số chung" là cái gì???? :.,
 
Lần chỉnh sửa cuối:
Upvote 0
Hại não thật, mình chỉ tự mày mò copy rồi paste thôi, hiểu được bản chất của từng câu lệnh thì bó tay __--__
Cái này thì đơn giản và dễ hiểu rồi nhưng mà có vẻ không liên quan đến thắc mắc "thừa số chung" của mình -0-/..

Cơ mà tôi cũng phát hiện ra việc đánh số đầu dòng tương tự như việc dùng label nhưng không bắt buộc phải dùng dấu 2 chấm đằng sau (có 2 chấm cũng chả sao --=0) . Dưới đây là ví dụ:
PHP:
Sub v()
    Const teo = 1
    Static mèo As Byte
2:  mèo = mèo + teo
1   MsgBox mèo
    GoTo 5
3   MsgBox "chó"
    GoTo 2
5   MsgBox 5
End Sub
Nhưng cơ mà vẫn chẳng hiểu nổi "Thừa số chung" là cái gì???? :.,
 
Upvote 0
Bạn có 2 macro A và B, bạn viết thêm 1 macro C nữa như sau:
Mã:
Sub C()
     Call A
     Call B
End Sub
Đơn giản thế thôi bạn.

Cách này đơn giản, nhưng thực tế tồn tại 3 macro;

Có cách phức tạp hơn, gôm lại thành 2 macro như sau:
Mã:
Sub C()
   AB Biến_A, Num1
   AB Biến_B, Num2
End Sub

& một Sub AB; Sub AB này nhận hai tham số được Sub C truyền cho để thực hiện đúng yêu cầu

PHP:
Sub AB( Biến_XYZ As String, Num As Long)
 ' . . . . . '
End Sub

Mình muốn thử sức với dạng này; Nhưng tác giả bài đăng đã xóa mất
Mã:
 Sub A
End Sub
rồi; Chào thua!||||| |||||
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom