Giải Thích các ký tự "!@#" và "#" trong code (1 người xem)

Liên hệ QC

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

NguyenthiH

Thành viên mới đăng ký
Tham gia
11/12/16
Bài viết
965
Được thích
175
Giới tính
Nữ
Em có đoạn code này của Anh HieuCD làm dùm trong File này code "thanhtien"
Mã:
Sub ThanhTien()
Dim Dic As Object, Darr(), Darr2(), Arr(), i As Long, tmp As String
If Sheets("Sheet2").Range("B65500").End(xlUp).Row <= 3 Or Sheets("Sheet1").Range("A65500").End(xlUp).Row <= 3 Then Exit Sub
Set Dic = CreateObject("Scripting.Dictionary")
Darr = Sheets("Sheet1").Range("A4:C" & Sheets("Sheet1").Range("A65500").End(xlUp).Row).Value
For i = 1 To UBound(Darr)
    tmp = Darr(i, 1) & [B][COLOR=#ff0000]"!@#[/COLOR][/B]" & Darr(i, 2)
    If Not Dic.exists(tmp) Then Dic.Add tmp, Darr(i, 3)
Next i
Darr = Sheets("Sheet2").Range("D4:F" & Sheets("Sheet2").Range("B65500").End(xlUp).Row).Value
ReDim Arr(1 To UBound(Darr), 1 To 1)
For i = 1 To UBound(Darr)
    tmp = Darr(i, 1) & "[B][COLOR=#ff0000]!@#[/COLOR][/B]" & Darr(i, 2)
    If Dic.exists(tmp) Then Arr(i, 1) = Darr(i, 3) * Dic.Item(tmp)
Next i
Set Dic = Nothing
Sheets("Sheet2").Range("G4:G" & Sheets("Sheet2").Range("B65500").End(xlUp).Row).Value = Arr
Range("A4").Select
End Sub
và code:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$2" Then
    If Target.Value < 1 Or Target.Value > 12 Then Exit Sub
    If Sheets("Sheet2").Range("B65500").End(xlUp).Row <= 3 Then Exit Sub
    Dim Dic As Object, Darr(), Arr1(), Arr2(), Arr3(), i As Long, k1 As Long, k2 As Long, k3 As Long, tmp1 As String, tmp2 As String, tmp3 As String
    Set Dic = CreateObject("Scripting.Dictionary")
    Darr = Sheets("Sheet2").Range("A4:G" & Sheets("Sheet2").Range("A65500").End(xlUp).Row).Value
    ReDim Arr1(1 To UBound(Darr), 1 To 3)
    ReDim Arr2(1 To UBound(Darr), 1 To 4)
    ReDim Arr3(1 To UBound(Darr), 1 To 2)
    For i = 1 To UBound(Darr)
        If Month(Darr(i, 1)) = Target.Value Then
            tmp1 = Darr(i, 3) & [B][COLOR=#ff0000]"#[/COLOR][/B]" & Darr(i, 4)
            If Not Dic.exists(tmp1) Then
                k1 = k1 + 1:                  Dic.Add tmp1, k1
                Arr1(k1, 1) = Darr(i, 3): Arr1(k1, 2) = Darr(i, 4)
            End If
            Arr1(Dic.Item(tmp1), 3) = Arr1(Dic.Item(tmp1), 3) + Darr(i, 7)
            
            tmp2 = Darr(i, 2) & [B][COLOR=#ff0000]"#[/COLOR][/B]" & Darr(i, 3) & [B][COLOR=#ff0000]"#[/COLOR][/B]" & Darr(i, 4)
            If Not Dic.exists(tmp2) Then
                k2 = k2 + 1:                  Dic.Add tmp2, k2
                Arr2(k2, 1) = Darr(i, 2): Arr2(k2, 2) = Darr(i, 3): Arr2(k2, 3) = Darr(i, 4)
            End If
            Arr2(Dic.Item(tmp2), 4) = Arr2(Dic.Item(tmp2), 4) + Darr(i, 7)
            
            tmp3 = Darr(i, 2)
            If Not Dic.exists(tmp3) Then
                k3 = k3 + 1:                  Dic.Add tmp3, k3
                Arr3(k3, 1) = Darr(i, 2)
            End If
            Arr3(Dic.Item(tmp3), 2) = Arr3(Dic.Item(tmp3), 2) + Darr(i, 7)
        End If
    Next i
    Set Dic = Nothing
    Sheets("Sheet3").Range("A5:C1000").Clear
    Sheets("Sheet3").Range("A5").Resize(k1, 3) = Arr1
    Sheets("Sheet3").Range("A4").Resize(k1 + 1, 3).Borders.LineStyle = 1
    Sheets("Sheet3").Range("C5").Resize(k1).NumberFormat = "#,##0"
    
    Sheets("Sheet3").Range("E5:H1000").Clear
    Sheets("Sheet3").Range("E5").Resize(k2, 4) = Arr2
    Sheets("Sheet3").Range("E4").Resize(k2 + 1, 4).Borders.LineStyle = 1
    Sheets("Sheet3").Range("H5").Resize(k2).NumberFormat = "#,##0"
   ' Sheets("Sheet3").Range("A2").Value = Sheets("Sheet3").Range("A2").Value
    
    Sheets("Sheet3").Range("J5:K1000").Clear
    Sheets("Sheet3").Range("J5").Resize(k3, 2) = Arr3
    Sheets("Sheet3").Range("J4").Resize(k3 + 1, 2).Borders.LineStyle = 1
    Sheets("Sheet3").Range("K5").Resize(k3).NumberFormat = "#,##0"
    'Sheets("Sheet5").Range("A2").Value = Sheets("Sheet3").Range("A2").Value
End If
End Sub
Mong anh HieuCD và các Anh giải thích chổ các ký tự đặc biệt này, sao lúc là "!@#", lúc là "#"
Em cám ơn.
 
Vì các kí tự đó ít xài nên anh HieuCD xài để bàn fím hư đều đó mà! -=09= @$@!^% -=09=
 
Upvote 0
Phải không Anh ChanhTQ@, nó làm hư bàn phím hả Anh???
Sao em thấy từ lúc có file đó, sao có lúc gỏ phím số hoặc enter bên phím số thì nó lại tắt NumberLock,phải nhấn lại.
Mong Anh và mọi người chỉ rỏ ah!
 
Upvote 0
Anh ChanhTQ@ nói thiệt hay nói giỡn. Em thử thì thấy có thiệt.
Em mở file có ký tự đặc biệt lên(File của Anh HieuCD) thì có hiện tượng như sau: mở Form (mặc định Numlock mở) gỏ ngày vào Tb_Ngay, nhấn Tab chuyển qua Cb_TO( tắt Numlock) chọn tổ, nhấn Tab qua Cb_CN (mở Numlock), chọn tên công nhân, nhấn Tab chuyển qua Cb_MH (tắt Numlock) chọn mã hàng, nhấn Tab chuyển qua Cb_CD(mở Numlock) chọn công đoạn, nhấn Tab chuyển qua Tb_SL(mở Numlock) gỏ Số lượng->Enter thì lại đóng Numlock.
Còn mở file khác không có các ký tự đặc biệt đó thì bình thường.(cũng có Form)
Mong các Anh nếu đúng là do các ký tự đó (Vì chưa chắc) thì các Anh có thể thay các Ký tự đó bằng cái khác được không ah!
Em Cám Ơn.
 
Upvote 0
Nếu đúng là do các ký tự đó (Vì chưa chắc) thì các Anh có thể thay các Ký tự đó bằng cái khác được không ah!
Em Cám Ơn.

Bạn hoàn toàn có thể tự thử được mà.
Ở câu lệnh có các fím dị thường đó, ta có thể thay bằng cụm từ "GPE.COM" xem sao.

Trong file của bạn với 2 mã hàng khác nhau có trùng tên công đoạn mà.
 
Upvote 0
Em đã thử thay bằng "GPE,COM" cho các ký tự đó, thì thấy code cũng chạy (tên em code cũng chạy) nhưng cũng bị lỗi như bài #4. Hơi bực là khi tới nhập số lượng thì phải nhấn Numlock(tại phím số bị tắt) nhưng được cái chỉ bị cho lươt đầu tiên nhập liệu trên form, còn lần thứ 2 thì không bị. Không biết có giải pháp nào cho tình trạng này không các AC.
Em đã thay bằng tên em, nhưng không biết về lâu dài có vấn đề gì không, chứ nếu mà tính sai lương của công nhân thì tụi nó đánh cho u đầu.
 
Lần chỉnh sửa cuối:
Upvote 0
Phải không Anh ChanhTQ@, nó làm hư bàn phím hả Anh???
Sao em thấy từ lúc có file đó, sao có lúc gỏ phím số hoặc enter bên phím số thì nó lại tắt NumberLock,phải nhấn lại.
Mong Anh và mọi người chỉ rỏ ah!
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$2" Then
    If Target.Value < 1 Or Target.Value > 12 Then Exit Sub
    If Sheets("Sheet2").Range("B65500").End(xlUp).Row <= 3 Then Exit Sub
    Dim Dic As Object, Darr(), Arr1(), Arr2(), Arr3(), i As Long, k1 As Long, k2 As Long, k3 As Long, tmp1 As String, tmp2 As String, tmp3 As String
    Set Dic = CreateObject("Scripting.Dictionary")
    Darr = Sheets("Sheet2").Range("A4:G" & Sheets("Sheet2").Range("A65500").End(xlUp).Row).Value
    ReDim Arr1(1 To UBound(Darr), 1 To 3)
    ReDim Arr2(1 To UBound(Darr), 1 To 4)
    ReDim Arr3(1 To UBound(Darr), 1 To 2)
    For i = 1 To UBound(Darr)
        If Month(Darr(i, 1)) = Target.Value Then
            tmp1 = Darr(i, 3) & "#" & Darr(i, 4)
            If Not Dic.exists(tmp1) Then
                k1 = k1 + 1:                  Dic.Add tmp1, k1
                Arr1(k1, 1) = Darr(i, 3): Arr1(k1, 2) = Darr(i, 4)
            End If
            Arr1(Dic.Item(tmp1), 3) = Arr1(Dic.Item(tmp1), 3) + Darr(i, 7)
            
            tmp2 = Darr(i, 2) & "#" & Darr(i, 3) & "#" & Darr(i, 4)
            If Not Dic.exists(tmp2) Then
                k2 = k2 + 1:                  Dic.Add tmp2, k2
                Arr2(k2, 1) = Darr(i, 2): Arr2(k2, 2) = Darr(i, 3): Arr2(k2, 3) = Darr(i, 4)
            End If
            Arr2(Dic.Item(tmp2), 4) = Arr2(Dic.Item(tmp2), 4) + Darr(i, 7)
            
            tmp3 = Darr(i, 2)
            If Not Dic.exists(tmp3) Then
                k3 = k3 + 1:                  Dic.Add tmp3, k3
                Arr3(k3, 1) = Darr(i, 2)
            End If
            Arr3(Dic.Item(tmp3), 2) = Arr3(Dic.Item(tmp3), 2) + Darr(i, 7)
        End If
    Next i
    Set Dic = Nothing
    Sheets("Sheet3").Range("A5:C1000").Clear
    Sheets("Sheet3").Range("A5").Resize(k1, 3) = Arr1
    Sheets("Sheet3").Range("A4").Resize(k1 + 1, 3).Borders.LineStyle = 1
    Sheets("Sheet3").Range("C5").Resize(k1).NumberFormat = "#,##0"
    
    Sheets("Sheet4").Range("A5:D1000").Clear
    Sheets("Sheet4").Range("A5").Resize(k2, 4) = Arr2
    Sheets("Sheet4").Range("A4").Resize(k2 + 1, 4).Borders.LineStyle = 1
    Sheets("Sheet4").Range("D5").Resize(k2).NumberFormat = "#,##0"
    Sheets("Sheet4").Range("A2").Value = Sheets("Sheet3").Range("A2").Value
    
    Sheets("Sheet5").Range("A5:B1000").Clear
    Sheets("Sheet5").Range("A5").Resize(k3, 2) = Arr3
    Sheets("Sheet5").Range("A4").Resize(k3 + 1, 2).Borders.LineStyle = 1
    Sheets("Sheet5").Range("B5").Resize(k3).NumberFormat = "#,##0"
    Sheets("Sheet5").Range("A2").Value = Sheets("Sheet3").Range("A2").Value
End If
End Sub
Darr(i, 3) & "#" & Darr(i, 4)
& "#" & dùng để ngăn cách các dữ liệu, đề phòng trường hợp cặp Darr(i, 3), Darr(i, 4) khác nhau nhưng Darr(i, 3) & Darr(i, 4) lại giống nhau
ví dụ có 2 cặp: 1 và 234, 12 và 34, nếu dùng Darr(i, 3) & Darr(i, 4) thì cả 2 cặp đều là 1234 giống nhau, nên phải dùng Darr(i, 3) & "#" & Darr(i, 4) sẽ có 2 giá trị khác nhau là 1#234 và 12#34
bạn có thể thay & "#" & bằng các ký tự khác, nhưng không nên dùng các ký tự thông dụng vì có thể ngẫu nhiên xảy ra tình trạng không phân biệt được Darr(i, 3) ,Darr(i, 4)
Mình nghĩ lỗi Num Lock không phải do & "#" & , hoặc code của mình, có thể do các lệnh điều khiển Form của bạn
 
Upvote 0
Vậy thì theo Anh HieuCD nói thì lỗi Num Lock không phải là do các ký tự đặc biệt đó. Nhưng em có thử cũng file đó nếu bỏ code "ThanhTien" và code "WorkSheets3_Change" nhưng vẫn giữ Form đó, thì di chuyển trên Form không có code "ThanhTien" và "Worksheets3_Change" thì không bị lỗi Num Lock. không biết tại sao?????
 
Upvote 0
Vậy thì theo Anh HieuCD nói thì lỗi Num Lock không phải là do các ký tự đặc biệt đó. Nhưng em có thử cũng file đó nếu bỏ code "ThanhTien" và code "WorkSheets3_Change" nhưng vẫn giữ Form đó, thì di chuyển trên Form không có code "ThanhTien" và "Worksheets3_Change" thì không bị lỗi Num Lock. không biết tại sao?????
bạn gởi đường dẫn fife bị lỗi, để mình tải về xem sao
 
Upvote 0
Em gửi file các Anh Test thử, em nghi là do lỗi "Send Key" ở các Combobox(Xin lỗi Anh HieuCD), nếu đúng, thì em muốn các Anh giúp cho khi chuyển tới các ComboBox thì ComboBox xổ ra danh sách.
 

File đính kèm

Upvote 0
Em gửi file các Anh Test thử, em nghi là do lỗi "Send Key" ở các Combobox(Xin lỗi Anh HieuCD), nếu đúng, thì em muốn các Anh giúp cho khi chuyển tới các ComboBox thì ComboBox xổ ra danh sách.
Mình thật sự không hiểu tác dụng của các lệnh, chỉ đoán mò thôi
Mã:
Private Sub Cb_TO_Enter()
    SendKeys ("%{DOWN}")
    SendKeys ("%{DOWN}")
End Sub
 Private Sub Cb_MH_Enter()
    SendKeys ("%{DOWN}")
    SendKeys ("%{DOWN}")
End Sub
 Private Sub Cb_CN_Enter()
    SendKeys ("%{DOWN}")
    SendKeys ("%{DOWN}")
End Sub
 Private Sub Cb_CD_Enter()
    SendKeys ("%{DOWN}")
    SendKeys ("%{DOWN}")
End Sub
 
Upvote 0
Là khi nhấn Tab để di chuyển tới combobox thì xổ ra danh sách .
Ý của Anh HieuCD là nhân đôi "SendKeys ("${DOWN}")" lên đó hả.
Em thử vẫn lỗi.
Mà Anh thử file em có bị lỗi NumLock không??
 
Lần chỉnh sửa cuối:
Upvote 0
Là khi nhấn Tab để di chuyển tới combobox thì xổ ra danh sách .
Ý của Anh HieuCD là nhân đôi "SendKeys ("${DOWN}")" lên đó hả.
Em thử vẫn lỗi.
Mà Anh thử file em có bị lỗi NumLock không??
file chạy trên máy mình không bị lỗi Num lock khi Enter sang combobox khác, nhấn Tab vẫn bị
 
Upvote 0
Anh cũng bị ah.
Không có cách nào khác hả các Anh????:=\+
 
Upvote 0
bạn sửa các code lại
Mã:
Private Sub CommandButton1_Click()
SendKeys ("{NUMLOCK}")
SendKeys ("{NUMLOCK}")
SendKeys ("{NUMLOCK}")
UserForm1.Show
End Sub
Mã:
Private Sub Cb_TO_Enter()
    SendKeys ("%{DOWN}")
    SendKeys ("{NUMLOCK}")
    SendKeys ("{NUMLOCK}")
End Sub
 Private Sub Cb_MH_Enter()
    SendKeys ("%{DOWN}")
    SendKeys ("{NUMLOCK}")
    SendKeys ("{NUMLOCK}")
End Sub
 Private Sub Cb_CN_Enter()
    SendKeys ("%{DOWN}")
    SendKeys ("{NUMLOCK}")
    SendKeys ("{NUMLOCK}")
End Sub
 Private Sub Cb_CD_Enter()
    SendKeys ("%{DOWN}")
    SendKeys ("{NUMLOCK}")
    SendKeys ("{NUMLOCK}")
End Sub
 

File đính kèm

Upvote 0
Cám ơn Anh HieuCD, được rồi Anh ơi.
 
Upvote 0
bạn sửa các code lại
Mã:
Private Sub CommandButton1_Click()
SendKeys ("{NUMLOCK}")
SendKeys ("{NUMLOCK}")
SendKeys ("{NUMLOCK}")
UserForm1.Show
End Sub
Mã:
Private Sub Cb_TO_Enter()
    SendKeys ("%{DOWN}")
    SendKeys ("{NUMLOCK}")
    SendKeys ("{NUMLOCK}")
End Sub
 Private Sub Cb_MH_Enter()
    SendKeys ("%{DOWN}")
    SendKeys ("{NUMLOCK}")
    SendKeys ("{NUMLOCK}")
End Sub
 Private Sub Cb_CN_Enter()
    SendKeys ("%{DOWN}")
    SendKeys ("{NUMLOCK}")
    SendKeys ("{NUMLOCK}")
End Sub
 Private Sub Cb_CD_Enter()
    SendKeys ("%{DOWN}")
    SendKeys ("{NUMLOCK}")
    SendKeys ("{NUMLOCK}")
End Sub

ôi khổ cái thân tôi , chắc mình lạc hậu quá rồi , nhìn code bạn viết mà mình suy nghĩ mãi không hiểu . +-+-+-++-+-+-+
Xin bạn HieuCD giúp đỡ giải thích đôi điều về đoạn code ở trên với , ta gửi những phím đó để làm gì vậy bạn ?
 
Upvote 0
ôi khổ cái thân tôi , chắc mình lạc hậu quá rồi , nhìn code bạn viết mà mình suy nghĩ mãi không hiểu . +-+-+-++-+-+-+
Xin bạn HieuCD giúp đỡ giải thích đôi điều về đoạn code ở trên với , ta gửi những phím đó để làm gì vậy bạn ?
mình biết chết liền, cứ viết đại bấm F8 lúc chạy đằng tây rồi quay lại đằng đông, có lúc không đứng yên, không hiểu tại sao, nhồi thêm 2, 3 lần thì may mắn chạy đúng ý chủ topic +-+-+-++-+-+-+ +-+-+-++-+-+-+ +-+-+-++-+-+-+ xổ danh sách chọn và đèn Numlock trên bàn phím không bị tắt
bạn có cách nào viết lại cho ổn hơn không, nhìn code thấy kỳ quá !$@!! !$@!! !$@!!
 
Lần chỉnh sửa cuối:
Upvote 0
mình biết chết liền, cứ viết đại bấm F8 lúc chạy đằng tây rồi quay lại đằng đông, có lúc không đứng yên, không hiểu tại sao, nhồi thêm 2, 3 lần thì may mắn chạy đúng ý chủ topic +-+-+-++-+-+-+ +-+-+-++-+-+-+ +-+-+-++-+-+-+ xổ danh sách chọn và đèn Numlock trên bàn phím không bị tắt
bạn có cách nào viết lại cho ổn hơn không, nhìn code thấy kỳ quá !$@!! !$@!! !$@!!

muốn combobox xổ danh sách xuống thì người ta sẽ dùng
Mã:
combobox.DropDown
không ai sendKey cả . Hoặc có khi tôi lâu rồi không cập nhật kiến thức , xu thế bây giờ phải sendkey chăng ? +-+-+-++-+-+-+
 
Upvote 0
muốn combobox xổ danh sách xuống thì người ta sẽ dùng
Mã:
combobox.DropDown
không ai sendKey cả . Hoặc có khi tôi lâu rồi không cập nhật kiến thức , xu thế bây giờ phải sendkey chăng ? +-+-+-++-+-+-+
Cám ơn bạn. Mấy lệnh về userform, combobox mình đâu có biết, bị chủ Topic gọi tên nên phải xâm mình chạy ra làm liều, dùng lệnh của chủ topic sửa lại thôi --=-- -+*/ @#!^% )*&^)
sửa code lại, nếu nhấn phím Tab liên tục có thể không như ý nhưng chấp nhận được
Mã:
Private Sub CommandButton1_Click()
UserForm1.Show
End Sub
Mã:
Private Sub Cb_TO_enter()
Cb_TO.DropDown
End Sub
 Private Sub Cb_MH_enter()
Cb_MH.DropDown
End Sub
 Private Sub Cb_CN_enter()
Cb_CN.DropDown
End Sub
 Private Sub Cb_CD_enter()
Cb_CD.DropDown
End Sub
 
Upvote 0
Web KT

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

Back
Top Bottom