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
Bạn viết vầy:
Mã:
RES = GPE(rowa, cola)
là sai cú pháp
Phải vầy mới đúng:
Mã:
GPE rowa, cola
cám ơn thầy, cũng với code đó: em muốn tách riêng ra hàm con, vì trong chương trình của em có nhiền điều kiện để chọn hàng và cột nên khi gọi cột 1 thì chỉ cần gọi chương trình con lên và chạy, e chưa hiểu lắm về cách xuất ra

xin lỗi thầy, em đã làm được, thầy xóa giúp em bài của em
 

File đính kèm

  • test array.xlsm
    18.1 KB · Đọc: 3
Lần chỉnh sửa cuối:
Upvote 0
cám ơn thầy, cũng với code đó: em muốn tách riêng ra hàm con, vì trong chương trình của em có nhiền điều kiện để chọn hàng và cột nên khi gọi cột 1 thì chỉ cần gọi chương trình con lên và chạy, e chưa hiểu lắm về cách xuất ra

xin lỗi thầy, em đã làm được, thầy xóa giúp em bài của em
Tôi thắc mắc tại sao bài này bạn không dùng VLOOKUP?
Ví dụ:
Mã:
=VLOOKUP(K4,$A$2:$I$14,MATCH(K5,$A$2:$I$2,0),0)
 
Upvote 0
Tôi thắc mắc tại sao bài này bạn không dùng VLOOKUP?
Ví dụ:
Mã:
=VLOOKUP(K4,$A$2:$I$14,MATCH(K5,$A$2:$I$2,0),0)
vì e đang lam chương trinh tim kiếm NVL, nên k xài Vlookup
đính kèm là 1 phần chương trình
nhưng khi em gọi hàm thì báo lỗi Byref argument type mismatch
 

File đính kèm

  • SEARCH MATERIAL.xls
    432.5 KB · Đọc: 7
Lần chỉnh sửa cuối:
Upvote 0
vì e đang lam chương trinh tim kiếm NVL, nên k xài Vlookup
đính kèm là 1 phần chương trình
nhưng khi em gọi hàm thì báo lỗi Byref argument type mismatch
Nó không chịu byRef thì mình byVal
Mã:
Function terminal(ByVal ter As String, ByVal wire As String, Darr())
  Dim Arr(1 To 100, 1 To 3), i As Long, j As Long, iR As Long, DK As String
  For i = 2 To UBound(Darr)
    If Darr(i, 1) = ter Then
      For j = 2 To UBound(Darr, 2)
        If Darr(1, j) = wire Then
          terminal = Darr(i, j)
          Exit Function
        End If
      Next j
    End If
  Next i
End Function
Sửa đại vậy thôi chứ chương trình của bạn muốn ngon cần phải cải thiện rất nhiều
 
Upvote 0
Nó không chịu byRef thì mình byVal
Mã:
Function terminal(ByVal ter As String, ByVal wire As String, Darr())
  Dim Arr(1 To 100, 1 To 3), i As Long, j As Long, iR As Long, DK As String
  For i = 2 To UBound(Darr)
    If Darr(i, 1) = ter Then
      For j = 2 To UBound(Darr, 2)
        If Darr(1, j) = wire Then
          terminal = Darr(i, j)
          Exit Function
        End If
      Next j
    End If
  Next i
End Function
Sửa đại vậy thôi chứ chương trình của bạn muốn ngon cần phải cải thiện rất nhiều
cám ơn thầy
 
Upvote 0
cũng chương trình của em, muốn tạo Combobox theo dòng đầu tiên trong Sheet Terminal, nhưng viết chương trình con và xuất theo điều kiện:
Mã:
For i = 2 To UBound(Darr)
    If Darr(i, 1) = ter Then
      For j = 2 To UBound(Darr, 2)
        If Darr(i, j) > 0 Then
                       Darr(1, j)
         End If  
      Next j
End If
Next i
[code]

em o viết theo Dictionary nhưng chưa hiểu củ pháp
 
Lần chỉnh sửa cuối:
Upvote 0
Chào các anh chị.
Hiện tại tôi đang tập sử dụng VBA để viết 1 số macro tích hợp vào file theo dõi thông tin của mình, nhưng gần đây file xuất hiện lỗi error in loading DLL.
Hiện tại tôi không biết nguyên nhân như thế nào, mong các bác chỉ giúp
 

File đính kèm

  • thongtinNCC_loi.xlsm
    624.9 KB · Đọc: 13
Upvote 0
Chào các anh chị.
Hiện tại tôi đang tập sử dụng VBA để viết 1 số macro tích hợp vào file theo dõi thông tin của mình, nhưng gần đây file xuất hiện lỗi error in loading DLL.
Hiện tại tôi không biết nguyên nhân như thế nào, mong các bác chỉ giúp
Vào tool/references rồi bỏ những cái có chữ mising đi.
 
Upvote 0
Anh chị cho em hỏi, em có làm đoạn macro bảng chấm công để lấy dữ liệu từ 2 file. Nhưng hiện tại em đang mắc 1 vấn đề là nếu kế hoạch tháng 2 đều có trong 2 file PXDuc_201802 và PXDuc_201803 thì khi chọn cả 2 file thì chỉ lấy dữ liệu của tháng nằm trong kế hoạch ở sheet ThongSoChung, em mới làm được nếu file có kế hoạch từ ngày mùng 1 đến cuối tháng còn trường hợp trên em chưa làm được. Mong anh chị gợi ý giúp em ạ. Em cảm ơn.
 

File đính kèm

  • PXDuc_201803.xlsx
    169.6 KB · Đọc: 0
  • PXDuc_201802.xlsx
    165.8 KB · Đọc: 0
  • BangChamCong.xlsm
    63.5 KB · Đọc: 1
Upvote 0
Chào các anh chị em GPE!
Mình có 2 File đính kèm
1/. Master.xlsb : File nguồn
2/. Report.xlsx : File lưu

Mình có nhờ tạo code để copy sheet Report và chọn lưu sang File Report theo từng Sheet theo từng lần chọn.
Nhưng khi thực hiện xong thì ở File lưu có thêm phần "khuyến mãi" không mong muốn
upload_2018-4-4_23-31-27.png

Anh chị em nào biết cách loại bỏ phần "khuyến mãi " này thì giúp mình nhé!
Mình cám ơn nhiều!
 

File đính kèm

  • Master.xlsb
    531.7 KB · Đọc: 4
  • Report.xlsx
    32.7 KB · Đọc: 3
Upvote 0
Em chào các anh. Nhờ sự trợ giúp của anh Ba Tê mà em có được 1 file giúp ích công việc rất nhiều. Tuy nhiên hiện tại có 1 số vấn đề phát sinh. Các anh giúp em với được không ạ. Em cám ơn !
 

File đính kèm

  • Target FINAL.xlsb
    32.6 KB · Đọc: 2
Upvote 0
Em chào các anh. Nhờ sự trợ giúp của anh Ba Tê mà em có được 1 file giúp ích công việc rất nhiều. Tuy nhiên hiện tại có 1 số vấn đề phát sinh. Các anh giúp em với được không ạ. Em cám ơn !
1. Bạn xem file này có khác biệt gì với code trong file trước rồi ngẫm ra cái "chèn thêm cột".
2. Bạn muốn lọc theo điều kiện nào thì cho code "biết" mà làm luôn, sao phải filter dữ liệu làm gì? Trong file là lọc theo điều kiện cột F (Object), nếu nhiều điều kiện nữa thì tính nữa.
 

File đính kèm

  • Target FINAL.rar
    28 KB · Đọc: 4
Upvote 0
1. Bạn xem file này có khác biệt gì với code trong file trước rồi ngẫm ra cái "chèn thêm cột".
2. Bạn muốn lọc theo điều kiện nào thì cho code "biết" mà làm luôn, sao phải filter dữ liệu làm gì? Trong file là lọc theo điều kiện cột F (Object), nếu nhiều điều kiện nữa thì tính nữa.
Em cám ơn anh BaTe :
1. Em đã hiểu cách làm thế nào để chèn thêm cột rồi. Nhưng mà khi em chạy code thì các dữ liệu ở những cột xen giữa ( cột mới thêm vào ) bị mất hết. Anh xem giúp em với
2. Thực ra thì file này, em chỉ sử dụng ở sheet IT2003 thôi. Còn sheet kia là người khác dùng, và vì họ là những người gần như chỉ biết nhập liệu nên có những trường hợp nhân viên không còn trong bảng nữa nhưng họ không xóa đi mà vẫn để đấy, sau đó bỏ filter bạn nghỉ kia đi => Ý là chỉ hiển thị những người đang làm việc hiện tại cho em xem => Như vậy khi dùng code ở IT2003 thì vẫn sẽ hiện những người đã nghỉ.
Em thấy đưa điều kiện để các anh giúp không khó, nhưng một thời gian điều kiện sẽ lại thay đổi :D
====> Vì vậy, nếu code làm được em chỉ mong kết quả ở IT2003 sẽ hiện kết quả ở hàng HR Only của các ô hiện hành ( không lấy kq các ô đã filter đi ).
Nếu không được cũng không sao, vì được đến bước này rồi thì em cũng rất chi là thỏa mãn.
Em cám ơn.
 
Lần chỉnh sửa cuối:
Upvote 0
Chào các anh, chị , em và các bạn trên GPE
Trong Module1 (ModData), sử dụng code để lấy dữ liệu từ 8 dòng trên Sheet Input đưa sang bên sheet PartsData
Tuy nhiên khi mình kết thúc code bằng lệnh chọn dòng dưới cùng của cột A ở sheet PartsData (như trong hình 1)
Mã:
Sheets("PartsData").Select
Cells(nextRow, "A").Select
thì Excel lập tức báo lỗi (như trong hình 2)
Mà hễ bình bỏ dòng lệnh đó ra khỏi code thì file lại chạy ngon lành
Mình không hiểu tại sao. Rất mong mọi người giúp đỡ xử lý lỗi này
 

File đính kèm

  • try.xlsm
    99.7 KB · Đọc: 9
  • Hình 2.png
    Hình 2.png
    391.7 KB · Đọc: 7
  • Hình 1.png
    Hình 1.png
    345.6 KB · Đọc: 6
Upvote 0
Chào các anh, chị , em và các bạn trên GPE
Trong Module1 (ModData), sử dụng code để lấy dữ liệu từ 8 dòng trên Sheet Input đưa sang bên sheet PartsData
Tuy nhiên khi mình kết thúc code bằng lệnh chọn dòng dưới cùng của cột A ở sheet PartsData (như trong hình 1)
Mã:
Sheets("PartsData").Select
Cells(nextRow, "A").Select
thì Excel lập tức báo lỗi (như trong hình 2)
Mà hễ bình bỏ dòng lệnh đó ra khỏi code thì file lại chạy ngon lành
Mình không hiểu tại sao. Rất mong mọi người giúp đỡ xử lý lỗi này
Mình chạy có thấy bị gì đâu
 
Upvote 0
Chào các anh, chị , em và các bạn trên GPE
Trong Module1 (ModData), sử dụng code để lấy dữ liệu từ 8 dòng trên Sheet Input đưa sang bên sheet PartsData
Tuy nhiên khi mình kết thúc code bằng lệnh chọn dòng dưới cùng của cột A ở sheet PartsData (như trong hình 1)
Mã:
Sheets("PartsData").Select
Cells(nextRow, "A").Select
thì Excel lập tức báo lỗi (như trong hình 2)
Mà hễ bình bỏ dòng lệnh đó ra khỏi code thì file lại chạy ngon lành
Mình không hiểu tại sao. Rất mong mọi người giúp đỡ xử lý lỗi này
Code của anh dài nên em luận không ra được.
Em viết code mảng cho ngắn gọn, hi vọng đúng ý của anh.
Mã:
Sub GPE()
    Dim sArr(), dArr()
    Dim I As Long, j As Long, K As Long, D As Date, lR As Long
    
    D = wksPartsDataEntry.Range("D3")
    sArr() = wksPartsDataEntry.Range("B7", wksPartsDataEntry.Range("B7").End(xlDown)).Resize(, 8).Value
    ReDim dArr(1 To UBound(sArr, 1), 1 To 11)
    
    For I = 1 To UBound(sArr, 1)
        dArr(1, 1) = Format(Now, "mm/dd/yyyy hh:mm:ss")
        dArr(1, 2) = Application.UserName
        K = K + 1
        dArr(K, 3) = D
        For j = 1 To 8
            dArr(K, j + 3) = sArr(I, j)
        Next j
    Next I
    
    lR = wksPartsData.Range("C" & Rows.Count).End(xlUp).Row + 1
    wksPartsData.Range("A" & lR).Resize(K, 11) = dArr
End Sub
 
Upvote 0
Nhờ tất cả mọi người xem qua file và chỉnh sửa code lại theo ý như thế này ạ:
1. Trong form: khi giây chạy về "0:00" thì kêu chuông, hiện tại thì giây chạy về "0:00" nhưng sau 1 giây nó mới kêu chuông. Ý muốn là khi giây nhảy về "0:00" là phải kêu chuông ngay mà không có trễ 1 giây ạ. (bắt đầu chạy là nhấn Enter).
2. Có cách nào để chọn trực tiếp 1 khoảng thời gian bất kỳ ngay trong chỗ thời gian (trong form) để khi nhấn enter thì bắt đầu chạy từ khoảng thời gian bất kỳ đó không ạ, kể cả chỗ hiển thị số Hiệp (trong form) nữa ạ, nếu chọn ngẫu nhiên là Hiệp 2 thì sau khi chạy hết khoảng thời gian ở hiệp đó thì sẽ chuyển sang Hiệp 3 tiếp theo ạ.(ví dụ: thi đấu 3 Hiệp và thời gian thi đấu là 2', tại thời điểm Hiệp 2 đang diễn ra ở 1':25", gặp sự cố mất điện chẳng hạn, sau khi có điện ta chọn lại thời điểm Hiệp 2 và khoảng thời gian 1':25" đó để cho thi đấu tiếp. Yêu cầu là sau khi hết khoảng thời gian đó thì sẽ tiếp tục sang Hiệp 3 và vẫn thời gian thi đấu là 2'. )
----------
Mong sự giúp đỡ của mọi người. File này là anh Huuthang_bd đã làm cho em, vì điều kiện và thời gian chưa cho phép nên anh ấy chưa chỉnh sửa được nên em xin phép anh ấy đăng lên đây để mọi người chỉnh sửa giúp ạ. Cảm ơn mọi người.
 

File đính kèm

  • BangDiemVT.rar
    552.6 KB · Đọc: 3
Upvote 0
Nhờ tất cả mọi người xem code và sữa giúp em với e xuất ra nó không đúng kết quả tổng hợp, với em muốn bỏ nhac chọn vùng dữ liệu ( mặc định là K8: cuối cột P có dữ liệu), và loại bỏ mã ko có đơn vị
Mã:
Option Explicit

' Dinh nghia kieu nguoi dung cho loai vat tu
' moi loaij vat tu gom co ma so , ten,don vij, khoi luong
Type LoaiVatTu
    Maso As String
    Donvi As String
    Khoiluong As String
End Type

' Lap danh sach cac loai vat tu

Public Sub DanhSachVT()
    Dim R As Range 'Pham vi trong bang vat lieu can phan tich
    Dim DanhSachVT() As LoaiVatTu ' Mang dong chua danhsach vat tu
    Dim i As Long ' chi so mang
    Dim k As Range ' bien nay dung de duyet bang du lieu trong R

Set R = Application.InputBox("Cho?n vu`ng du~ liê?u câ`n tô?ng hop", Type:=8)
    i = 0 'chi so dau tien cua mang vat tu la 0
    Dim ii As Long
    Dim ok As Boolean
    ' Doc du lieu tu sheet "Phan Tich Vat Tu"
    For Each k In R.Columns(1).Cells
        If Trim(k.Value) <> "" Then
            If i = 0 Then 'vat tu dau tien trong danh sach
                ReDim Preserve DanhSachVT(i) 'khai bao lai mang
                'gan du lieu cho vat tu dau tien
                DanhSachVT(i).Maso = Trim(k.Value)
                DanhSachVT(i).Donvi = Trim(k.Offset(0, 6).Value)
                DanhSachVT(i).Khoiluong = Trim(k.Offset(0, 5).Value)
                i = i + 1 'tang chi so mang len 1
            Else 'neu danh sach vat tu lon hon 1
                ok = True
                For ii = 0 To i - 1
                    'vat tu nay da co trong danh sach
                    If DanhSachVT(ii).Maso = Trim(k.Value) Then
                        ok = False
                        DanhSachVT(ii).Khoiluong = DanhSachVT(ii).Khoiluong
                        Exit For
                    End If
                Next ii
                ' vat tu chua co ten trong danh sach
                If ok Then
                    ReDim Preserve DanhSachVT(i)
                    DanhSachVT(i).Maso = Trim(k.Value)
                    DanhSachVT(i).Donvi = Trim(k.Offset(0, 6).Value)
                    DanhSachVT(i).Khoiluong = Trim(k.Offset(0, 5).Value)
                    i = i + 1 'tang chi so mang len 1
                End If
            End If
        End If
    Next
    'Ghi ket qua ra excel, trong sheet "THVT"
    Dim j As Long
    Dim row As Long
 
    row = 7 ' bat dau ghi du lieu
    For j = LBound(DanhSachVT) To UBound(DanhSachVT)
        ThisWorkbook.Worksheets("thvt").Cells(row + j, 1).Value = j + 1
        ThisWorkbook.Worksheets("thvt").Cells(row + j, 2).Value = DanhSachVT(j).Maso
        ThisWorkbook.Worksheets("thvt").Cells(row + j, 3).Value = DanhSachVT(j).Donvi
        ThisWorkbook.Worksheets("thvt").Cells(row + j, 4).Value = DanhSachVT(j).Khoiluong
    Next j
    MsgBox "Ket thuc"
    End Sub
 

File đính kèm

  • test.xlsm
    29.4 KB · Đọc: 6
Lần chỉnh sửa cuối:
Upvote 0
Code của anh dài nên em luận không ra được.
Em viết code mảng cho ngắn gọn, hi vọng đúng ý của anh.
Mã:
Sub GPE()
    Dim sArr(), dArr()
    Dim I As Long, j As Long, K As Long, D As Date, lR As Long
  
    D = wksPartsDataEntry.Range("D3")
    sArr() = wksPartsDataEntry.Range("B7", wksPartsDataEntry.Range("B7").End(xlDown)).Resize(, 8).Value
    ReDim dArr(1 To UBound(sArr, 1), 1 To 11)
  
    For I = 1 To UBound(sArr, 1)
        dArr(1, 1) = Format(Now, "mm/dd/yyyy hh:mm:ss")
        dArr(1, 2) = Application.UserName
        K = K + 1
        dArr(K, 3) = D
        For j = 1 To 8
            dArr(K, j + 3) = sArr(I, j)
        Next j
    Next I
  
    lR = wksPartsData.Range("C" & Rows.Count).End(xlUp).Row + 1
    wksPartsData.Range("A" & lR).Resize(K, 11) = dArr
End Sub
Code của Vanthinh luôn gọn gàng và tốc độ nhanh đúng phong cách của anh Nguyễn Duy Tuân; Cảm ơn Vanthinh3101 nhiều, Chúc bạn và gia đình luôn mạnh khỏe, gặp nhiều thành công trong công việc. Hẹn gặp lại bạn mùa hè năm nay nhé
 
Lần chỉnh sửa cuối:
Upvote 0
Status
Không mở trả lời sau này.
Web KT
Back
Top Bottom