Những câu hỏi về code, xin giải thích các code, đề nghị các bạn gửi vào đây

Liên hệ QC
Status
Không mở trả lời sau này.

ST-Lu!

Love Wingchun
Tham gia
19/8/08
Bài viết
730
Được thích
546
Nghề nghiệp
Xích lô một thời
Kể từ hôm nay, tất cả những câu hỏi nhờ giải thích dùm một đoạn code, hay là hỏi những vấn đề linh tinh gì liên quan đến cách viết code, đề nghị các bạn gửi chung vào đây.

Những đề tài mới với tiêu đề: "Nhờ giải thích dùm đoạn code", mà không nói rõ là code gì, code dùng để làm gì, sẽ bị xóa.

BQT

----------------------------------------------------------------------------------------------------------------


Em xin được hỏi 2 đoạn code sau có tương đương nhau ?

Cells(Cells.Rows.Count, 1).End(xlUp).Row có tương đương với [A65000].End(xlup).row

Cám ơn các anh chỉ giáo
 
Chỉnh sửa lần cuối bởi điều hành viên:
Nếu in thì không hiện Print Review:

Mã:
Private Sub CommandButton1_Click()
    Dim lngRow As Long
    If Opt1 Then
        lngRow = Application.WorksheetFunction.Count(ActiveSheet.Range("O:O"))
        With ActiveSheet.Range("A2:Q" & lngRow + 7)
            .Select
            .PrintOut Copies:=1, Collate:=True
        End With
    Else
        lngRow = Application.WorksheetFunction.Count(ActiveSheet.Range("U:U"))
        With ActiveSheet.Range("S2:X" & lngRow + 7)
            .Select
            .PrintOut Copies:=1, Collate:=True
        End With
    End If
    Unload Me
End Sub

Cho mình hỏi nếu không vào cửa sổ preview mà vào cửa sổ print để chọn máy in thì phải thay đổi đoạn code này như thế nào?
mình cảm ơn!
 
Upvote 0
Em đang chập chững với code mảng, ở đây có code này em còn chưa hiểu lắm xin vui lòng giải thích cặn kẻ giúp em
Dùng vòng lập lấy các số lẻ trong A1:A10 và chuyển sang cột C

Mã:
[COLOR=#0000BB][FONT=monospace]Sub Test[/FONT][/COLOR][COLOR=#007700][FONT=monospace]()
  [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Dim sArray[/FONT][/COLOR][COLOR=#007700][FONT=monospace], [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Arr[/FONT][/COLOR][COLOR=#007700][FONT=monospace](), [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]i [/FONT][/COLOR][COLOR=#007700][FONT=monospace]As [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Long[/FONT][/COLOR][COLOR=#007700][FONT=monospace], [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]j [/FONT][/COLOR][COLOR=#007700][FONT=monospace]As [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Long
  sArray [/FONT][/COLOR][COLOR=#007700][FONT=monospace]= [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Range[/FONT][/COLOR][COLOR=#007700][FONT=monospace]([/FONT][/COLOR][COLOR=#DD0000][FONT=monospace]"A1:A10"[/FONT][/COLOR][COLOR=#007700][FONT=monospace]).[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Value
  ReDim Arr[/FONT][/COLOR][COLOR=#007700][FONT=monospace]([/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]1 To UBound[/FONT][/COLOR][COLOR=#007700][FONT=monospace]([/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]sArray[/FONT][/COLOR][COLOR=#007700][FONT=monospace]), [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]1 To 1[/FONT][/COLOR][COLOR=#007700][FONT=monospace])
  For [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]i [/FONT][/COLOR][COLOR=#007700][FONT=monospace]= [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]1 To UBound[/FONT][/COLOR][COLOR=#007700][FONT=monospace]([/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]sArray[/FONT][/COLOR][COLOR=#007700][FONT=monospace])
    If [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]sArray[/FONT][/COLOR][COLOR=#007700][FONT=monospace]([/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]i[/FONT][/COLOR][COLOR=#007700][FONT=monospace], [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]1[/FONT][/COLOR][COLOR=#007700][FONT=monospace]) [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Mod 2 Then
       j [/FONT][/COLOR][COLOR=#007700][FONT=monospace]= [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]j [/FONT][/COLOR][COLOR=#007700][FONT=monospace]+ [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]1
      Arr[/FONT][/COLOR][COLOR=#007700][FONT=monospace]([/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]j[/FONT][/COLOR][COLOR=#007700][FONT=monospace], [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]1[/FONT][/COLOR][COLOR=#007700][FONT=monospace]) = [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]sArray[/FONT][/COLOR][COLOR=#007700][FONT=monospace]([/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]i[/FONT][/COLOR][COLOR=#007700][FONT=monospace], [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]1[/FONT][/COLOR][COLOR=#007700][FONT=monospace])
    [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]End [/FONT][/COLOR][COLOR=#007700][FONT=monospace]If
  [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Next
  Range[/FONT][/COLOR][COLOR=#007700][FONT=monospace]([/FONT][/COLOR][COLOR=#DD0000][FONT=monospace]"C1:C10"[/FONT][/COLOR][COLOR=#007700][FONT=monospace]) = [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Arr
End Sub [/FONT][/COLOR]

Em c
ảm ​ơn!

 
Upvote 0
Em đang chập chững với code mảng, ở đây có code này em còn chưa hiểu lắm xin vui lòng giải thích cặn kẻ giúp em
Dùng vòng lập lấy các số lẻ trong A1:A10 và chuyển sang cột C
PHP:
Sub Test()
  Dim sArray, Arr(), i As Long, j As Long ' Khai bao bien
  
  sArray = Range("A1:A10").Value 'Nap du lieu vung A1 : A10 vao mang sArray
  
  ReDim Arr(1 To UBound(sArray), 1 To 1) 'Khai bao lai mang ket qua, mang Arr co so hang bang voi so hang cua mang sArray va co 1 cot, ban tim hieu xem ubound(sArray) xem no tra ve cai gi nhe? Dung Msgbox kiem tra nha.
  
  For i = 1 To UBound(sArray) ' Dung vong lap duyet qua cac phan tu cua sArray
    
    If sArray(i, 1) Mod 2 Then ' neu phan tu thu i cua sArray khong chia het cho 2 thi
       j = j + 1 ' tang bien j
      
      Arr(j, 1) = sArray(i, 1) ' Gan phan tu cua mang ket qua bang phan tu cua mang du lieu nguon ma tai do no k chia het cho 2
    
    End If
  
  Next
  
  Range("C1:C10") = Arr ' Do mang ket qua Arr ra vung C1 : C10 tren sheet

  ' Co the viet dong lenh tren thanh the nay [C1].Resize(j, 1) = Arr

End Sub

' Chu y nen khai bao ro rang la ban dang lam viec voi sheet nao trong Workbook nhe!!!

Hong.Van chỉnh 2 câu lệnh này cho hoàn chỉnh nhé :

sArray = Sheet1.Range("A1:A" & sheet1.[A65536].End(xlUp).Row).Value
Sheet1.[C1].Resize(j, 1) = Arr
 
Lần chỉnh sửa cuối:
Upvote 0
Trước đây em có thấy bài của thành viên Siwtom , nhưng bây giờ tìm không ra!
Nhân đây cho em hỏi, các Thầy hoặc anh chị có code nào để sắp xếp lại code thụt ra , thụt vào không? em có tải File của tác giả Phan Ngoc Lan (!?) nhưng kg dùng được, Ai có cho em xin!
Em cảm ơn

Để thụt ra thụt vào, dùng tiện ích nhỏ gọn sau:
Nhưng chỉ có tác dụng với EXcel 2003 trở về trước.
Cách dùng: Giải nén, chạy File IndenterVBA.exe
Mở file Excel, vào trang VBE, bấm chuột phải vào nơi bất kỳ để viết code --> chọn Smart Indenter --> Có nhiều lụa chọn: Indenter thủ tục (đang đứng) hoặc Indenter module hoặc Indenter cả chương trình (tất cả module, sheet ...)
 

File đính kèm

  • IndenterVBA.rar
    253.1 KB · Đọc: 25
Upvote 0
PHP:
Sub Test()
  Dim sArray, Arr(), i As Long, j As Long ' Khai bao bien
  
  sArray = Range("A1:A10").Value 'Nap du lieu vung A1 : A10 vao mang sArray
  
  ReDim Arr(1 To UBound(sArray), 1 To 1) 'Khai bao lai mang ket qua, mang Arr co so hang bang voi so hang cua mang sArray va co 1 cot, ban tim hieu xem ubound(sArray) xem no tra ve cai gi nhe? Dung Msgbox kiem tra nha.
  
  For i = 1 To UBound(sArray) ' Dung vong lap duyet qua cac phan tu cua sArray
    
    If sArray(i, 1) Mod 2 Then ' neu phan tu thu i cua sArray khong chia het cho 2 thi
       j = j + 1 ' tang bien j
      
      Arr(j, 1) = sArray(i, 1) ' Gan phan tu cua mang ket qua bang phan tu cua mang du lieu nguon ma tai do no k chia het cho 2
    
    End If
  
  Next
  
  Range("C1:C10") = Arr ' Do mang ket qua Arr ra vung C1 : C10 tren sheet

  ' Co the viet dong lenh tren thanh the nay [C1].Resize(j, 1) = Arr

End Sub

' Chu y nen khai bao ro rang la ban dang lam viec voi sheet nao trong Workbook nhe!!!

Hong.Van chỉnh 2 câu lệnh này cho hoàn chỉnh nhé :

sArray = Sheet1.Range("A1:A" & sheet1.[A65536].End(xlUp).Row).Value
Sheet1.[C1].Resize(j, 1) = Arr
Cảm ơn bạn nhiều
Các câu lệnh bổ sung của bạn giúp mình hiểu hơn, vì cần lưu ý số dòng của cột A & C
Mình cũng đang lò dò sang lĩnh vực viết code nên rất mong các Thầy cô & anh chị hỗ trợ & giúp đỡ
Đúng như tin đồn là bạn đang luyện code!
-------------
thanhlanh đã viết:
Để thụt ra thụt vào, dùng tiện ích nhỏ gọn sau:
Nhưng chỉ có tác dụng với EXcel 2003 trở về trước.
Cách dùng: Giải nén, chạy File IndenterVBA.exe
Mở file Excel, vào trang VBE, bấm chuột phải vào nơi bất kỳ để viết code --> chọn Smart Indenter --> Có nhiều lụa chọn: Indenter thủ tục (đang đứng) hoặc Indenter module hoặc Indenter cả chương trình (tất cả module, sheet ...)
Cảm ơn bạn, code chạy tốt, tiếc là kg chạy được trên Excel 2010
 
Upvote 0
Nguyên văn bởi Hoàng Trọng Nghĩa
Có thể gõ tiếng Việt bằng font khác như VNI còn Unicode thì không thể gõ được. Vì vậy diễn đàn có rất nhiều bài dùng các hàm chuyển đổi font cho môi trường VBE.

Trước đây em có thấy bài của thành viên Siwtom , nhưng bây giờ tìm không ra!
Nhân đây cho em hỏi, các Thầy hoặc anh chị có code nào để sắp xếp lại code thụt ra , thụt vào không? em có tải File của tác giả Phan Ngoc Lan (!?) nhưng kg dùng được, Ai có cho em xin!
Em cảm ơn

Theo tôi đoạn bạn trích có 2 ý. Thứ nhất là nói về việc gõ trong VBE. Thứ hai là nói về các hàm chuyển đổi bảng mã.

Vậy nếu bạn muốn nói về ý nào thì nên viết rõ ra chứ.

Nếu nói về gõ trong VBE thì tôi dùng windows-1258: Tools --> Options --> thẻ Editor Format, mục Font --> chọn Times New Roman (vietnamese)
Nhưng tôi chỉ dùng vietnamese để gõ chú thích thôi. Vì chuỗi dùng trong code thì luôn có thể nhập unicode kiểu:
Mã:
text = “C" & ChrW(7897) & "ng H" & ChrW(242) & "a X" & ChrW(227) & " H" & ChrW(7897) & "i Ch" & ChrW(7911) & " Ngh" & ChrW(297) & "a Vi" & ChrW(7879) & "t Nam”

Tôi không bao giờ, và chắc chắn sẽ không bao giờ, dùng VNI hay TCVN3. Nếu có quan tâm thì cũng chỉ để "giải quyết hậu quả" do người khác gây ra. Đã có biết bao nhiêu người hỏi, và sẽ hỏi: "chuyển VNI sang unicode như thế nào?"

Tôi không và sẽ không bao giờ hiểu được lý do nào mà ở thế kỷ 21 người ta vẫn còn dùng VNI. Trước đây khi hđh chưa hỗ trợ đa ngôn ngữ thì VNI (bên cạnh windows-1258) là giải pháp. Nhưng cả bây giờ khi hđh hỗ trợ đa ngôn ngữ, unicode? Tai sao ta cứ phải làm khổ nhau như thế nhỉ? Tất nhiên chọn bảng mã nào là quyền của người viết nhưng nếu mọi người đều dùng unicode cả thì mọi chuyện đơn giản hơn rất nhiều.
 
Upvote 0
Tiện ích thì cũng tốt, nhưng theo tôi thì tôi có thói quen tự canh ( bằng phím Tab >> và Shift + Tab << ), khi làm như vậy mình dễ chỉnh sửa trong code hơn là mình làm một loạt rồi mới canh thụt ra thụt vào.

Khi viết tôi nhấn Tab cho từng dòng hoặc cứ viết xong thì chọn cả 1 cụm dòng rồi nhấn Tab
 
Upvote 0
tất cả các bài của siwtom đều gõ unicode trong môi trường VBA, một số bài có câu ghi chú nên dùng font gì để gõ: Courier New (Vietnamese), bảng mã Unicode tổ hợp

Không phải Courier New.
Trong VBE tôi dùng Times New Roman (vietnamese). Khi gõ chú thích thì dùng bảng mã windows-1258 (vietnamse)

Cũng không phải unicode tổ hợp.

Do chú thích trong VBEc dùng windows-1258 nên khi cần copy code lên GPE thì trước tiên tôi dán đoạn cần copy vào WORD (trong WORD có code VBA viết để convert) rồi convert toàn bộ code có chứa cả chú thích dùng windows-1258 sang unicode dựng sẵn. Chính vì thế mà trong hầu hết các bài gửi lên GPE mà có chú thích thì "chú thích đọc được" chứ không là "đầu trâu mặt ngựa".
 
Upvote 0

File đính kèm

  • GoUnicodeTrongVBA.xls
    37 KB · Đọc: 7
Upvote 0
Khi viết tôi nhấn Tab cho từng dòng hoặc cứ viết xong thì chọn cả 1 cụm dòng rồi nhấn Tab

Dạ, cách viết của em thường thì mỗi dòng em sẽ mỗi thụt vô thụt ra, nhưng nếu làm biếng thì em sẽ để hết một thủ tục (thủ tục nội bộ nào đó như With ... End With, If ... End If, For ... Next, ...), chứ không bao giờ em có thói quen cứ enter cho đã rồi đến khi End Sub mới thụt ra thụt vào, em tự cảm thấy nó chẳng khoa học tí nào cả!
 
Upvote 0
Không phải Courier New.
Trong VBE tôi dùng Times New Roman (vietnamese). Khi gõ chú thích thì dùng bảng mã windows-1258 (vietnamse)

Cũng không phải unicode tổ hợp.

Do chú thích trong VBEc dùng windows-1258 nên khi cần copy code lên GPE thì trước tiên tôi dán đoạn cần copy vào WORD (trong WORD có code VBA viết để convert) rồi convert toàn bộ code có chứa cả chú thích dùng windows-1258 sang unicode dựng sẵn. Chính vì thế mà trong hầu hết các bài gửi lên GPE mà có chú thích thì "chú thích đọc được" chứ không là "đầu trâu mặt ngựa".

Xin lỗi siwtom vì trích dẫn cách làm của siwtom không đúng.
Nhưng sự thực là tôi dùng Courier New (Vietnamese), bảng mã Unicode tổ hợp gõ trong cửa sổ VBA và đọc được. Và có lẽ chỉ đọc được tại cửa sổ VBA chứ copy lên GPE thì thua.

Thí nghiệm:

1. Courier New (Vietnamese), Unicode tổ hợp:
hôm nay laÌ ngaÌy tâòn thêì

2. Courier New (Vietnamese), Vietnamese local CP 1258
hôm nay là ngày tận thế

Và cả 2 cách đều có thể đưa lên Msgbox của Window. Ghi chú là tôi không đụng chạm gì vào hệ thống hiển thị của window 7
 
Lần chỉnh sửa cuối:
Upvote 0
có cách gõ Unicode tiếng việt trực tiếp trong VBA rồi |||||,

Trong file của bạn tôi chẳng biết bạn đang sử dụng font kiểu gì nữa!

1) Trong VBE bạn đã gõ bằng CP1258 (Unicode tổ hợp)

2) Khi dùng hàm =UniVND(20035)

Thì được một kết quả như thế này:

Mã:
Hai mýõi nghiÌn, không trãm ba mýõi nãm ðôÌng.


Theo bạn nó là như thế nào nhỉ?
 
Upvote 0
Xin lỗi siwtom vì trích dẫn cách làm của siwtom không đúng.
Nhưng sự thực là tôi dùng Courier New (Vietnamese), bảng mã Unicode tổ hợp gõ trong cửa sổ VBA và đọc được. Và có lẽ chỉ đọc được tại cửa sổ VBA chứ copy lên GPE thì thua.

Thí nghiệm:

1. Courier New (Vietnamese), Unicode tổ hợp:
hôm nay laÌ ngaÌy tâòn thêì

2. Courier New (Vietnamese), Vietnamese local CP 1258
hôm nay là ngày tận thế

Và cả 2 cách đều có thể đưa lên Msgbox của Window. Ghi chú là tôi không đụng chạm gì vào hệ thống hiển thị của window 7


Sao em cũng thử dùng như Sư phụ: 2. Courier New (Vietnamese), Vietnamese local CP 1258

Em muốn viết: "Tôi yêu cầu bạn thực hiện điều này để tôi còn tiếp tục làm việc"

Thì lại được kết quả như sau:

Tôi yêu câÌu baòn thýòc hiêòn ðiêÌu naÌy ðêÒ tôi coÌn tiêìp tuòc laÌm viêòc
 

File đính kèm

  • Picture1.jpg
    Picture1.jpg
    21.2 KB · Đọc: 79
Lần chỉnh sửa cuối:
Upvote 0
attachment.php


Tôi gõ thấy bình thường, cả máy ở nhà và máy công ty.

Chỉ khác là máy công ty không sử dụng được msgbox. (Chẳng biết chỗ sửa)
 

File đính kèm

  • CourierNew.jpg
    CourierNew.jpg
    29.8 KB · Đọc: 155
Upvote 0
attachment.php


Tôi gõ thấy bình thường, cả máy ở nhà và máy công ty.

Chỉ khác là máy công ty không sử dụng được msgbox. (Chẳng biết chỗ sửa)

Phải chăng là do Hệ điều hành hoặc Version của Office? Em xài máy cơ quan với WinXP, Excel 2003.
 
Upvote 0
Phải chăng là do Hệ điều hành hoặc Version của Office? Em xài máy cơ quan với WinXP, Excel 2003.
mau.jpg
mục đích nói là như thầy Tuấn

[GPECODE=vb]Sub TIENGVIET()
MsgBox "hôm nay là ngày tận thế, rất mừng là mọi người còn sống", vbOKOnly, "chúc mường"
End Sub
[/GPECODE]

sử dụng copy trong VBA sau đó paste lên bình thường "sử dung font : Times New Roman"
"Tôi yêu cầu bạn thực hiện điều này để tôi còn tiếp tục làm việc"

Thì lại được kết quả như sau:

Tôi yêu câÌu baòn thýòc hiêòn ðiêÌu naÌy ðêÒ tôi coÌn tiêìp tuòc laÌm viêòc
sao máy em ko bị như anh nghĩa nói
 

File đính kèm

  • mau.jpg
    mau.jpg
    19 KB · Đọc: 70
Lần chỉnh sửa cuối:
Upvote 0
Xin lỗi siwtom vì trích dẫn cách làm của siwtom không đúng.
Nhưng sự thực là tôi dùng Courier New (Vietnamese), bảng mã Unicode tổ hợp gõ trong cửa sổ VBA và đọc được. Và có lẽ chỉ đọc được tại cửa sổ VBA chứ copy lên GPE thì thua.

Thí nghiệm:

1. Courier New (Vietnamese), Unicode tổ hợp:
hôm nay laÌ ngaÌy tâòn thêì

2. Courier New (Vietnamese), Vietnamese local CP 1258
hôm nay là ngày tận thế

Và cả 2 cách đều có thể đưa lên Msgbox của Window. Ghi chú là tôi không đụng chạm gì vào hệ thống hiển thị của window 7

Không sao cả. Tôi chỉ muốn đính chính là tôi dùng Times New Roman vì đúng là tôi chỉ dùng Times, vì tôi thích Times. Tôi không hề khẳng định là phải dùng Times.
Và khi gõ trong VBE bằng Unikey thì chọn bảng mã Vietnamese locale cp 1258
 
Lần chỉnh sửa cuối:
Upvote 0
coppy dữ liệu sang 1 sheet theo 1 điều kiện

Dear GPE
Em có 1 bài về code VBA mà không biết làm như thế nào( attach file). Em xin phép được post lên diễn đàn để sử lý giúp em với ạ
Em xin chân thành cảm ơn
 

File đính kèm

  • coppy dữ liệu sang 1sheet mới theo 1 điều kiện cho trc.xls
    28 KB · Đọc: 6
Upvote 0
Dear GPE
Em có 1 bài về code VBA mà không biết làm như thế nào( attach file). Em xin phép được post lên diễn đàn để sử lý giúp em với ạ
Em xin chân thành cảm ơn

Bạn mô tả quá ít. Copy tất cả và dán nối vào sheet tương ứng, hay chỉ copy dòng có dữ liệu. Tốt nhât nên đưa dữ liệu thật vào và mô tả rõ thêm tí nữa. Copy rồi có xóa dư liệu trong sheet1 hay không?
 
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