Chuyên mục xử lý, gỡ rối code VBA (1 người xem)

Liên hệ QC

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

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,957
Em có hàm như bên dưới, bây giờ em muốn them điều kiện dựa vào Bô phận sản xuất để xác định ngày nghỉ theo từng bộ phận sản xuất.
VD: Bộ phận sản xuất: thì có Ngày công chuẩn sản xuất - Ngày thực tế,
Bộ phận Văn phòng: thì có Ngày công chuẩn Văn phòng - Ngày thực tế,
..........
[NOTE1]Function Thuong(Byval NgayCongThucTe As Single, ByVal DK_Xet As String, Byval MucThuong As Double) Dim NgayNghi As Double
NgayNghi = NgayCongChuan - NgayCongThucTe
' Xac dinh ngay cong chuan dua vao Bo phan san xuat
If NgayNghi >= 14 Then
Thuong = 0
ElseIf NgayCongThucTe <= 20 Then
Select Case DK_Xet
Case Is = "OK"
Thuong = MucThuong
Case Else
Thuong = 0
End Select
ElseIf NgayCongThucTe >= 21 Then
Thuong = MucThuong
Else
Thuong = 0
End If
End Function


[/NOTE1]

Trân trọng cảm ơn
http://www.mediafire.com/download/neu2y77g52gyh0d/Thuong.xlsm
Rât mong được giúp đỡ
 
Upvote 0
Mình có file excel có code VBA. Khi sử dụng chức năng Share Workbook qua mạng Lan để nhiều người sử dụng thì có thông báo "This workbook contains macro recorded or written in Visual Basic. Macro cannot be viewed or edited in shared workbooks". Các máy khác sử dụng file excel thì không sử dụng được các hàm VBA, hic hic !$@!!
Bạn làm ơn hướng dẫn cho mình cách khắc phục với
 
Lần chỉnh sửa cuối:
Upvote 0
Em có file gửi lương qua mail,lấy theo mẫu cảu bác Hai Lúa Miền Tây và sửa theo ý nhưng khi gửi mail thì có 1 số lỗi cần nhờ các Bác giúp ạ
1- 1- mail gửi file bảng lương em chỉ muốn gửi từ cột A1: E31 thôi vì hiện tại em thấy gửi cả cột G có chứa mã NV nếu thay đổi số mã NV sẽ ra bảng lương của NV khác
2- file chỉ lên dữ liệu thôi không lên công thức trong ô ạ
Xin anh Hai Lúa Miền Tây và các anh chị giúp em 2 vấn đề trên ạ
Em cảm ơn nhiều
Sub SendMail()
Dim OutlookApp As Object, MailItem As Object, i As Integer
Dim FileName As String, WB As Workbook
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For i = 1 To Application.WorksheetFunction.CountA(Sheet1.[A14:A1000]) - 2
Sheet2.[G2] = i
If UCase(Sheet2.[J4]) = "YES" Then
With Sheets("pay slip")
.[A1:E31].CopyPicture
.Copy
End With
Set WB = ActiveWorkbook
FileName = "BangLuong"
On Error Resume Next
Kill "E:" & FileName
WB.SaveAs FileName:="E:" & FileName
Set OutlookApp = CreateObject("Outlook.Application")
Set MailItem = OutlookApp.CreateItem(0)
With MailItem
.To = Sheet2.[G4]
.Subject = "Bang luong cua: " & Sheet2.[C3]
.Attachments.Add WB.FullName
.HTMLBody = "<B>Xin chao: " & Sheet2.[C3] & "</B>" & _
"<BR><BR>Xin vui long kiem tra lai chi tiet bang luong nhu ben duoi: <BR>" & _
"<BR><BR><BR><BR>Neu co thac mac gi xin phan hoi som" & _
"<BR><B>Xin cam on,</B><BR>" & _
"<BR><B>Lê Thi Hà </B>"
.Display
End With
SendKeys "({DOWN})", True
SendKeys "({DOWN})", True
SendKeys "({DOWN})", True
SendKeys "({DOWN})", True
SendKeys "({DOWN})", True
SendKeys "^({v})", True
WB.ChangeFileAccess Mode:=xlReadOnly
Kill WB.FullName
WB.Close SaveChanges:=False
End If
Next
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Set OutlookApp = Nothing
Set MailItem = Nothing
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Mình đang tập tành code vba, đang làm 1 cái form để nhập thông tin mà bị tắt ở chỗ Find next, rất mong được mọi người chỉ giáo.
Mình có 1 file danh sách khách hàng như sau:
1.jpg
Form nhập thông tin của mình như sau:
2.jpg
Khi nhập Danh Bo và tìm trong Danh sách khách hàng sẽ có Danh Bộ bị trùng lặp và mình muốn khi nhấn Next thì các ô Ten KH, Dia chi, Duong sẽ hiện thông tin của khách hàng có danh bộ trùng kế tiếp, nếu danh bộ trùng nhiều lần thì cứ nhấn Next tới.


Mình có đính kèm file excel.

Xin cám ơn và mong nhận được sự giúp đỡ :)
 

File đính kèm

Upvote 0
Em có dùng công thức sau đây nhảy đến dòng cuối cùng có chứa dữ liệu nhưng sao bấm toàn nhảy ra ô cuối cùng của bảng tính luôn chứ không phải ô chứa dữ liệu cuối cùng, và báo lỗi

Mã:
Private Sub CommandButton1_Click()
'Range("A2").Value = txtHo.Text
'Range("B2").Value = txtTen.Text
'Range("C2").Value = txtDt.Value
Range("A2").Select
ActiveCell.End(xlDown).Select
lastrow = ActiveCell.Row
Cells(lastrow + 1, 1).Value = txtHo.Text
Cells(lastrow + 1, 2).Value = txtTen.Text
Cells(lastrow + 1, 3).Value = txtDt.Text
Range("A2").Select
txtHo.Text = ""
txtTen.Text = ""
txtDt.Text = ""
End Sub
 
Upvote 0
Trong Code của bạn có đoạn
Mã:
Range("A2").Select
ActiveCell.End(xlDown).Select

Cái này tương ứng với việc bạn đặt chuột tại A2 và bấm Ctrl + Mũi tên xuống.

Nếu A2:A65536 không có dữ liệu hoặc điền đầy dữ liệu nó sẽ chuyển tới dòng cuối cùng.

Bạn có thể tìm các giải pháp thay thế khác cho phù hợp ví dụ như nếu A2:A65536 rỗng, A1 có giá trị
Mã:
Range("A65536").End(xlUp).Offset(1,0)Select
 
Upvote 0
Mọi người ơi cho mình hỏi có cách nào edit được chức năng của nút button trong hộp thông báo lỗi của Validation không ạ

Đây là code của mình, mình muốn dữ liệu khi nhập không khớp sẽ thông báo lên, nếu chọn Yes sẽ điền giống với sheet1 còn No sẽ đi tới ô đó

Cảm ơn mọi người ạ

Sub test()

Dim i, i1, lr, lc As Long
Dim a As String
a = Sheets(1).Name & "!"


lr = Sheets(1).UsedRange.Rows(Sheets(1).UsedRange.Rows.Count).Row
lc = Sheets(1).UsedRange.Columns(Sheets(1).UsedRange.Columns.Count).Column


For i1 = 1 To lc
For i = 1 To lr

With Sheets(2).Cells(i, i1).Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=" & a & Sheets(1).Cells(i, i1).Address
.IgnoreBlank = True
.InCellDropdown = False
.InputTitle = ""
.ErrorTitle = "NOT MATCH !! Please check "
.InputMessage = ""
.ErrorMessage = " The value in Sheet1 is " & Sheets(1).Cells(i, i1)
.ShowInput = True
.ShowError = True
End With
Next i

Next i1




End Sub

aaaa.jpg
 
Upvote 0
Em chào anh
Anh cho em hỏi chút với
Em muốn xin một đoạn code để chuyển từ file excel này sang file excel khác
Anh có thể cho em xin đoạn code được ko a.
Em cảm ơn anh nhìu
 
Upvote 0
Sub locdi()
Application.ScreenUpdating = False
Sheets("Data_di").[B4:M10000].AdvancedFilter 2, [B2:E3], [B5:L5]
Range("B6:M200").HorizontalAlignment = xlCenter
Range("D6:E200").WrapText = True
Range("B3").Select

XIN HỎI!
THAU CÂU LỆNH:
Sheets("Data_di").[B4:M10000].AdvancedFilter 2, [B2:E3], [B5:L5]

BẰNG CÂU LỆNH KHÁC CHO ĐỞ NẶNG FILE
XIN CẢM ƠN!
 
Upvote 0
May ban giup gium minh code nay le Sub COUNTIFLAM()
Dim date1 As Date
date1 = "31 / 1 / 2016"
Dim totaldate As Long
SONGAY = Application.WorksheetFunction.CountIf(Range("A1:A11"), "<" & date1)
MsgBox totaldate


End Sub
[TABLE="class: cms_table, width: 75"]
[TR]
[TD="align: right"]my excell A1:a11
01/01/2016[/TD]
[/TR]
[TR]
[TD="align: right"]02/01/2016[/TD]
[/TR]
[TR]
[TD="align: right"]05/01/2016[/TD]
[/TR]
[TR]
[TD="align: right"]05/01/2016[/TD]
[/TR]
[TR]
[TD="align: right"]05/01/2016[/TD]
[/TR]
[TR]
[TD="align: right"]05/01/2016[/TD]
[/TR]
[TR]
[TD="align: right"]05/01/2016[/TD]
[/TR]
[TR]
[TD="align: right"]05/01/2016[/TD]
[/TR]
[TR]
[TD="align: right"]05/01/2016[/TD]
[/TR]
[/TABLE]


le ra msgbox la 9 nhung no toan hien la 0 mong cac ban giup
Bạn xem lại nội quy.............
NoiQuy.jpg
 
Upvote 0
mong các anh chị giúp em tăng tốc code với . code của em nhiều vòng lặp quá. dữ liệu có 38 dòng thôi mà em chạy code mất cả tiếng đồng hồ.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Mong anh chị giúp em tăng tốc code với . code của em nhiều vòng lặp quá. dữ liệu có 38 dòng thôi mất cả tiếng đồng hồ.
Bạn nên đưa vô mảng để xử lí' Như vậy sẽ cải thiện được tình hình.
 
Upvote 0
Bạn nên đưa vô mảng để xử lí' Như vậy sẽ cải thiện được tình hình.

em chưa biết cách đưa vào mảng. Mong anh chỉ giúp}}}}}}}}}}}}}}}



Private Sub CommandButton2_Click()
Dim rc As Long, m As Integer, i As Integer, Rn As Integer, k As Integer, n As Integer, t As Integer
Dim rc1 As Integer, ii As Integer, ik As Integer, boiso1 As Integer, boiso2 As Integer, boisoc As Integer, boisot As Integer
Dim mm As Integer, ranget As Range, rangec As Range, Rng As Range
Dim irow As Integer, n1 As Integer, n2 As Integer, n3 As Integer, n4 As Integer
rc = S01.Cells(Cells.Rows.Count, 1).End(xlUp).Row
For n = 1 To 100
For n1 = n + 1 To 100
For n2 = n1 + 1 To 100
For n3 = n2 + 1 To 100
For n4 = n3 + 1 To 100
S01.Range("A1:A1").ClearContents
ii = 0
For i = 2 To rc
S01.Cells(1, 1).Value = S01.Cells(i, n + 1).Value + S01.Cells(i, n1 + 1).Value + S01.Cells(i, n2 + 1).Value + S01.Cells(i, n3 + 1).Value + S01.Cells(i, n4 + 1).Value
If S01.Cells(1, 1).Value > 0 Then
ii = ii + 1
End If
Next i
If ii > 35 Then
S04.Activate
S04.Range("A65536").End(xlUp).Offset(1, 0).Select
irow = ActiveCell.Row
S04.Cells(irow, 1).Value = S01.Cells(1, n + 1).Value
S04.Cells(irow, 2).Value = S01.Cells(1, n1 + 1).Value
S04.Cells(irow, 3).Value = S01.Cells(1, n2 + 1).Value
S04.Cells(irow, 4).Value = S01.Cells(1, n3 + 1).Value
S04.Cells(irow, 5).Value = S01.Cells(1, n4 + 1).Value
End If
Next n4
Next n3
Next n2
Next n1
Next n
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Hiện tại, em bị quay đầu óc rồi, không hiểu sao nữa? Code em làm mà ko thể nào copy (từ sheet này sang sheet kia) lần lượt từng ngày trong cột sau khi lọc theo ngày, theo tài khoản. Giờ nó chỉ có copy được mỗi ngày cuối cùng thôi là sao ah? Mong các Thầy giúp cho ah!?
Với Sheets 5191_KQ em lọc lần lượt theo từng ngày (Cột A) và từng tài khoản (cột B), copy dữ liệu tại cột D (bỏ tiêu đề) paste sang sheets 5191_KQ_1 nhưng lại ko được từng ngày một ah>?
 

File đính kèm

Upvote 0
Chắc là tại gần nửa đêm nên đầu óc nó ko tinh tướng, em làm được rồi ah! Thanks.
Hiện tại, em bị quay đầu óc rồi, không hiểu sao nữa? Code em làm mà ko thể nào copy (từ sheet này sang sheet kia) lần lượt từng ngày trong cột sau khi lọc theo ngày, theo tài khoản. Giờ nó chỉ có copy được mỗi ngày cuối cùng thôi là sao ah? Mong các Thầy giúp cho ah!?
Với Sheets 5191_KQ em lọc lần lượt theo từng ngày (Cột A) và từng tài khoản (cột B), copy dữ liệu tại cột D (bỏ tiêu đề) paste sang sheets 5191_KQ_1 nhưng lại ko được từng ngày một ah>?
 
Upvote 0
Trả về địa chỉ của ô hiện tại thì dùng lệnh này nè bạn.
Mã:
ActiveCell.Address
cảm ơn bạn, mình đã làm thử và nó đã trả về địa chỉ của ô!
cho mình hỏi mình muốn kết quả trả về là hàng bao nhiêu và cột bao nhiêu thì có được không, cảm ơn bạn!
 
Upvote 0
Mình đang có một vấn đề về thủ tục trả về địa chỉ ô hiện tại! Mong mọi người giải quyết giùm mình
. . . . .
Cho mình hỏi mình muốn kết quả trả về là hàng bao nhiêu và cột bao nhiêu thì có được không, cảm ơn bạn!
Mã:
    MsgBox ActiveCell.Row, , ActiveCell.Col
 
Upvote 0
Status
Không mở trả lời sau này.
Web KT

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

Back
Top Bottom