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,918
Mình chưa có rành cú pháp VBA nữa thì lấy đâu ra cao kiến để phát biểu hả bạn ? Bạn làm khó mình rồi.
Có nhất thiết phải biết cú pháp đâu, tui còn chả biết cái vba là cái giống gì mà cứ nói đại đi, chả ai bắt vạ đâu, nhất là gái xinh. Cứ thích làm khó đấy, chủ yếu là kích thích nhau cùng phát triển thui.
 
Upvote 0
Tạm thời chữa cháy bằng cách này. Bạn xem thử

Chào bạn !

Xin cám ơn hôm trước đã giúp tôi code nhé.

Hôm nay có việc này xin nhờ bạn giúp với:
2 cái textbox ngày đi + ngày về :
nhờ bắt lỗi dùm :
+ nếu ngày nhập vào lớn hơn ngày hiện tại
+ nếu ngày về lớn hơn ngày đi
ra thông báo lỗi và con trỏ vẫn nằm tại texbox.

Loay hoay cả ngày Chủ nhật mà làm không được.

Cám ơn bạn rất nhiều.
 

File đính kèm

  • PCT.xlsm
    187.8 KB · Đọc: 3
Upvote 0
Chào bạn !

Xin cám ơn hôm trước đã giúp tôi code nhé.

Hôm nay có việc này xin nhờ bạn giúp với:
2 cái textbox ngày đi + ngày về :
nhờ bắt lỗi dùm :
+ nếu ngày nhập vào lớn hơn ngày hiện tại
+ nếu ngày về lớn hơn ngày đi
ra thông báo lỗi và con trỏ vẫn nằm tại texbox.

Loay hoay cả ngày Chủ nhật mà làm không được.

Cám ơn bạn rất nhiều.
Ngày về đương nhiên phải lớn hơn ngày đi rồi. Vậy thông báo lỗi gì nữa Bạn
Mà 2 Textbox trong Form đang kiểu như này Format(Me.Ngaydi, "dd/mm/yyyy"), Format(Me.Ngaydi, "dd/mm/yyyy") thì là tì mì ... Vì Textbox nó là Text mờ
 
Upvote 0
Em tìm trên diễn đàn được đoạn code ở dưới. Nhưng nếu dữ liệu Table nằm ở 2 sheets thì ko sử dụng được. Em sử lại code nhưng bị báo lỗi mong được các bác hướng dẫn viết lại.
em xin cảm ơn.

Function FindTwoCondition(Table As Range, Val1 As Variant, _
Val2 As Variant, Val2Col As Integer, ResultCol As Integer, Optional Val1Occrnce As Integer = 1)
'Tabel Là Bang Du Lieu '
'Val1 Dièu Kien Tìm Thú Nhát '
'Val2 Dièu Kien Thú Hai '
'Val2Col Chi Só Cot Cua Dièu Kien Thú 2 '
'ResultCol Chi Só Cua Cot Càn Dò Tìm '
'Val1Occrnce Giá Tri Thú N Cua Dièu Kien Trong Cot '

Dim i As Integer, iCount As Integer
Dim rCol As Range

For i = 1 To Table.Rows.Count
If Table.Cells(i, 1) = Val1 And Table.Cells(i, Val2Col) = Val2 Then
iCount = iCount + 1
End If
If iCount = Val1Occrnce Then
FindTwoCondition = Table.Cells(i, ResultCol)
Exit For
End If
Next i
End Function



Function FindTwoCondition(DK1 As Variant, VUNGDK1 As Range, DK1 As Variant, VUNGDK2 As Range, VUNGKQ As Range)
'DK1 Dièu Kien Tìm Thú Nhát
'VUNGDK1 Dièu Kien Tìm Thú Nhát
'DK2 Dièu Kien Thú Hai
'VUNGDK2 Dièu Kien Thú Hai
'VUNGKQ Vung ket qua
Dim i As Integer, iCount As Integer
iCount = VUNGDK1.Rows.Count
For i = 1 To iCount
If VUNGDK1.Cells(i, 1) = Val1 And VUNGDK2.Cells(i, 1) = Val2 Then
FindTwoCondition = VUNGKQ.Cells(i, 1)
End If
Exit For
Next i
End Function
 
Upvote 0
Em tìm trên diễn đàn được đoạn code ở dưới. Nhưng nếu dữ liệu Table nằm ở 2 sheets thì ko sử dụng được. Em sử lại code nhưng bị báo lỗi mong được các bác hướng dẫn viết lại.
em xin cảm ơn.

Function FindTwoCondition(Table As Range, Val1 As Variant, _
Val2 As Variant, Val2Col As Integer, ResultCol As Integer, Optional Val1Occrnce As Integer = 1)
'Tabel Là Bang Du Lieu '
'Val1 Dièu Kien Tìm Thú Nhát '
'Val2 Dièu Kien Thú Hai '
'Val2Col Chi Só Cot Cua Dièu Kien Thú 2 '
'ResultCol Chi Só Cua Cot Càn Dò Tìm '
'Val1Occrnce Giá Tri Thú N Cua Dièu Kien Trong Cot '

Dim i As Integer, iCount As Integer
Dim rCol As Range

For i = 1 To Table.Rows.Count
If Table.Cells(i, 1) = Val1 And Table.Cells(i, Val2Col) = Val2 Then
iCount = iCount + 1
End If
If iCount = Val1Occrnce Then
FindTwoCondition = Table.Cells(i, ResultCol)
Exit For
End If
Next i
End Function



Function FindTwoCondition(DK1 As Variant, VUNGDK1 As Range, DK1 As Variant, VUNGDK2 As Range, VUNGKQ As Range)
'DK1 Dièu Kien Tìm Thú Nhát
'VUNGDK1 Dièu Kien Tìm Thú Nhát
'DK2 Dièu Kien Thú Hai
'VUNGDK2 Dièu Kien Thú Hai
'VUNGKQ Vung ket qua
Dim i As Integer, iCount As Integer
iCount = VUNGDK1.Rows.Count
For i = 1 To iCount
If VUNGDK1.Cells(i, 1) = Val1 And VUNGDK2.Cells(i, 1) = Val2 Then
FindTwoCondition = VUNGKQ.Cells(i, 1)
End If
Exit For
Next i
End Function
Sao mà hỏi nhiều lần vậy. Cái này người ta gọi là "Phạm quy" đấy
Bạn đưa cái hàm đó nên mà không nói công dụng của nó thì có tời mới hiểu. Vì vậy mà 2 đến 3 bài trước của Bạn không ai trả lời :p:p:p
 
Upvote 0
Sao mà hỏi nhiều lần vậy. Cái này người ta gọi là "Phạm quy" đấy
Bạn đưa cái hàm đó nên mà không nói công dụng của nó thì có tời mới hiểu. Vì vậy mà 2 đến 3 bài trước của Bạn không ai trả lời :p:p:p
Dạ em xin rút kinh nghiệm
Code đó là code tìm kiếm với 2 Điều kiện ạ
BÁC giúp em viết lại được ko ạ.
Thank bác
 
Upvote 0
Ngày về đương nhiên phải lớn hơn ngày đi rồi. Vậy thông báo lỗi gì nữa Bạn
Mà 2 Textbox trong Form đang kiểu như này Format(Me.Ngaydi, "dd/mm/yyyy"), Format(Me.Ngaydi, "dd/mm/yyyy") thì là tì mì ... Vì Textbox nó là Text mờ

Xin lỗi, xin lỗi

bị sót cái code ngày về

và viết bị nhầm
+ nếu ngày nhập vào lớn hơn ngày hiện tại -- ra thông báo
+ nếu ngày về nhỏ hơn ngày đi --- ra thông báo

thông cảm bỏ qua và giúp dùm nhé. TKS
 
Upvote 0
Xin lỗi, xin lỗi

bị sót cái code ngày về

và viết bị nhầm
+ nếu ngày nhập vào lớn hơn ngày hiện tại -- ra thông báo
+ nếu ngày về nhỏ hơn ngày đi --- ra thông báo

thông cảm bỏ qua và giúp dùm nhé. TKS
Bạn xem thử
 

File đính kèm

  • PCT.xlsm
    194.9 KB · Đọc: 10
Upvote 0
Rất hữu lý.
Hình đại diện nên cơ róp hết, chỉ còn khuôn mặt thôi, không thể xác định nam nữ mới là đúng mốt.
Tôi cứ thấy "Khà khà khà" là tôi cho là nam. Sau đó thấy "hihi ^o^" thì là nữ hoặc quên đang diễn vai gì.
 
Upvote 0
Nhờ anh ndu96081631 xem giúp
trong bài toán trích lọc danh sách duy nhất và tổng hợp dữ liệu với 2 điều kiện
1. trùng part code
2. trùng Delivery date
thì tổng hợp dữ liệu số lượng (Qty) từ sheet Po sang sheet linkpo như file đính kèm

nhưng trong code hiện tại chưa đáp ứng được điều kiện thứ 2
vì khi xóa dữ liệu ngày ở sheet linkpo từ ô G9 trở đi thì vẫn ra kết quả bình thường
Vậy nhờ anh chị GPE xem sửa giúp code để thỏa mãn cả điều kiện thứ 2

Sub linkpo()

On Error GoTo 1:
Dim Rng(), Arr(), Dic As Object, t, lCal
Dim c As Long, i As Long, K As Long, D As Long, Tem As String
Application.ScreenUpdating = False
lCal = Application.Calculation: Application.Calculation = xlCalculationManual
t = Timer
Const nCol = 1000
Set Dic = CreateObject("Scripting.Dictionary")


With Sheets("linkpo")

K = .[B15000].End(xlUp).Row:
If K > 2 Then .[A10].Resize(K - 2, nCol).ClearContents
D = .[F9].Value
End With

With Sheets("po"): Rng = .Range(.[B5], .[B15000].End(xlUp)).Resize(, 11).Value: End With
ReDim Arr(1 To UBound(Rng, 1), 1 To nCol)
K = 0
For i = 1 To UBound(Rng, 1)
If Rng(i, 10) <> "" Then
c = Rng(i, 10) - D + 6
Tem = Rng(i, 1)
If Dic.Exists(Tem) Then
Arr(Dic.Item(Rng(i, 1)), c) = Arr(Dic.Item(Rng(i, 1)), c) + Rng(i, 11)
Else

K = K + 1: Dic.Add (Tem), K
Arr(K, 1) = K: Arr(K, 3) = Tem: Arr(K, c) = Rng(i, 11)
Arr(K, 4) = Rng(i, 2)

End If
End If


Next i


Set Dic = Nothing
Sheets("linkpo").[A10].Resize(K, nCol).Value = Arr

With Sheets("linkpo")

Range("B10").Select
ActiveCell.FormulaR1C1 = "=vlookupD(RC[1],'Master list'!R2C2:R50C3,2,3,1)"
Range("B10").Select
Selection.AutoFill Destination:=Range("B10:B48")
Range("E10").Select
ActiveCell.FormulaR1C1 = "=vlookupD(RC[-2],'Master list'!R2C3:R50C5,3,2,1)"
Range("E10").Select
Selection.AutoFill Destination:=Range("E10:E48")
Range("B10").Select

End With



1: Application.ScreenUpdating = True: Application.Calculation = lCal




End Sub
 

File đính kèm

  • PO&KHXH các khách hàng v2.xlsm
    1.3 MB · Đọc: 6
Upvote 0
Tôi cứ thấy "Khà khà khà" là tôi cho là nam. Sau đó thấy "hihi ^o^" thì là nữ hoặc quên đang diễn vai gì.
Cảm ơn anh nhiều nhá! Giờ em mới biết nguyên tắc xác định giới tính, còn những kinh nghiệm về dùng vba hay gì gì đó anh chia sẻ đi, rất là ưng cái bụng.
 
Upvote 0
e mới tìm hiểu về vba excell, có đoạn code in theo trang cho từng trường hợp, vd.
Sub INKHDATO()
If Sheets("CM").Range("B1") = "Brian" Then

' your code to print sheets in case of brian
Else
Sheets("CM").PrintOut From:=1, To:=3, Copies:=2, Collate _
:=True, IgnorePrintAreas:=False
Sheets("CM").PrintOut From:=4, To:=4, Copies:=1, Collate _
:=True, IgnorePrintAreas:=False
Sheets("CM").PrintOut From:=5, To:=5, Copies:=2, Collate _
:=True, IgnorePrintAreas:=False
Sheets("CM").PrintOut From:=7, To:=8, Copies:=2, Collate _
:=True, IgnorePrintAreas:=False
Sheets("CM").PrintOut From:=10, To:=11, Copies:=2, Collate _
:=True, IgnorePrintAreas:=False
Sheets("CM").PrintOut From:=12, To:=12, Copies:=2, Collate _
:=True, IgnorePrintAreas:=False
Sheets("CM").PrintOut From:=13, To:=13, Copies:=2, Collate _
:=True, IgnorePrintAreas:=False
End If
End Sub
có pro nào có cách nào gọn hơn, nhanh hơn không ạ, e cảm ơn hj
 
Upvote 0
Hi các bác,

Em lấy được một đoạn code để tự động save các file đính kèm từ outlook về folder trên máy, nhưng không hiểu vì sao khi chạy thì báo lỗi system error &H8004010F (-2147221233). Các bác xem giúp em với ạ.
Sub sumit()

readMails

End Sub


Function readMails()
Dim olApp As Outlook.Application
Dim olNamespace As Outlook.Namespace

Dim olItem As Outlook.MailItem
Dim i As Integer
Dim b As Integer
Dim olInbox As Outlook.MAPIFolder
Dim olFolder As Outlook.MAPIFolder
Dim lngCol As Long
Dim oMsg As Outlook.MailItem
Dim SubfolderWB As Workbook
Dim keyword
Dim Path
Dim Count
Dim Atmt
Dim f_random
Dim Filename

Set olApp = New Outlook.Application
Set olNamespace = olApp.GetNamespace("MAPI")

Set SubfolderWB = ActiveWorkbook

Set olInbox = olNamespace.GetDefaultFolder(Outlook.olFolderInbox).Folders(Range("j1").Text)
Dim oItems As Outlook.Items
Set oItems = olInbox.Items
SubfolderWB.Sheets("Subfolder").Range("A:E").Clear
SubfolderWB.Sheets("Subfolder").Range("A1,B1,c1,d1,E1").Interior.ColorIndex = 46
Path = SubfolderWB.Sheets("Subfolder").Range("J5").Value
keyword = SubfolderWB.Sheets("Subfolder").Range("J3").Value
SubfolderWB.Sheets("Subfolder").Range("A1").Value = "Number"
SubfolderWB.Sheets("Subfolder").Range("B1").Value = "Subject"
SubfolderWB.Sheets("Subfolder").Range("C1").Value = "Sender"
SubfolderWB.Sheets("Subfolder").Range("D1").Value = "ReceivedTime"
SubfolderWB.Sheets("Subfolder").Range("A1,B1,c1,d1,e1").Borders.Value = 1
Count = 2
For i = 1 To oItems.Count
If TypeName(oItems.Item(i)) = "MailItem" Then
Set oMsg = oItems.Item(i)

If InStr(1, oMsg.Subject, keyword, vbTextCompare) > 0 And oMsg.ReceivedTime > Now - Range("j7").Value Then

SubfolderWB.Sheets("Subfolder").Range("A" & Count).Value = Count - 1
SubfolderWB.Sheets("Subfolder").Range("B" & Count).Value = oMsg.Subject
SubfolderWB.Sheets("Subfolder").Range("c" & Count).Value = oMsg.SenderName
SubfolderWB.Sheets("Subfolder").Range("D" & Count).Value = oMsg.ReceivedTime

For Each Atmt In oMsg.Attachments
f_random = Replace(Replace(Replace(oMsg.ReceivedTime, " ", ""), "/", ""), ":", "") & "_"
Filename = Path & f_random & Atmt.Filename

Atmt.SaveAsFile Filename
'FnWait (1)

' i = i + 1
Next Atmt
Count = Count + 1
End If
End If


Next

End Function
 
Upvote 0
Hi mọi người, mình có 1 file gởi email bảng lương, trong lúc làm thì phát sinh lỗi ở phần xuất ra file Excel. mình đính kèm file, mọi người xem giúp mình với ^_^
 

File đính kèm

  • Payroll.xlsm
    278.3 KB · Đọc: 11
Upvote 0
Xin chào các anh/chị/em, e đang có một số thắc mắc về Function trong VBA, xin nhờ các tiền bối chỉ giáo giúp em:
+ Hàm trong excel được viết bằng ngôn ngữ gì? Có cách nào mình xem được code của các hàm đó không ạ.
+ Khi viết Function trong VBA, có cách nào để khi sử dụng Function này ngoài bảng tính excel thì khi gõ tên hàm sẽ hiện lên các gợi ý về tham số của hàm như hàm Excel không ạ.
Em xin cảm ơn.
 
Upvote 0
Ngôn ngữ gì thì không biết, nhưng sẽ không x em được code bởi nó đã được dịch thành mã máy.
hàm sẽ hiện lên các gợi ý về tham số của hàm như hàm Excel không ạ.
Cái này hình như làm được, nhưng phức tạp thì phải.
Bài đã được tự động gộp:

Ngôn ngữ gì thì không biết, nhưng sẽ không x em được code bởi nó đã được dịch thành mã máy.
hàm sẽ hiện lên các gợi ý về tham số của hàm như hàm Excel không ạ.
Cái này hình như làm được, nhưng phức tạp thì phải.
 
Upvote 0
Xin chào các anh/chị/em, e đang có một số thắc mắc về Function trong VBA, xin nhờ các tiền bối chỉ giáo giúp em:
+ Hàm trong excel được viết bằng ngôn ngữ gì? Có cách nào mình xem được code của các hàm đó không ạ.
...
Mắc mớ gì chào anh/chị/em mà nhờ thì lại "tiền bối", chỉ giáo với chỉ gươm.
Hầu hết các phần mềm của MS Office 2003, nhất là Excel, được viết bằng C++. Nhưng về sau này, MS có khuynh hướng dùng Víual Studio và rèactor code lại cho hiệu quả. (Cho đến giờ phút này, C++ vẫn còn đứng đầu về tốc độ.)
Microsoft không có lệ cho xem mã. Và họ có cầu chứng cho nên dẫu có dùng cách mò ngược (reverse enginneering) thì cũng là phạm pháp. Tuy nhiên, nếu chỉ muốn xem đại khái cách thực hiện hàm thì có thể xem tạm mã nguồn mở, ví dụ LibreOffice.
 
Upvote 0
Mắc mớ gì chào anh/chị/em mà nhờ thì lại "tiền bối", chỉ giáo với chỉ gươm.
Hầu hết các phần mềm của MS Office 2003, nhất là Excel, được viết bằng C++. Nhưng về sau này, MS có khuynh hướng dùng Víual Studio và rèactor code lại cho hiệu quả. (Cho đến giờ phút này, C++ vẫn còn đứng đầu về tốc độ.)
Microsoft không có lệ cho xem mã. Và họ có cầu chứng cho nên dẫu có dùng cách mò ngược (reverse enginneering) thì cũng là phạm pháp. Tuy nhiên, nếu chỉ muốn xem đại khái cách thực hiện hàm thì có thể xem tạm mã nguồn mở, ví dụ LibreOffice.
:D dạ, em cảm ơn ạ. VietMini cho em hỏi luôn vấn đề này với ạ, em muốn tự viết 1 Function để tính Tổng theo điều kiện (có thêm 1 vài tham số nữa nên k chỉ đơn thuần gọi sumif trong excel được), em đg vướng chỗ xử lý điều kiện người dùng nhập vào như <=/>=/</> ... 1 số . Viết bằng cách gọi hàm Sumif phối hợp để xử lý thì em viết được rồi. Nhưng Em đang thắc mắc về cách để mình tự xử lý những điều kiện này. Nhờ a giúp đỡ :)
Bài đã được tự động gộp:

Cái này hình như làm được, nhưng phức tạp thì phải.[/QUOTE]

Dạ em cảm ơn TruongVu317 ạ. Nếu làm được thì tốt a nhỉ, chứ k thì chỉ có mình viết mình mới biết cần tham số gì, số lượng tham số trong hàm, đưa cho người khác thì phải hướng dẫn cách dùng cụ thể.
 
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