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
Upvote 0
Mình cũng đã thử như bạn đề nghị rồi, cũng không ra. không viết tại sao code thì không báo lỗi mà số hóa đơn thì không copy qua được . Bạn xem giúp mình đoạn code ở #17
Có xem lướt qua code của bạn, cũng không hiểu rõ ý của bạn muốn thế nào. Tuy nhiên có vài lơi góp ý
1. Nên Set tên sheet vào 1 biến cho thuận tiện khi viết code
2. Khi cần copy 1 ô sang 1 ô khác thì nên dùng cách gọn hơn. Ví dụ: Range("J3").Value = Range("I3").Value, không cần thao tác copy làm gì
3. Bạn dùng On Error ... thì phải hiểu rõ nó mới được

Thân
 
Upvote 0
Thanks bạn nhiều
Mục đích của code là:
Khi lâp hoá đơn xong, khi nhấn nút save thông tin trên hóa đơn sẽ được copy qua sheet BANHANG-TRAHANG để lưu lại,
Ví dụ: Mình đặt ra trường hợp là hóa đơn có 4 mặt hàng thì khi copy qua sheet BANHANG-TRAHANG sẽ được 4 dòng thông tin tương ứng và ở cột số hóa đơn thì 4 dòng đó tương ứng với 1 số hóa đơn
 
Upvote 0
Thanks bạn nhiều
Mục đích của code là:
Khi lâp hoá đơn xong, khi nhấn nút save thông tin trên hóa đơn sẽ được copy qua sheet BANHANG-TRAHANG để lưu lại,
Ví dụ: Mình đặt ra trường hợp là hóa đơn có 4 mặt hàng thì khi copy qua sheet BANHANG-TRAHANG sẽ được 4 dòng thông tin tương ứng và ở cột số hóa đơn thì 4 dòng đó tương ứng với 1 số hóa đơn

Đọc qua code của bạn, tôi cũng hiểu sơ sơ, chắc là thế này:

Mã:
Private Sub SAVE_Click()Dim i, j As Long
i = Sheets("BANHANG-TRAHANG").Range("B65000").End(xlUp)(2).Row
Application.ScreenUpdating = False
' Copy ?? gi? l?i s? hóa ??n khi in
Range("I3").Select
    Selection.Copy
Range("J3").Select
    Selection.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
' Copy ?? l?u qua sheet (Ban hang - Tra hang)
On Error Resume Next
If [C22].End(xlUp).Row > 11 Then
    Range("C12:J" & [C22].End(xlUp).Row).Copy: _
    Sheets("BANHANG-TRAHANG").Range("E65000").End(xlUp)(2).PasteSpecial Paste:=xlPasteValues
    End If
Application.CutCopyMode = False
' Copy ?? gi? l?i s? hóa ??n qua sheet (Ban hang - Tra hang)
j = Sheets("BANHANG-TRAHANG").Range("E65000").End(xlUp)(1).Row
Range("I3").Select
    Selection.Copy
    Sheets("BANHANG-TRAHANG").Range(Sheets("BANHANG-TRAHANG").Cells(i, 2), Sheets("BANHANG-TRAHANG").Cells(j, 2)).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub

Code vẫn có thể sửa gọn nữa nhưng tôi chỉ tạm sửa đôi chút cho gọn thôi.
 
Upvote 0
Đọc qua code của bạn, tôi cũng hiểu sơ sơ, chắc là thế này:

Mã:
Private Sub SAVE_Click()Dim i, j As Long
i = Sheets("BANHANG-TRAHANG").Range("B65000").End(xlUp)(2).Row
Application.ScreenUpdating = False
' Copy ?? gi? l?i s? hóa ??n khi in
Range("I3").Select
    Selection.Copy
Range("J3").Select
    Selection.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
' Copy ?? l?u qua sheet (Ban hang - Tra hang)
On Error Resume Next
If [C22].End(xlUp).Row > 11 Then
    Range("C12:J" & [C22].End(xlUp).Row).Copy: _
    Sheets("BANHANG-TRAHANG").Range("E65000").End(xlUp)(2).PasteSpecial Paste:=xlPasteValues
    End If
Application.CutCopyMode = False
' Copy ?? gi? l?i s? hóa ??n qua sheet (Ban hang - Tra hang)
j = Sheets("BANHANG-TRAHANG").Range("E65000").End(xlUp)(1).Row
Range("I3").Select
    Selection.Copy
    Sheets("BANHANG-TRAHANG").Range(Sheets("BANHANG-TRAHANG").Cells(i, 2), Sheets("BANHANG-TRAHANG").Cells(j, 2)).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub

Code vẫn có thể sửa gọn nữa nhưng tôi chỉ tạm sửa đôi chút cho gọn thôi.

Thanks bạn nhìu, đúng cái mình cần rồi.
Mình cũng mới tập viết code thôi, nên còn nhiều cái phải học. code cũ của mình không chạy số hóa đơn là do đâu vậy bạn.
Có phải là cách để biến i và biến j ??????????
Dù sao cũng thanks bạn.
 
Upvote 0
Khuyến mãi bạn thêm code này
PHP:
Sub SAVE_Click()
Dim i, j, tam(), kq(1 To 100, 1 To 11), n
tam = [C12:J22].Value
For i = 1 To UBound(tam)
   If tam(i, 1) <> "" Then
      j = j + 1
      kq(j, 1) = [I3].Value
      kq(j, 2) = [B7].Value
      For n = 4 To 11
         kq(j, n) = tam(i, n - 3)
      Next
   End If
Next
Sheets("BANHANG-TRAHANG").[B65536].End(3).Offset(1).Resize(j, 11) = kq
End Sub
 
Upvote 0
Thanks bác ndu96081631 chỉ cho em topic này nha .

Mọi người giúp mình sửa lỗi này với nha.
Mình vào sheet Hóa Đơn rồi nhấn Nhập Mới thì nó lỗi hàng loạt, hiện hàng loạt các số 0 trên Sheet.

Ban đấu mình viết code cho sheet Hóa Đơn là

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, [H11:H29]) Is Nothing Then
Target.Offset(, 1).Value = Target.Offset(, -1).Value * Target.Value
[I30].Value = Evaluate("=sum(I11:I29)")
[I33].Value = [I30].Value - [I31].Value - [I32].Value
End If


If Not Intersect(Target, [I31:I32]) Is Nothing Then
[I30].Value = Evaluate("=sum(I11:I29)")
[I33].Value = [I30].Value - [I31].Value - [I32].Value
End If
End Sub

Khi viết code như trên thì ấn Nhập Mới không có lỗi , nhưng khi mình viết thêm đoạn code( màu xanh) thì lại phát sinh lỗi trên. Mọi người giúp mình với

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, [H11:H29]) Is Nothing Then
Target.Offset(, 1).Value = Target.Offset(, -1).Value * Target.Value
[I30].Value = Evaluate("=sum(I11:I29)")
[I33].Value = [I30].Value - [I31].Value - [I32].Value
End If
If Not Intersect(Target, [G11:G29]) Is Nothing Then
Target.Offset(, 2).Value = Target.Offset(, 1).Value * Target.Value
[I30].Value = Evaluate("=sum(I11:I29)")
[I33].Value = [I30].Value - [I31].Value - [I32].Value
End If
If Not Intersect(Target, [I31:I32]) Is Nothing Then
[I30].Value = Evaluate("=sum(I11:I29)")
[I33].Value = [I30].Value - [I31].Value - [I32].Value
End If
End Sub
 

File đính kèm

  • VượngGoc1.7z
    42.2 KB · Đọc: 12
Upvote 0
Mình sưu tầm được đoạn code này để tạo một cái đồng hồ trong Cell:
Mã:
Private Check As Boolean
Private Sub CommandButton1_Click()
  Check = (CommandButton1.Caption = "Start")
  CommandButton1.Caption = Choose(1 - Check, "Start", "Stop")
  Do While Check
    Range("B12").Value = Format(Now, "hh:mm:ss")
    DoEvents
  Loop
End Sub

Hiện code trên viết chung cho một nút CommandButton.
Nhờ các bạn tách giúp mình làm 2 sub dạng này với:
Mã:
Sub StopTime()


End Sub
-----------------
Sub SartTime()


End Sub
 
Upvote 0
nhờ xem và chỉnh code giúp

chào các bạn.


một bạn tốt bụng đã viết cái file excel này giúp mình. Mình test file có một vài lỗi nhưng vì chẳng biết gì về code nên mình đưa lên đây nhờ các bạn chỉnh giúp mình nhé.

Xin cảm ơn !
 

File đính kèm

  • 18091111.rar
    429.6 KB · Đọc: 75
Upvote 0
Em có cái file với vài dòng code vụn vặt. Ấy thế mà bị lỗi mà không hiểu nguyên nhân gì.
Nhờ cả nhà chỉ giúp

View attachment 112830


Ngoài ra xem cho em cái Validation như em đã nói trong file

Xin cảm ơn

File gửi kèm: https://dl.dropboxusercontent.com/s...AEHE04k_nSJhJUTKh-jFJ7QG_GKezFF6lpALeS5_b61Fg

Code lỗi tại dòng: PX.Range("H5") = PX.Range("H5").Value + 1
Hiện tại trong file của bạn, cell H5 đang có giá trị =2. Vậy bạn tự gõ bằng tay số 3 vào cell H5 xem là hiểu liền
 
Upvote 0
Code lỗi tại dòng: PX.Range("H5") = PX.Range("H5").Value + 1
Hiện tại trong file của bạn, cell H5 đang có giá trị =2. Vậy bạn tự gõ bằng tay số 3 vào cell H5 xem là hiểu liền

Em đã thử nhiều lần như bác hướng dẫn nhưng thực sự em vẫn chưa hiểu.

Có phải bác nói là do sheet đã bị Protect không ?? TRong code nó đã được UnProtect rồi mà. Kể cả em loại bỏ chức năng Protect thì nó vẫn bị.

Bác giải thích chi tiết giúp em học hỏi nhé
 
Upvote 0
Em đã thử nhiều lần như bác hướng dẫn nhưng thực sự em vẫn chưa hiểu.

Có phải bác nói là do sheet đã bị Protect không ?? TRong code nó đã được UnProtect rồi mà. Kể cả em loại bỏ chức năng Protect thì nó vẫn bị.

Bác giải thích chi tiết giúp em học hỏi nhé
Bạn bỏ Protect ở sự kiện Worksheet_Change là xong.
 
Upvote 0
Em đã thử nhiều lần như bác hướng dẫn nhưng thực sự em vẫn chưa hiểu.

Có phải bác nói là do sheet đã bị Protect không ?? TRong code nó đã được UnProtect rồi mà. Kể cả em loại bỏ chức năng Protect thì nó vẫn bị.

Bác giải thích chi tiết giúp em học hỏi nhé

Mệt thật đó.

Đầu code thêm dòng này
Application.EnableEvents = False
......................
Cuối code thêm dòng này
Application.EnableEvents = True
 
Upvote 0
VBS rõ ràng,

VBA:
Dim a as string
VBS: Dim a

VBA:
For i = 1 to 10
'do something
next i
VBS:
For i = 1 to 10
'do something
next

VBA: range("A1") = "Testing"
VBS: ExcelObj.Workbooks(1).Worksheets(1).Range("A1") = "Testing"
 
Lần chỉnh sửa cuối:
Upvote 0
Khi sử dụng sự kiện Change thì phải luôn chú ý 2 dòng lệnh này, vì mỗi lần có sự thay đổi thì code sự kiện sẽ bị kích hoạt.
Lấy 1 ví dụ đơn giản
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
[A1]= Target / 2
End Sub
Ta nhập vào 1 ô với giá trị là 100 và A1 sẽ bị tác động như sau
Vòng thứ 1 : 50
Vòng thứ 2 : 25
Vòng thứ 3 : 12.5
Vòng thứ 4 : 6.25
Vòng thứ 5 : 3.125
Vòng thứ 6 : 1.5625
Vòng thứ 7 : 0.78125
Vòng thứ 8 : 0.390625
Vòng thứ 9 : 0.1953125
Vòng thứ 10 : 0.09765625
................
Vòng thứ n... và treo máy luôn
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
các anh chị chỉ giúp em cách tạo 1 menu trong excel bằng treeview được không ạ.Em có tham khảo nhìu chỉ dẫn rồi mà vẫn chưa thể làm được.Mong các anh chị giúp đỡ nhiều ạ!!!!!!!!!!!!!!!
 
Upvote 0
Topic Những câu hỏi về code, xin giải thích các code... đã quá dài nên mình đóng nó lại và mở topic khác
Tất cả những bài viết liên quan đến việc nhờ giải thích, xử lý và gỡ rối code VBA, các bạn vui lòng đăng tại đây!
Cảm ơn
Các anh chị ơi, giúp em với ạ.
Em tìm đoạn code sau trên diễn dàn của mình để em có thể group/ungroup 1 protect sheet:
Private Sub Workbook_Open()
With Sheet1
.EnableOutlining = True
.Protect Password:="danh GPE", Contents:=True, UserInterfaceOnly:=True
End With
End Sub

Em viết và group đc protected sheet.
Nhưng có 1 vấn đề này sinh là trước khi viết code này vào em vẫn hide và unhide đc dữ liệu em đã khóa, sau khi viết code vào em group đc thì lại chức măng hide/unhide dữ liệu bị mất đi.
Các anh chị có thể cho viết lại cho em đoạn code khác được ko ạ.
Em chỉ muốn khóa dữ liệu 1 cột trong bảng và mình vẫn hide/unhide, group/ungroup được như bình thường ạ.
Em cám ơn anh chị nhiều ạ.
 
Upvote 0
Status
Không mở trả lời sau này.
Web KT
Back
Top Bottom