Chuyên mục xử lý, gỡ rối code VBA

Liên hệ QC
Status
Không mở trả lời sau này.

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia
5/6/08
Bài viết
30,703
Được thích
53,930
Mọi người gỡ rối giúp code này với. Mình viết code VBA chèn công thức vào vùng từ G3:G66 với dữ liệu được chọn từ F3:F66
Nhưng khi chạy code nó copy công thức cho hết nguyên cột G. Giờ muốn nó chạy tới G66 thôi thì sao vậy các bác
Mã:
    With ShTrangChu.Range("g3:g66" & [f66].End(3).Row)
        .Value = "=IF(RC[-1]=0,0,HLOOKUP(R2C2,Data!R2C3:R180C250,MATCH(RC[-1],Data!R2C2:R198C2,0),0))"
        .Value = "'" & .Value
    End With
Xem lại cái này là cái gì
Mã:
 With ShTrangChu.Range("g3:g66" & [f66].End(3).Row)
thành
Mã:
 With ShTrangChu.Range("g3:g"& [f65000].End(3).Row)
 
Upvote 0
Xem lại cái này là cái gì
Mã:
 With ShTrangChu.Range("g3:g66" & [f66].End(3).Row)
thành
Mã:
 With ShTrangChu.Range("g3:g"& [f65000].End(3).Row)
Ban đầu code là như bạn sửa á, mình muốn chèn hàm JointText vào cell G67 để nó joint các text nằm ở các ô khác, nhưng khi chạy thì nó copy công thức xuống toàn bộ các cell trong cột G. Nên mình sửa lại thành như code mình đăng lên.
Hàm Jointext viết trong VBA sẽ báo lỗi khi viết công thức có chứa ký tự đặt biệt:
Mình viết
Mã:
With ShTrangChu.range (G67)
          .value = "Jointext (",", G8, G13:G23)"
          .value = .value
End with
Nhưng không đưa ra cell được do VBA báo lỗi chỗ ","
Nên mình chèn ngoài worksheet. Nhưng bị cái code trên chèn công thức vô nguyên cột.
 
Upvote 0
Hàm Jointext viết trong VBA sẽ báo lỗi khi viết công thức có chứa ký tự đặt biệt:
Mình viết
Mã:
With ShTrangChu.range (G67)
          .value = "Jointext (",", G8, G13:G23)"
          .value = .value
End with
Nhưng không đưa ra cell được do VBA báo lỗi chỗ ","
Nên mình chèn ngoài worksheet. Nhưng bị cái code trên chèn công thức vô nguyên cột.
Chỗ nào là text được đặt trong cặp nháy đôi thì khi đưa vào VBA phải sửa 1 dấu nháy đôi thành 2 dấu
Mã:
.value = "=Jointext("","",G8,G13:G23)"
 
Lần chỉnh sửa cuối:
Upvote 0
Em chào cả nhà
Em đang code VBA để tự động hóa công việc ghép hàng vào xe (điều phối vận chuyển)
Đề bài:
- Có tổng 500 điểm phải giao hàng, khối lượng mỗi điểm giao dao động từ 0,01 tấn đến 5 tấn, tổng khối lượng phải giao là 75 tấn
+ Thứ tự địa chỉ giao đã được sắp xếp từ trên xuống dưới -> không quan tâm đến khoảng cách
+ Tồn tại 1 số điểm có lối vào nhỏ hẹp, chỉ có thể đi xe có tải trọng nhỏ nhất (0,6 tấn)
- Có 15 xe 6 tạ và 10 xe 1 tấn , tổng trọng tải là 19 tấn
+Các xe chạy chuyến 1 thì Xếp từ 1 đến 7 điểm giao hàng
+Các xe chuyến 2,3 xếp từ 5 đến 25 điểm giao hàng
Yêu cầu: Xếp mỗi xe 3 chuyến sao cho khối lượng vận chuyển/1 chuyến phải >70% trọng tải xe và ≤ 100% trọng tải xe (ưu tiên chở tối đa tải trọng)
Cách làm tay trong thực tế:
  1. Ưu tiên chuyến 1 chở hết các điểm giao có khối lượng vận chuyển lớn hơn tải trọng max của xe (phải dùng từ 2 xe trở lên mới giao hết hàng)
  2. Ghép thêm hàng cho các xe thiếu tải (ví dụ tồn tại 1 điểm giao 1,3 tấn; đã dùng 1 xe 1 tấn và 1 xe 0,6 tấn -> Xe 0,3 tấn chưa đủ tải)
  3. Dùng xe nhỏ 0,6 tấn ghép hết các điểm có lối vào nhỏ hẹp, chỉ có thể đi xe có tải trọng nhỏ nhất (1 xe đi giao nhiều điểm)
  4. Ghép từ trên xuống dưới vào các xe còn lại sao cho đúng quy định tải trọng (lơn hơn 70% và nhỏ hơn bằng 100%) (1 xe đi giao nhiều điểm)
Ghép cho đến khi hoặc là hàng hết hoặc là xe hết
*Hiện em đang dùng If, vòng lặp while,..và 1 số hàm cơ bản để mô tả lại các công việc thành code, nhưng do việc dùng vòng lặp nhiều quá + số line nhiều dẫn tới excel không thể xử lý được
Ví dụ:
While WorksheetFunction.Max(Range("J3:J" & DongCuoi5)) > WorksheetFunction.Max(Sheets("DieuXe").Range("C29:C49"))
a = WorksheetFunction.Max(Range("J3:J" & DongCuoi5))
b = WorksheetFunction.Match(a, Range("J3:J" & DongCuoi5, 0))
c = WorksheetFunction.Max(Sheets("DieuXe").Range("C29:C49"))
d = WorksheetFunction.Match(c, Sheets("DieuXe").Range("C29:C49"), 0)
While Cells(b + 2, 10) > WorksheetFunction.Max(Sheets("DieuXe").Range("C29:C49"))
Cells(b + 2, 10) = a - WorksheetFunction.Max(Sheets("DieuXe").Range("C29:C49"))
d = WorksheetFunction.Match(c, Sheets("DieuXe").Range("C29:C49"), 0)
e = 1
Cells(b + 2, 11 + e) = Sheets("DieuXe").Cells(28 + d, 2)
Sheets("DieuXe").Cells(28 + d, 3) = 0
Sheets("DieuXe").Cells(28 + d, 3 + e) = Cells(b + 2, 5)
e = e + 1
Wend
c = WorksheetFunction.Max(Sheets("DieuXe").Range("C29:C49"))
d = WorksheetFunction.Match(c, Sheets("DieuXe").Range("C29:C49"), 0)
Sheets("DieuXe").Cells(28 + d, 3) = c - Cells(b + 2, 10)
Cells(b + 2, 10) = 0
Cells(b + 2, 11 + e) = Sheets("DieuXe").Cells(28 + d, 2)
Sheets("DieuXe").Cells(28 + d, 4) = Cells(b + 2, 5)
While Sheets("DieuXe").Cells(28 + d, 3) > 0.05
Wend
Wend

* Mong các anh chị góp ý định hướng giúp em, với đề bài toán thực tế như trên, thì em nên code theo hướng nào ạ? Dùng ngôn ngữ gì để có thể xử lý nhanh? cần dùng những kiến thức gì để có thể làm được....
Em cảm ơn mọi người nhiều ạ
 
Upvote 0
Mong cả nhà định hướng góp ý giúp em với ạ
Định hướng giúp em nên dùng kiến thức gì để có thể làm được ạ, ngôn ngữ lập trình......gì cũng được ạ, em không sợ khó, chỉ sợ không tìm ra hướng giải quyết

Trong 4 bước thực tế làm thì em mới code được bước 1 nhưng mà không biết kết quả ra sao vì excel cứ quay quay không thấy ra kết quả
Bước 2,3,4 em mới ra ý tưởng, dùng kỹ thuật quay lui, nhưng mà lặp bước 1 đã treo excel rồi thì không thể làm các bước tiếp theo được
Hiện em cũng đang nghĩ cách cải tiến code và ý tưởng để có thể làm được, mấy khoản ghép hàng vào xe chỉ cộng thủ công cơ bản, nên máy tính hoàn toàn có thể bắt chước để ghép hàng tự động được, mấy hôm trước em có đọc 1 bài trên giaiphapexcel: Đề bài cho 1 dãy số, yêu cầu tìm những số thỏa mãn tổng của chúng gần nhất với tổng A cho trước, bài của em cũng chỉ là verson 2 của bài đó thôi (tìm các điểm giao hàng có tổng KLVC gần với trọng tải xe nhất)
Em xin phép gửi file excel ví dụ
 

File đính kèm

  • file điều.xlsx
    33.3 KB · Đọc: 10
Upvote 0
Em có đoạn code để short 2 cột A,B ở sheet 1. Khi em qua sheet 2 và muôn sử dụng đoạn cốt này ở sheet 2 nhưng làm thế nào để ActiveWorkbook.Worksheets("Sheet1") chuyển thành ActiveWorkbook.Worksheets("Sheet2") được ạ? em cảm ơn!

Sub short()
'
' short Macro
'

'
Columns("A:B").Select
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("B1:B100") _
, SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").Sort
.SetRange Range("A1:B100")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
 

File đính kèm

  • active ws.xlsm
    23.5 KB · Đọc: 2
Upvote 0
Em có đoạn code để short 2 cột A,B ở sheet 1. Khi em qua sheet 2 và muôn sử dụng đoạn cốt này ở sheet 2 nhưng làm thế nào để ActiveWorkbook.Worksheets("Sheet1") chuyển thành ActiveWorkbook.Worksheets("Sheet2") được ạ? em cảm ơn!

Sub short()
'
' short Macro
'

'
Columns("A:B").Select
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("B1:B100") _
, SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").Sort
.SetRange Range("A1:B100")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
Khỏi cần ghi tên sheet hay tên workbook thì Excel sẽ hiểu đó là ActiveSheet và ActiveWorkbook
Ví dụ:
Mã:
Sub Test()
  With Range("A1:B1000")
    .Sort .Cells(1, 2), xlDescending, .Cells(1, 1), , xlDescending, , , xlNo
  End With
End Sub
Sort cột A giảm dần theo cột B tăng dần
 
Upvote 0
Khỏi cần ghi tên sheet hay tên workbook thì Excel sẽ hiểu đó là ActiveSheet và ActiveWorkbook
Ví dụ:
Mã:
Sub Test()
  With Range("A1:B1000")
    .Sort .Cells(1, 2), xlDescending, .Cells(1, 1), , xlDescending, , , xlNo
  End With
End Sub
Sort cột A giảm dần theo cột B tăng dần
CẢM ƠN ANH.
 
Upvote 0
Em có sưu tầm được 1 code copy dữ liệu từ những ô bình thường sang những ô filter. Tuy nhiên em mắc phải vấn đề là :
1. Khi vùng copy cũng là vùng filter thì paste sang vùng filter kia bị lỗi.
2. Khi paste thì giá trị ở ô cuối cùng lặp lại = số hàng đã chọn. VD : em copy dữ liệu ở ô A1,A2,A3 có giá trị lần lượt là "vịt","gà"," mèo" thì khi paste nó sẽ hiện ra là vịt , gà , mèo, mèo , mèo , mèo ( tức là thêm 3 lần "mèo" nữa ).
3. Không áp dụng được copy từ file excel này qua file excel khác được, chỉ làm được nếu trong cùng 1 file ( có thể khác sheet ).
Rất mong các anh giúp đỡ em.
Sub Paste_to_Visible_Rows()

Dim Nguon As Range, Dich As Range
Dim i As Long, r As Long
Set Nguon = Application.InputBox(prompt:="Chon Vung Copy ", Type:=8)
Set Dich = Application.InputBox(prompt:="Chep Den ", Type:=8)
For i = 1 To Nguon.Rows.Count
Do Until Not Dich.Offset(r).Rows.Hidden
r = r + 1
Loop
Nguon.Rows(i).Copy Destination:=Dich.Offset(r)
r = r + 1
Next i

End Sub
 
Upvote 0
Em có chút vấn đề về lỗi out of memory khi em chạy chương trình khá nhiều code. Em đang cố gắng sửa lại code tối ưu hóa tuy nhiên chưa được tốt cho lắm. Do lần đầu viết một ứng dụng dài hơi nên xin vài "Gợi ý" của các anh chị để tối ưu hóa và giảm thiểu lỗi trên ạ. Em xin cảm ơn. (Do em viết cho công ty em nên không tiện share code).
 

File đính kèm

  • outofmemory.png
    outofmemory.png
    41 KB · Đọc: 19
Upvote 0
Đầu tiên hết thì kiểm soát hàm đệ quy.

Ngoại trừ trường hợp hàm đệ quy ra, có 3 lý do chính để một chương trình bị phình ra và "out of memory". Đây là danh sách có sự sắp xếp, cần làm theo đúng thứ tự.

1/ dùng mảng quá lớn. Sửa bằng cách reset mảng lại sau khi dùng. Với VBA thì có thêm trường hợp string bị phình, cần set lại thành "".

2/ dùng quá nhiều objects lớn. Dùng xong thì Set chúng lại thành nothing.

3/ riêng đối với Excel, mở nhiều files có màu mè mẫu mã cũng bị tốn bộ nhớ.
3.1 đối với trường hợp nhiều code, tránh màu mè mẫu mã và shapes trong file và tránh ba cái mớ dialog box màu mè.
3.2 đóng bớt các files đã dùng xong
3.3 nếu code có dùng các objects chuyên về dữ liệu như ADO thì phải coi chừng connection và recordset.
3.4 nếu làm mọi thứ mà vẫn không được thì canh cứ khoảng vài giây, cho code save file lại. Khi được save, Excel sẽ nhả những phần memory mà nó chứa trong cache.
 
Upvote 0
Đầu tiên hết thì kiểm soát hàm đệ quy.

Ngoại trừ trường hợp hàm đệ quy ra, có 3 lý do chính để một chương trình bị phình ra và "out of memory". Đây là danh sách có sự sắp xếp, cần làm theo đúng thứ tự.

1/ dùng mảng quá lớn. Sửa bằng cách reset mảng lại sau khi dùng. Với VBA thì có thêm trường hợp string bị phình, cần set lại thành "".

2/ dùng quá nhiều objects lớn. Dùng xong thì Set chúng lại thành nothing.

3/ riêng đối với Excel, mở nhiều files có màu mè mẫu mã cũng bị tốn bộ nhớ.
3.1 đối với trường hợp nhiều code, tránh màu mè mẫu mã và shapes trong file và tránh ba cái mớ dialog box màu mè.
3.2 đóng bớt các files đã dùng xong
3.3 nếu code có dùng các objects chuyên về dữ liệu như ADO thì phải coi chừng connection và recordset.
3.4 nếu làm mọi thứ mà vẫn không được thì canh cứ khoảng vài giây, cho code save file lại. Khi được save, Excel sẽ nhả những phần memory mà nó chứa trong cache.

Em cảm ơn anh đã chỉ bảo ạ. Em sẽ xem xét các hướng dẫn của anh ở trên để tinh chỉnh lại để code chạy được suôn sẻ hơn :)
 
Upvote 0
Em nhờ các bác trên này viết được 1 đoạn code để sửa tên sheet từ thông tin 1 ô trong sheet đó.
Đoạn mã code:
Private Sub Worksheet_Deactivate()
On Error GoTo ext
Me.Name = [b1]
ext:
End Sub

Em muốn thêm nhu cầu nữa là chuyển tên sheet từ có dấu thành không dấu.
Nhờ các bác giúp đỡ.
Em cảm ơn mọi người trước!
 
Upvote 0
Em nhờ các bác trên này viết được 1 đoạn code để sửa tên sheet từ thông tin 1 ô trong sheet đó.
Đoạn mã code:
Private Sub Worksheet_Deactivate()
On Error GoTo ext
Me.Name = [b1]
ext:
End Sub

Em muốn thêm nhu cầu nữa là chuyển tên sheet từ có dấu thành không dấu.
Nhờ các bác giúp đỡ.
Em cảm ơn mọi người trước!
Bạn thêm code sau vào Module.
Mã:
Function ConvertToUnSign(ByVal sContent As String) As String
     Dim i As Long
     Dim intCode As Long
     Dim sChar As String
     Dim sConvert As String
     ConvertToUnSign = AscW(sContent)
     For i = 1 To Len(sContent)
        sChar = Mid(sContent, i, 1)
        If sChar <> "" Then
            intCode = AscW(sChar)
        End If
        Select Case intCode
            Case 273
                sConvert = sConvert & "d"
            Case 272
                sConvert = sConvert & "D"
            Case 224, 225, 226, 227, 259, 7841, 7843, 7845, 7847, 7849, 7851, 7853, 7855, 7857, 7859, 7861, 7863
                sConvert = sConvert & "a"
            Case 192, 193, 194, 195, 258, 7840, 7842, 7844, 7846, 7848, 7850, 7852, 7854, 7856, 7858, 7860, 7862
                sConvert = sConvert & "A"
            Case 232, 233, 234, 7865, 7867, 7869, 7871, 7873, 7875, 7877, 7879
                sConvert = sConvert & "e"
            Case 200, 201, 202, 7864, 7866, 7868, 7870, 7872, 7874, 7876, 7878
                sConvert = sConvert & "E"
            Case 236, 237, 297, 7881, 7883
                sConvert = sConvert & "i"
            Case 204, 205, 296, 7880, 7882
                sConvert = sConvert & "I"
            Case 242, 243, 244, 245, 417, 7885, 7887, 7889, 7891, 7893, 7895, 7897, 7899, 7901, 7903, 7905, 7907
                sConvert = sConvert & "o"
            Case 210, 211, 212, 213, 416, 7884, 7886, 7888, 7890, 7892, 7894, 7896, 7898, 7900, 7902, 7904, 7906
                sConvert = sConvert & "O"
            Case 249, 250, 361, 432, 7909, 7911, 7913, 7915, 7917, 7919, 7921
                sConvert = sConvert & "u"
            Case 217, 218, 360, 431, 7908, 7910, 7912, 7914, 7916, 7918, 7920
                sConvert = sConvert & "U"
            Case 253, 7923, 7925, 7927, 7929
                sConvert = sConvert & "y"
            Case 221, 7922, 7924, 7926, 7928
                sConvert = sConvert & "Y"
            Case Else
                sConvert = sConvert & sChar
        End Select
     Next
     ConvertToUnSign = sConvert
  End Function
Sau đó tiếp tục sửa code của bạn như sau:
Mã:
Private Sub Worksheet_Deactivate()
On Error GoTo ext
Me.Name = ConvertToUnSign([b1].Text)
ext:
End Sub
 
Upvote 0
Đầu tiên hết thì kiểm soát hàm đệ quy.

Ngoại trừ trường hợp hàm đệ quy ra, có 3 lý do chính để một chương trình bị phình ra và "out of memory". Đây là danh sách có sự sắp xếp, cần làm theo đúng thứ tự.

1/ dùng mảng quá lớn. Sửa bằng cách reset mảng lại sau khi dùng. Với VBA thì có thêm trường hợp string bị phình, cần set lại thành "".

2/ dùng quá nhiều objects lớn. Dùng xong thì Set chúng lại thành nothing.

3/ riêng đối với Excel, mở nhiều files có màu mè mẫu mã cũng bị tốn bộ nhớ.
3.1 đối với trường hợp nhiều code, tránh màu mè mẫu mã và shapes trong file và tránh ba cái mớ dialog box màu mè.
3.2 đóng bớt các files đã dùng xong
3.3 nếu code có dùng các objects chuyên về dữ liệu như ADO thì phải coi chừng connection và recordset.
3.4 nếu làm mọi thứ mà vẫn không được thì canh cứ khoảng vài giây, cho code save file lại. Khi được save, Excel sẽ nhả những phần memory mà nó chứa trong cache.
#1/ Hiện tại em không dùng Array nhiều, chỉ dùng Đệ quy nhiều. Vấn đề phình String em chưa nghiên cứu nhưng em sẽ thử set lại "" (Em có đọc đâu đó nên set vbNullString tốt hơn)

#2/ Đúng là để code trực quan hơn em có dùng một số Object Workbook, Worksheet, Mail Object. Nhưng những cái nào ít dùng em đang cố gắng dùng dạng trực tiếp. Riêng việc Set = Nothing em đang sử dụng nhưng cũng chưa rõ khi set về Nothing thì bộ nhớ đã được clear hay chưa.

#3/ Phần màu mè không có nhiều vì em chỉ load data chứ không dùng condition formatting.
#3.1 Shapes, Dialog thì cũng không có (có một số megbox thông báo thôi)

#3.2 Em đóng file APP nhưng nó không tắt hẳn.
#3.3 Em chưa học ADO nên không có dùng
#3.4 Em sẽ thử dùng cách này của anh.


Em có một vấn đề thế này, không biết anh có thể cho em lời khuyên không ạ.
Vấn đề 1: Không tắt hẳn file, dẫn tới lỗi out of memory.
Em có 2 file, file APP.xlsm và file DATA.xlsm. Em dùng file APP để đăng nhập và gọi xác nhận dữ liệu từ file DATA. Sau khi kiểm tra đăng nhập hợp lệ, sẽ nạp dữ liệu login và load dữ liệu theo user login lên trong sheet TIMESHEET của file DATA.xlsm.
Vấn đề ở chỗ mỗi file em đều có một Module dùng để quản lý biến như bên dưới. Và khi login xong, em đóng cái file APP lại, nhưng nó không tắt hẳn trong cửa sổ VBA, thành ra, những biến nó đã khai báo vẫn còn tốn bộ nhớ (em đang nghĩ vậy). Và file DATA, APP có kha khá biến tương đồng :(
Hiện tại nếu chạy file APP gọi file DATA thì bị lỗi "Out of Memory" nhưng nếu chạy trực tiếp file DATA thì không bị vấn đề trên.

Vấn đề 2:
File của em có khá nhiều biến, vì để cho code trở nên dễ đọc, và có khá nhiều Sub nên các biến được sử dụng khá nhiều, thành ra em đang tạm quản lý ở một Module dạng Public. Điều này khiến em lo lắng vì sẽ tốn khá nhiều bộ nhớ lưu trữ.

Mã:
Option Explicit
Public wb As Workbook
Public wb_App As Workbook

Public ws As Worksheet
Public ws_Login As Worksheet, ws_MemData As Worksheet, ws_TimeSheet As Worksheet
Public ws_Record As Worksheet, ws_OffData As Worksheet, ws_Confirm As Worksheet, ws_DateTime As Worksheet, ws_Manager As Worksheet

Public rng As Range
'Declare ranges in the APP file
Public btn_InfoLogin As Range, btn_Contact As Range, btn_BackInfo As Range, btn_ForgetPW As Range, btn_Login As Range, btn_AppInfo As Range, frm_UserID As Range, frm_UserPW As Range
'Declare ranges in the DATA file
Public rng_UserID As Range, rng_UserName As Range, rng_PubKey As Range, rng_Manager As Range, rng_DataTittle As Range
Public rng_EnDays As Range, rng_EnHours As Range, rng_EnMins As Range
Public rng_OutDays As Range, rng_OutHours As Range, rng_OutMins As Range
Public rng_FromDate As Range, rng_ToDate As Range, rng_FromTime As Range, rng_ToTime As Range, rng_Notes As Range

'Declare object
Public OutApp As Object, OutMail As Object

Public icnt As Long, jcnt As Long, lng_lastRow As Long

'Public int_UsedDays As Integer, int_UsedHours As Integer, int_UsedMins As Integer
'Public int_EnDOff As Integer, int_EnHOff As Integer, int_EnNOff As Integer, int_AsEnNOff As Integer

Public Cancel As Boolean

Public Const strPATH As String = "\\A\B\"
Public Const strDATA As String = "offworkDATA.xlsm"
Public Const strAPP As String = "offworkAPP.xlsm"
Public Const strPubPW As String = "XYZ"
Public answer As String
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn có nhiều vấn đề quá. Khong thể giải quyết tất cả cùng 1 lúc. Làm tham lam tức là tự phình -> tự mình bị "out of memory"
Trước mắt cứ lo vấn đề #1. Mấy cái khác tính sau.
a/ hàm đệ quy rất khó debug. Bạn có thể tìm hiểu cách kiểm soát xem nó được gọi bao nhiêu lần.
b/ string thì xem lại những chỗ lập string bằng biểu thức kiểu s = s & abc, và kiểm soát độ lớn của nó.
ví dụ:
If (Len(s) Mod 1000 = 0) Then MsgBox "Đã phình ra thêm 1000 ký tự: " & Len(s)
 
Upvote 0
Bạn có nhiều vấn đề quá. Khong thể giải quyết tất cả cùng 1 lúc. Làm tham lam tức là tự phình -> tự mình bị "out of memory"
Trước mắt cứ lo vấn đề #1. Mấy cái khác tính sau.
a/ hàm đệ quy rất khó debug. Bạn có thể tìm hiểu cách kiểm soát xem nó được gọi bao nhiêu lần.
b/ string thì xem lại những chỗ lập string bằng biểu thức kiểu s = s & abc, và kiểm soát độ lớn của nó.
ví dụ:
If (Len(s) Mod 1000 = 0) Then MsgBox "Đã phình ra thêm 1000 ký tự: " & Len(s)
Vấn đề của em nằm ở chỗ cái file APP của em không hoàn toàn được đóng trong VBE, như bình luận của anh Werner Mittrup.
https://archive.sap.com/discussions/thread/3514553
 

File đính kèm

  • errorvba.png
    errorvba.png
    66.9 KB · Đọc: 13
Upvote 0
Các anh cho em hỏi sao code trong file sao không sumifs được
Cám các anh nhiều.
 

File đính kèm

  • Book1.xlsm
    19.9 KB · Đọc: 4
Upvote 0
Các anh cho em hỏi sao code trong file sao không sumifs được
Cám các anh nhiều.
Code bạn sai hoàn toàn thì tính tổng là sao bạn, mà tôi có thấy code bạn dùng Sumifs chổ nào đâu. Mục đích của bạn là gì có thể giải thích để anh em giúp cho.
 
Upvote 0
Status
Không mở trả lời sau này.
Web KT
Back
Top Bottom