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,946
Em có một thắc mắc tại sao khi chạy code VBA thì ta sẽ không thể Undo lại được nữa?
 
Upvote 0
Mọi người chỉ giúp em với, em muốn paste dữ liệu từ cột clipboard vào useform nhưng không được, mọi người có cách nào không ?
 

File đính kèm

  • 22552606_1855092237851758_1999908251608793798_n.jpg
    22552606_1855092237851758_1999908251608793798_n.jpg
    62.2 KB · Đọc: 5
  • test.xlsm
    17.7 KB · Đọc: 1
Upvote 0
Em có mượn code của thầy Ndu và sửa thành
PHP:
Dim Temp as Object

  Set Temp = CreateObject("VBScript.RegExp")
  Temp.Global = True
  Temp.Pattern = "[^0-9]"

...
dArr(K, 2) = dArr(K, 2) + Temp.Replace(sArr(i, j), "")

Với mục đích tách và tính tổng nhưng kết quả chỉ ra một dãy số là các số được tách là sao ạ?
 
Upvote 0
Nó Default rồi bạn ak. Còn sâu bên trong nữa chắc hỏi ông viết ra cái này :)
Mình hiểu là nó thay hết chữ thành khoảng trống. Vậy như công thức mảng trên thì thay xong ra một con số, sau đó chuyển sang ô tiếp theo lại tách tiếp ra một con số và con số này cộng với con số trước đó. Kì lạ là nó không như cách mình hiểu.
 
Upvote 0
Em học lỏm thêm được như sau

dArr(K, 2) = Evaluate(dArr(K, 2))

Mà chẳng hiểu sao lại cần như vậy :((
 
Upvote 0
Xin các anh chị chỉnh dùm đoạn code sau, mới học, còn yếu lắm, rất cảm ơn. Em thấy nó không được gọn mà em chưa biết dùng for...next trong trường hợp này. Xin anh chị tận tình chỉ giúp.

Private Sub CommandButton1_Click()
Dim TT As Boolean
TT = MsgBox("Hanh dong nay se xoa toan bo du lieu da nhap truoc day. Bam OK de xoa du lieu cu, nhap du lieu moi. Bam CANCEL de tiep tuc dung du lieu truoc day!", vbOKCancel, "CHU Y!")
If TT = True Then
pass = Application.InputBox("Xin nhap password")
If pass = "123" Then
Sheet1.Range("D6:F11").ClearContents
Sheet2.Range("A5:r40").ClearContents
Sheet3.Range("i5:l40").ClearContents
Sheet3.Range("P5:p40").ClearContents
Sheet3.Range("r5:r40").ClearContents
Sheet3.Range("t5:t40").ClearContents
Sheet3.Range("u5:y40").ClearContents
Sheet3.Range("aa5:aa40").ClearContents
Sheet3.Range("ac5:ac40").ClearContents
Sheet3.Range("ae5:ae40").ClearContents
Sheet3.Range("af5:al40").ClearContents
Sheet5.Range("i5:l40").ClearContents
Sheet5.Range("P5:p40").ClearContents
Sheet5.Range("r5:r40").ClearContents
Sheet5.Range("t5:t40").ClearContents
Sheet5.Range("u5:y40").ClearContents
Sheet5.Range("aa5:aa40").ClearContents
Sheet5.Range("ac5:ac40").ClearContents
Sheet5.Range("ae5:ae40").ClearContents
Sheet5.Range("af5:al40").ClearContents
Sheet7.Range("i5:l40").ClearContents
Sheet7.Range("P5:p40").ClearContents
Sheet7.Range("r5:r40").ClearContents
Sheet7.Range("t5:t40").ClearContents
Sheet7.Range("u5:y40").ClearContents
Sheet7.Range("aa5:aa40").ClearContents
Sheet7.Range("ac5:ac40").ClearContents
Sheet7.Range("ae5:ae40").ClearContents
Sheet7.Range("af5:al40").ClearContents
Sheet9.Range("i5:l40").ClearContents
Sheet9.Range("P5:p40").ClearContents
Sheet9.Range("r5:r40").ClearContents
Sheet9.Range("t5:t40").ClearContents
Sheet9.Range("u5:y40").ClearContents
Sheet9.Range("aa5:aa40").ClearContents
Sheet9.Range("ac5:ac40").ClearContents
Sheet9.Range("ae5:ae40").ClearContents
Sheet9.Range("af5:al40").ClearContents
Else
MsgBox ("Sai mat khau!")
End If
End If
End Sub
 
Upvote 0
Xin các anh chị chỉnh dùm đoạn code sau, mới học, còn yếu lắm, rất cảm ơn. Em thấy nó không được gọn mà em chưa biết dùng for...next trong trường hợp này. Xin anh chị tận tình chỉ giúp.

Private Sub CommandButton1_Click()
Dim TT As Boolean
TT = MsgBox("Hanh dong nay se xoa toan bo du lieu da nhap truoc day. Bam OK de xoa du lieu cu, nhap du lieu moi. Bam CANCEL de tiep tuc dung du lieu truoc day!", vbOKCancel, "CHU Y!")
If TT = True Then
pass = Application.InputBox("Xin nhap password")
If pass = "123" Then
Sheet1.Range("D6:F11").ClearContents
Sheet2.Range("A5:r40").ClearContents
Sheet3.Range("i5:l40").ClearContents
Sheet3.Range("P5:p40").ClearContents
Sheet3.Range("r5:r40").ClearContents
Sheet3.Range("t5:t40").ClearContents
Sheet3.Range("u5:y40").ClearContents
Sheet3.Range("aa5:aa40").ClearContents
Sheet3.Range("ac5:ac40").ClearContents
Sheet3.Range("ae5:ae40").ClearContents
Sheet3.Range("af5:al40").ClearContents
Sheet5.Range("i5:l40").ClearContents
Sheet5.Range("P5:p40").ClearContents
Sheet5.Range("r5:r40").ClearContents
Sheet5.Range("t5:t40").ClearContents
Sheet5.Range("u5:y40").ClearContents
Sheet5.Range("aa5:aa40").ClearContents
Sheet5.Range("ac5:ac40").ClearContents
Sheet5.Range("ae5:ae40").ClearContents
Sheet5.Range("af5:al40").ClearContents
Sheet7.Range("i5:l40").ClearContents
Sheet7.Range("P5:p40").ClearContents
Sheet7.Range("r5:r40").ClearContents
Sheet7.Range("t5:t40").ClearContents
Sheet7.Range("u5:y40").ClearContents
Sheet7.Range("aa5:aa40").ClearContents
Sheet7.Range("ac5:ac40").ClearContents
Sheet7.Range("ae5:ae40").ClearContents
Sheet7.Range("af5:al40").ClearContents
Sheet9.Range("i5:l40").ClearContents
Sheet9.Range("P5:p40").ClearContents
Sheet9.Range("r5:r40").ClearContents
Sheet9.Range("t5:t40").ClearContents
Sheet9.Range("u5:y40").ClearContents
Sheet9.Range("aa5:aa40").ClearContents
Sheet9.Range("ac5:ac40").ClearContents
Sheet9.Range("ae5:ae40").ClearContents
Sheet9.Range("af5:al40").ClearContents
Else
MsgBox ("Sai mat khau!")
End If
End If
End Sub
Có lẽ bạn nên up file
 
Upvote 0
Xin các anh chị chỉnh dùm đoạn code sau, mới học, còn yếu lắm, rất cảm ơn. Em thấy nó không được gọn mà em chưa biết dùng for...next trong trường hợp này. Xin anh chị tận tình chỉ giúp.

Private Sub CommandButton1_Click()
Dim TT As Boolean
TT = MsgBox("Hanh dong nay se xoa toan bo du lieu da nhap truoc day. Bam OK de xoa du lieu cu, nhap du lieu moi. Bam CANCEL de tiep tuc dung du lieu truoc day!", vbOKCancel, "CHU Y!")
If TT = True Then
pass = Application.InputBox("Xin nhap password")
If pass = "123" Then
Sheet1.Range("D6:F11").ClearContents
Sheet2.Range("A5:r40").ClearContents
Sheet3.Range("i5:l40").ClearContents
Sheet3.Range("P5:p40").ClearContents
Sheet3.Range("r5:r40").ClearContents
Sheet3.Range("t5:t40").ClearContents
Sheet3.Range("u5:y40").ClearContents
Sheet3.Range("aa5:aa40").ClearContents
Sheet3.Range("ac5:ac40").ClearContents
Sheet3.Range("ae5:ae40").ClearContents
Sheet3.Range("af5:al40").ClearContents
Sheet5.Range("i5:l40").ClearContents
Sheet5.Range("P5:p40").ClearContents
Sheet5.Range("r5:r40").ClearContents
Sheet5.Range("t5:t40").ClearContents
Sheet5.Range("u5:y40").ClearContents
Sheet5.Range("aa5:aa40").ClearContents
Sheet5.Range("ac5:ac40").ClearContents
Sheet5.Range("ae5:ae40").ClearContents
Sheet5.Range("af5:al40").ClearContents
Sheet7.Range("i5:l40").ClearContents
Sheet7.Range("P5:p40").ClearContents
Sheet7.Range("r5:r40").ClearContents
Sheet7.Range("t5:t40").ClearContents
Sheet7.Range("u5:y40").ClearContents
Sheet7.Range("aa5:aa40").ClearContents
Sheet7.Range("ac5:ac40").ClearContents
Sheet7.Range("ae5:ae40").ClearContents
Sheet7.Range("af5:al40").ClearContents
Sheet9.Range("i5:l40").ClearContents
Sheet9.Range("P5:p40").ClearContents
Sheet9.Range("r5:r40").ClearContents
Sheet9.Range("t5:t40").ClearContents
Sheet9.Range("u5:y40").ClearContents
Sheet9.Range("aa5:aa40").ClearContents
Sheet9.Range("ac5:ac40").ClearContents
Sheet9.Range("ae5:ae40").ClearContents
Sheet9.Range("af5:al40").ClearContents
Else
MsgBox ("Sai mat khau!")
End If
End If
End Sub
Bạn thử Code dưới đây xem sao
Mã:
Private Sub CommandButton1_Click()
Dim TT As Boolean, i As Long
TT = MsgBox("Hanh dong nay se xoa toan bo du lieu da nhap truoc day. Bam OK de xoa du lieu cu, nhap du lieu moi. Bam CANCEL de tiep tuc dung du lieu truoc day!", vbOKCancel, "CHU Y!")
If TT = True Then
pass = Application.InputBox("Xin nhap password")
If pass = "123" Then
    Sheet1.Range("D6:F11").ClearContents
    Sheet2.Range("A5:r40").ClearContents
    For i = 3 To 9
        With Sheets(i)
            .Range("i5:l40").ClearContents
            .Range("P5:p40").ClearContents
            .Range("r5:r40").ClearContents
            .Range("t5:t40").ClearContents
            .Range("u5:y40").ClearContents
            .Range("aa5:aa40").ClearContents
            .Range("ac5:ac40").ClearContents
            .Range("ae5:ae40").ClearContents
            .Range("af5:al40").ClearContents
    End With
    Next
Else
    MsgBox ("Sai mat khau!")
End If
End If
End Sub
 
Upvote 0
Bạn đang gọi tới Sheet qua CodeName nên dùng cách sau. ;)
PHP:
Sub ClearRange(ByVal ws As Worksheet)
    With ws
        Union(.Range("P5:P40"), .Range("R5:R40"), .Range("T5:T40"), .Range("U5:Y40"), _
                .Range("AA5:AA40"), .Range("AC5:AC40"), .Range("AE5:AE40"), .Range("AF5:AL40")).ClearContents
    End With
End Sub

Private Sub CommandButton1_Click()
    '....'
    If pass = "123" Then
        Sheet1.Range("D6:F11").ClearContents
        Sheet2.Range("A5:R40").ClearContents
        ClearRange Sheet3
        ClearRange Sheet5
        ClearRange Sheet7
        ClearRange Sheet9
    Else
    '....'
End Sub
 
Upvote 0
Bạn đang gọi tới Sheet qua CodeName nên dùng cách sau. ;)
PHP:
Sub ClearRange(ByVal ws As Worksheet)
    With ws
        Union(.Range("P5:P40"), .Range("R5:R40"), .Range("T5:T40"), .Range("U5:Y40"), _
                .Range("AA5:AA40"), .Range("AC5:AC40"), .Range("AE5:AE40"), .Range("AF5:AL40")).ClearContents
    End With
End Sub

Private Sub CommandButton1_Click()
    '....'
    If pass = "123" Then
        Sheet1.Range("D6:F11").ClearContents
        Sheet2.Range("A5:R40").ClearContents
        ClearRange Sheet3
        ClearRange Sheet5
        ClearRange Sheet7
        ClearRange Sheet9
    Else
    '....'
End Sub

ủa rồi For ... Next nằm ở chỗ nào vậy anh gì ơi ? +-+-+-++-+-+-+
 
Upvote 0
ủa rồi For ... Next nằm ở chỗ nào vậy anh gì ơi ? +-+-+-++-+-+-+
Muốn có For ... Next thì thêm vào thôi -+*/
Mã:
Sub ClearRange(ByVal ws As Worksheet, i)
    With ws
        Union(.Range("P5:P40"), .Range("R5:R40"), .Range("T5:T40"), .Range("U5:Y40"), _
                .Range("AA5:AA40"), .Range("AC5:AC40"), .Range("AE5:AE40"), .Range("AF5:AL40")).ClearContents
    End With
    i = Len("AutoHello")
End Sub

Private Sub CommandButton1_Click()
    '....'
    'If pass = "123" Then
        Sheet1.Range("D6:F11").ClearContents
        Sheet2.Range("A5:R40").ClearContents
        For i = 1 To 9
          ClearRange Sheet3, i
          ClearRange Sheet5, i
          ClearRange Sheet7, i
          ClearRange Sheet9, i
          i = i
        Next i
    'Else
    '....'
End Sub
 
Upvote 0
Chao các anh!
Em có file giải lập bên dưới mục đích cũa em là:
- em cần copy dư liệu bên sheet "Index" vao các sheet "1,2,3,4..." tương ứng các ngày trong tháng VD: ngày mùng 03.10/2017 thì khi nhấn nút " nhap du lieu" thì sẻ chép dử liệu vào sheet("3") ( điều kiện lấy ở Ô "NGAY THANG")
// Sheets("locNT") với locNT=left(NGAYTHANG,..).value đại loại là thế.
THANK MỌI NGƯỜI.
 

File đính kèm

  • TestCopyAutoMacro.xlsm
    34.7 KB · Đọc: 4
Upvote 0
Bạn nên đổi lại tên các trang tính, như N01, N02,. . . N10,. . . .
& tham khảo macro sau:
PHP:
Sub TestCopy_GPE()
 Dim ShName As String
 ShName = "N" & Right("0" & CStr(Day([i1].Value)), 2)
 MsgBox ShName
 Sheets("Index").[K11:P11].Copy Destination:=Sheets(ShName).[D12]
 MsgBox "Chép Thành Công!"
End Sub
 
Upvote 0
Bạn nên đổi lại tên các trang tính, như N01, N02,. . . N10,. . . .
& tham khảo macro sau:
PHP:
Sub TestCopy_GPE()
 Dim ShName As String
 ShName = "N" & Right("0" & CStr(Day([i1].Value)), 2)
 MsgBox ShName
 Sheets("Index").[K11:P11].Copy Destination:=Sheets(ShName).[D12]
 MsgBox "Chép Thành Công!"
End Sub
Cảm ơn bạn Hoang2013 đã chi share, tên sheet mặc định cũa cty mặc định là “1,2,3,4..” theo 30 ngày trong tháng nên mình kg can thiệp vào đc chuyện đó.
 
Upvote 0
Vậy thì 1 trong 2 thứ í bị bệnh nặng lắm rồi: Excel hay Code của bạn!
Nếu là do Excel, thì cài lại;
Nếu là do Code thì nên đưa lên diễn đàn để i bác sỹ hội chẩn cho.

Chúc vui!
Dạ code của em đây ah. Nhờ mọi người xem giùm ah.
Modul loc_du_lieu chạy bình thường ah. Modul tan_suat_hd thì khi chạy là bị reset file excel ah.
 

File đính kèm

  • HD_PCC_17.xlsm
    793 KB · Đọc: 3
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

Private Sub CommandButton1_Click()

Dim endR As Long
With Sheets("sheet2")
endR = .Range("B" & Rows.Count).End(xlUp).Row

.Range("B" & endR + 1) = tensanpham.Text
.Range("C" & endR + 1).Select
.Range("D" & endR + 1) = thanhphan.Text
.Range("E" & endR + 1) = luatuoisudung.Text
.Range("F" & endR + 1) = cachdung.Text
.Range("G" & endR + 1) = xuatxu.Text
.Range("H" & endR + 1) = hang.Text
.Range("I" & endR + 1) = mucdich.Text

End With

tensanpham.Text = ""
thanhphan.Text = ""
luatuoisudung.Text = ""
cachdung.Text = ""
xuatxu.Text = ""
hang.Text = ""
mucdich.Text = ""


Dim strfile As String
Dim rng As Range
Dim sh As Shape
Const cfile As String = "imagefiles(*.bmp;*.gif;*.jpg;*.jpeg;*.png),"
strfile = Application.GetOpenFilename(filefilter:=cfile, Title:=es)
If strfile = "false" Then
Else
Set rng = ActiveCell
Set rng = rng.MergeArea
With rng
Set sh = ActiveSheet.Shapes.AddPicture(Filename:=strfile, linktofile:=msoFalse, savewithdocument:=msoTrue, Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height)

sh.LockAspectRatio = msoFalse
End With
Set sh = Nothing
Set rng = Nothing
End If


tensanpham.SetFocus

End Sub

mình bị báo lỗi như thế này bạn check hộ mình nhé
 

File đính kèm

  • 2.png
    2.png
    128.1 KB · Đọc: 4
  • Untitled.png
    Untitled.png
    132.4 KB · Đọc: 4
Upvote 0
đây là file excel nếu bác cần :( xem hộ em nhé cần gấp lắm
 

File đính kèm

  • 2.xlsm
    27.5 KB · Đọc: 1
Upvote 0
Mong được giải đáp
Tôi có làm các checkbox để ẩn hiện các cột cho tiện (như file đính kèm).
Việc sử dụng thì không sao. Tuy nhiên khi mở file ra, cấu hình trong form không đúng với thực tế. Cụ thể là khi bấm dấu kiểm nào đó vào thì 1 số cột tương ứng bị ẩn, nếu đóng file lại và có save sau đó mở ra, cột vẫn bị ẩn mà dấu kiểm không còn.
Có cách nào lưu giữ dấu kiểm khi mở file tương ứng với khi đóng file ?
Xin cảm ơn
 

File đính kèm

  • VD.xlsb
    44.2 KB · Đọc: 2
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