Sử dụng hàm upper hay lower trong vba

Liên hệ QC

hoangmai2605

Thành viên chính thức
Tham gia
27/2/09
Bài viết
92
Được thích
11
- Khi viết code vba, tui sử dụng được hàm Trim nhưng tìm làm mãi mà không sử dụng được hàm Upper hay Lower
- Ví dụ tui tạo 1 function Test(svar:string). Trong code Test tui muốn đổi svar thành chữa hoa hết hay thành chữ thường hết thì phải viết code như thế nào ạ.
- Mong các bạn chỉ giúp. Chân thành cám ơn
 
- Khi viết code vba, tui sử dụng được hàm Trim nhưng tìm làm mãi mà không sử dụng được hàm Upper hay Lower
- Ví dụ tui tạo 1 function Test(svar:string). Trong code Test tui muốn đổi svar thành chữa hoa hết hay thành chữ thường hết thì phải viết code như thế nào ạ.
- Mong các bạn chỉ giúp. Chân thành cám ơn
Bạn thử dùng UCase(Text) và LCase(Text) xem sao!
 
Dử dụng hàm Date trong code vba

Bạn thử dùng UCase(Text) và LCase(Text) xem sao!

Các bạn làm ơn chỉ giúp Tôi cách sử dụng hàm Date(year,month,day) trong code vba.
Và cách kiểm tra 1 ngày có phải là ngày chủ nhật hay không?

VD: Trong 1 sub Test Tôi có nhu cầu kiểm tra 1 biến dtemp kiểu date có phải là ngày chủ nhật hay không, Tôi làm như sau:
Mã:
Dim dtemp as date
Dim scheck as string
 
dtemp= Date(2009,06,15)
if weekday(dtemp)=1 then
scheck = "OK" 'Ngày chủ nhật
else
scheck = "NOT OK" 'Không phải ngày CN
end if
Mong các bạn chỉ giúp
 
Chỉnh sửa lần cuối bởi điều hành viên:
Các bạn làm ơn chỉ giúp Tôi cách sử dụng hàm Date(year,month,day) trong code vba.
Và cách kiểm tra 1 ngày có phải là ngày chủ nhật hay không?

VD: Trong 1 sub Test Tôi có nhu cầu kiểm tra 1 biến dtemp kiểu date có phải là ngày chủ nhật hay không, Tôi làm như sau:
Dim dtemp as date
Dim scheck as string

dtemp= Date(2009,06,15)
if weekday(dtemp)=1 then
scheck = "OK" 'Ngày chủ nhật
else
scheck = "NOT OK" 'Không phải ngày CN
end if

Mong các bạn chỉ giúp
Ủa! Nhớ không lầm tôi trả lời rồi mà ta?
Làm vầy đây:
PHP:
Sub Test()
 Dim dtemp As Date, scheck As String
 dtemp = DateSerial(2009, 6, 15)
 If Weekday(dtemp) = 1 Then
   scheck = "OK"
  Else
   scheck = "NOT OK"
  End If
End Sub
Rút gọn lại:
PHP:
Sub Test()
 Dim dtemp As Date, scheck As String
 dtemp = DateSerial(2009, 6, 15)
 scheck = Choose(1 - (Weekday(dtemp) = 1), "NOT OK", "OK")
End Sub
Hoặc:
PHP:
Sub Test()
 Dim dtemp As Date, scheck As String
 dtemp = DateSerial(2009, 6, 15)
 scheck = IIf(Weekday(dtemp) = 1, "OK", "NOT OK")
End Sub
 
Lần chỉnh sửa cuối:
Ủa! Nhớ không lầm tôi trả lời rồi mà ta?

Đúng là bạn đã trả lời Mai rồi. Nhưng không biết sao, hôm qua chưa copy về máy mình mà sáng nay vào xem lại đề tài mình post và bạn reply hôm qua thì không thấy. Cám ơn bạn đã trả lời lại sớm giúp mình.

Nhân tiện bạn cho Mai hỏi mình làm sao để thấy được những function mà dùng trực tiếp luôn trong vba như: trim, ucase, lcase,... hả bạn. Vì mới tập viết macro trong excel nên Mai cần sự trợ giúp của những người đi trước. (tập viết khi đọc cuốn sách mà forum phát hành đó). Lần nữa cám ơn bạn nhiều.
 
Nhân tiện bạn cho Mai hỏi mình làm sao để thấy được những function mà dùng trực tiếp luôn trong vba như: trim, ucase, lcase,... hả bạn. Vì mới tập viết macro trong excel nên Mai cần sự trợ giúp của những người đi trước. (tập viết khi đọc cuốn sách mà forum phát hành đó). Lần nữa cám ơn bạn nhiều.
Bạn mở Excel lên, Bấm Alt + F11 rồi bấm F2 sẽ thấy toàn bộ các Function trong VBA
 
Mình làm sao để thấy được những function mà dùng trực tiếp luôn trong vba như: trim, ucase, lcase,... hả bạn.
Câu vầy do quen miệng mà nói thôi; Nhưng nó chưa chính xác đâu;

Những hàm mà bạn đề cập đó là những hàm của VBA; Và trong đó còn cơ mang nào là hàm

Những hàm đó có cái còn có thể dùng trong access, . . . .Khà,. . khà, . . .
 
Tô màu tự động ngày chủ nhật

Bạn mở Excel lên, Bấm Alt + F11 rồi bấm F2 sẽ thấy toàn bộ các Function trong VBA

- Khi tạo 1 bảng chấm công, có 1 vấn đề là cần tự động tô màu dữ liệu ngày chủ nhật để phục vụ cho việc tính 1 chỉ tiêu nào đó. Vì thế Tôi mong các bạn chỉ dẫn giúp Tôi 1 yêu cầu mà Tôi đã nêu rõ ràng trong file attached.
- Rất cảm ơn các bạn và mong nhận được sự chỉ dẫn
 

File đính kèm

- Khi tạo 1 bảng chấm công, có 1 vấn đề là cần tự động tô màu dữ liệu ngày chủ nhật để phục vụ cho việc tính 1 chỉ tiêu nào đó. Vì thế Tôi mong các bạn chỉ dẫn giúp Tôi 1 yêu cầu mà Tôi đã nêu rõ ràng trong file attached.
- Rất cảm ơn các bạn và mong nhận được sự chỉ dẫn
Nói thiệt, từ trước đến giờ chưa từng gặp bảng chấm công "kỳ lạ" như file này... Nhìn vào chẳng hiểu tô màu thế nào nữa!
Sao bạn không ghi ngày trong tháng thành 1 dòng, từ ngày 1 đến ngày cuối tháng mà lại chia thành 2 dòng thế kia? Nhìn khó hiểu quá
 
Bảng chấm công này mình gặp rồi; Thậm chí mình còn viết 1 hàm người dùng để tổng hợp công nữa cơ đấy!

Như yêu cầu thì căn cứ vô ngày tại [R1] & [AD1] mà viết macro cho bạn í thôi

Nhu cầu thực tiển là muôn hình vạn trạng mà! Khà, . . khà . . . .

To Tác giả Topic:
Sao bạn không hỏi tiếp trong topic trước đây mà hỏi ở đây vậy! Dễ bị MOD/SMOD tách ra lắm đó nha! Khi đó cũng phải tốn chút thời gian tìm đến nó!
 
Lần chỉnh sửa cuối:
Nói thiệt, từ trước đến giờ chưa từng gặp bảng chấm công "kỳ lạ" như file này... Nhìn vào chẳng hiểu tô màu thế nào nữa!
Sao bạn không ghi ngày trong tháng thành 1 dòng, từ ngày 1 đến ngày cuối tháng mà lại chia thành 2 dòng thế kia? Nhìn khó hiểu quá

- hihihi..., Form chấm công của Mai là như thế đó bạn ạ. Như ví dụ attached thì là dữ liệu chấm công từ 1/6/2009 đến 15/6/2009 nên các ô tô xám ám chỉ không phải là những ngày chấm công.
- Từ qua tời giờ Mai có hỏi bạn những function phục vụ cho việc tô màu này đó. Nhưng suy nghĩ vẫn chưa ra vì dòng bắt đầu cho table thì đã biết (là dòng 7), các cột thì giống nhau ở các sheet rồi, chỉ còn chưa xác định được dòng thứ mấy sẽ nằm bên trên dòng "GHI CHÚ" đó bạn ạ.
- Tiếp nữa Mai chưa biết gắn macro cho nút lệnh với tham số động (vùngchấm) đó bạn.
- Bạn suy nghĩ giúp Mai với. Mai cũng đang tiếp tục suy nghĩ cách làm.
- Cám ơn bạn đã hồi âm và mong bạn giúp.
 
- hihihi..., Form chấm công của Mai là như thế đó bạn ạ. Như ví dụ attached thì là dữ liệu chấm công từ 1/6/2009 đến 15/6/2009 nên các ô tô xám ám chỉ không phải là những ngày chấm công.
- Từ qua tời giờ Mai có hỏi bạn những function phục vụ cho việc tô màu này đó. Nhưng suy nghĩ vẫn chưa ra vì dòng bắt đầu cho table thì đã biết (là dòng 7), các cột thì giống nhau ở các sheet rồi, chỉ còn chưa xác định được dòng thứ mấy sẽ nằm bên trên dòng "GHI CHÚ" đó bạn ạ.
- Tiếp nữa Mai chưa biết gắn macro cho nút lệnh với tham số động (vùngchấm) đó bạn.
- Bạn suy nghĩ giúp Mai với. Mai cũng đang tiếp tục suy nghĩ cách làm.
- Cám ơn bạn đã hồi âm và mong bạn giúp.
Vậy nguyên lý là thế này, bạn xem có đúng không nhé:
1/ Trên dòng chữ "GHI CHÚ:" là dòng cuối của Table, dòng đầu là 7, cái này không khó.
2/ Tìm từ K7-> K... step 2, nếu Date(year(R1), month(R1),K7) có là chủ nhật thì tô 2 cột đó màu đỏ=> xác định cột. Thóat vòng lặp. => (cột + 7) *2 cũng màu đỏ.

Nếu đúng như vậy, bạn dùng thử code sau, nhớ là dước chữ "GHI CHÚ:" không có dữ liệu.
PHP:
Sub TestCN()
Dim iY As Long, iM As Long, iDate As Date, endR As Long
Dim i As Long, iD As Long
ActiveSheet.Select
endR = Cells(65000, 2).End(xlUp).Row
iY = Year(Range("R1")): iM = Month(Range("R1"))
For i = 0 To 6
  iD = Cells(7, 11 + (2 * i))
  iDate = DateSerial(iY, iM, iD)
  If Weekday(iDate) = 1 Then
    Range(Cells(7, 11 + (2 * i)), Cells(endR, 11 + (2 * i) + 1)).Font.ColorIndex = 3
    Range(Cells(7, 11 + (2 * i) + 14), Cells(endR, 11 + (2 * i) + 1 + 14)).Font.ColorIndex = 3
    Exit For
  End If
Next

End Sub
 
Lần chỉnh sửa cuối:
Vậy nguyên lý là thế này, bạn xem có đúng không nhé:
1/ Trên dòng chữ "GHI CHÚ:" là dòng cuối của Table, dòng đầu là 7, cái này không khó.

- Bạn cho Mai hỏi bạn xác định số dòng như thế nào (số dòng từ dòng 7 đến dòng trước dòng Ghi chú). Vì Mai hiểu bạn tô màu trong vòng For 1..6. Nhưng mà số người trong mỗi bảng chấm công là khác nhau nên Mai chưa thấy lệnh bạn xác định số dòng.
- Mới xem qua và hiểu vậy. Nếu chưa đúng mong bạn chỉ giáo. Cám ơn bạn đã hồi âm nhanh.
 
Code của ThuNghi chưa xóa kết quả tô màu lần trước (tháng hay kỳ trước);
Macro sự kiện của mình đây, xin cho í kiến:
PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, [r1]) Is Nothing Then
   Dim Dat As Date:              Dim Rng As Range
   Dim BDau As Byte, jJ As Byte, eR As Byte
   
   Dat = Target.Value:           eR = [C65500].End(xlUp).Row
   Range([k7], Cells(eR, "AP")).Font.ColorIndex = 0
   BDau = IIf(Day(Dat) = 1, 0, 15)
   Set Rng = IIf(Day(Dat) = 1, [k7], [k8])
   For jJ = 1 To 16
      If Weekday(DateSerial(Year(Dat), Month(Dat), jJ + BDau)) = 1 Then
         [k9].Offset(, 2 * jJ - 2).Resize(eR, 2).Font.ColorIndex = 3
         Rng.Offset(, 2 * jJ - 4).Resize(, 2).Font.ColorIndex = 3
      End If
   Next jJ
 End If
End Sub
 
Nhớ là trước dòng chữ "GHI CHÚ:" phải là 1 dòng trống, không có dữ liệu. (1)
PHP:
Sub TestCN()
Dim iY As Long, iM As Long, iDate As Date, endR As Long
Dim i As Long, iD As Long
ActiveSheet.Select
endR = Cells(65000, 2).End(xlUp).Row
Range([k7], Cells(endR, "AP")).Font.ColorIndex = 0 (2)
iY = Year(Range("R1")): iM = Month(Range("R1"))
For i = 0 To 6
  iD = Cells(7, 11 + (2 * i))
  iDate = DateSerial(iY, iM, iD)
  If Weekday(iDate) = 1 Then
    Range(Cells(7, 11 + (2 * i)), Cells(endR, 11 + (2 * i) + 1)).Font.ColorIndex = 3
    Range(Cells(7, 11 + (2 * i) + 14), Cells(endR, 11 + (2 * i) + 1 + 14)).Font.ColorIndex = 3
    Exit For
  End If
Next 
End Sub

-Tối về đem bài bạn chỉ dẫn cho Mai suy nghĩ và đã hiểu được endR là dòng thứ mấy trước dòng Ghi chú. (dòng chữ đỏ (1) là bạn chú ý Mai phải có điều kiện như vậy đúng không?).
- Như bạn HYEN17 chỉ dẫn Mai bên dưới nên mạn phép bạn thêm dòng lệnh (2) vào code của bạn. vì trước khi tô màu ngày CN của 1 kỳ thì set lại màu default (ở vd là đen) của range(K7:APendR).
- Do mới tập viết macro nên mong bạn giải thích rõ hơn giúp Mai dòng lệnh
endR = Cells(65000, 2).End(xlUp).Row (nhất là vế sau dấu =).
- Một lần nữa cảm ơn bạn đã chỉ dẫn.
 
To Tác giả Topic:
Sao bạn không hỏi tiếp trong topic trước đây mà hỏi ở đây vậy! Dễ bị MOD/SMOD tách ra lắm đó nha! Khi đó cũng phải tốn chút thời gian tìm đến nó!

Cám ơn bạn đã nhắc nhở. Vì liên tục phía trên Mai hỏi và được trả lời về cách dùng hàm trong vba để xác định ngày chủ nhật nên mới post bài này ở đây luôn bạn.
Xin nhận khuyết điểm và sẽ khắc phục trong bài toán khác.
Chào bạn
 
Code của ThuNghi chưa xóa kết quả tô màu lần trước (tháng hay kỳ trước);
Macro sự kiện của mình đây, xin cho í kiến:
[/php]

- Vâng, bạn giải bài toán Mai bằng 1 macro event rất hay nhưng Mai muốn macro được gắn với nút lệnh ở mỗi sheet bạn ạ.
- Và Mai đã dùng macro của ThuNghi chỉ dẫn chỉ thêm dòng lệnh set về màu default trước khi tô đỏ ngày CN do bạn lưu ý.
- Chân thành cảm ơn chỉ dẫn của bạn. Chào bạn nhe.
 
- Vâng, bạn giải bài toán Mai bằng 1 macro event rất hay nhưng Mai muốn macro được gắn với nút lệnh ở mỗi sheet bạn ạ.
- Chân thành cảm ơn chỉ dẫn của bạn. Chào bạn nhe.

Nhưng macro sự kiện của mình thậm chí không cần gắn vào nút lệnh nào hết; Nó chỉ cần:

(*) Được chép vô tất cả các trang tính nào chứa bảng chấm công các tổ.
Điều này có thể được cải tiến để các macro này chỉ gồm là 1 dòng lệnh để cùng gọi 1 macro chung thực thị việc tô màu.

(*) Chỉ cần nhập ngày bắt đầu vô [R1] (Đó hoặc là MM/01/200y hay MM/16/200y mà thôi) Thì macro sẽ tô ngay màu của trang tính đó.

Chúc vui! :-=
 
-Tối về đem bài bạn chỉ dẫn cho Mai suy nghĩ và đã hiểu được endR là dòng thứ mấy trước dòng Ghi chú. (dòng chữ đỏ (1) là bạn chú ý Mai phải có điều kiện như vậy đúng không?).
Sorry, sau dòng có chữ "Ghi chú", do minh ghi nhầm.
Nghĩa là khi ở dòng 65000 mà nhấn end(up) thì sẽ đến dòng có chữ trên.
Do muốn đơn giản, còn không tìm trong Cột B dòng nào có chữ "Ghi chú" thì cũng không khó mấy. Mai thử làm 1 macro, chọn cột B và nhấn Ctr F, tìm chữ "Ghi chú" thì sẽ thấy PP Find() có ứng dụng ở chỗ này.
 
Sorry, sau dòng có chữ "Ghi chú", do minh ghi nhầm.

Sao kỳ quá bạn ơi, Mai post lại bài tomaucn nè (sau khi đã gắn macro cho nút lệnh) nhưng tô không đúng bạn ơi.
Như tháng 6/2009 thì các ngày 7,14,21,28 là ngày cn mà nó tô các ngày 7,14,22,29 (sheet To1) còn ở sheet To2 thì tô kỳ quá.
Bạn ơi coi giúp mình với
 

File đính kèm

Web KT

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

Back
Top Bottom