Cho mình hỏi cách sử dụng macro này ?

  • Thread starter Thread starter Blad01
  • Ngày gửi Ngày gửi
Liên hệ QC

Blad01

Thành viên thường trực
Tham gia
6/10/07
Bài viết
350
Được thích
28
Mình chưa biết chút gì về maco, nay lại tìm được một maco này thất rất hữu dụng với mình mong các bạn chỉ giúp mình làm thể nào để có thể sử dụng nó (đây là maco dùng để chuyển chữ hoa đầu một từ. VD: công tằng tôn nữ --> Công Tằng Tôn Nữ):
Mã:
Function ProperUni(chuoi As String) As String
chuoi = " " & Application.WorksheetFunction.Trim(LCase(chuoi))
stt = Len(chuoi)
If stt > 1 Then
  Do
    stt = InStrRev(chuoi, " ", stt)
    Mid(chuoi, stt + 1, 1) = UCase(Mid(chuoi, stt + 1, 1))
    stt = stt - 1
  Loop While stt > 0
  ProperUni = Mid(chuoi, 2)
End If
End Function
1. Mình có một file excell gồm rất nhiều sheet nay mình muốn maco này chỉ có tác dụng trên sheet có tên là: DSHS mà thôi. các bạn hướng dẫn chi tiết giúp mình với nhé vì mình loay hoay thử cả ngày rồi mà nó không được hix...hix...
2. Cho mình hỏi thêm một câu nữa: Mình làm một chương trình tính điểm trung bình môn, từ cột họ và tên đến điểm trung bình cả năm nó cách xa nhau một khoảng rất lớn (VD: từ cột B là cột họ và tên --> cột AR cột điểm TBCN), vì thế mình muốn có một maco hiện mầu để gióng hàng mỗi khi người sử dụng chọn bất kì một học sinh nào hay hàng nào là hàng đó sẽ hiện màu giúp cho người sử dụng có thể quan sát điểm của em học sinh đó được dễ dàng hơn.
Tôi xin chân thành cảm ơn !

-----------
Bạn ơi, macro chứ không phải là maco
Sửa dùm bạn tên tiêu đề rồi, còn trong bài thì bạn tự sửa lại nhé.
 
Bạn ấn Alt + F11 rồi dán đoạn code này vào ThisWorkbook, sau đó bạn quay lại Excel gõ =ProperUni(ô cần chuyến)
Ví dụ: ở ô A1 là công tằng tôn nữ thì B1 bạn gõ =ProperUni(A1), bạn sẽ có kết quả ở B1 là Công Tằng Tôn Nữ
 
Mình chưa biết chút gì về maco, nay lại tìm được một maco này thất rất hữu dụng với mình mong các bạn chỉ giúp mình làm thể nào để có thể sử dụng nó (đây là maco dùng để chuyển chữ hoa đầu một từ. VD: công tằng tôn nữ --> Công Tằng Tôn Nữ):
Mã:
Function ProperUni(chuoi As String) As String
chuoi = " " & Application.WorksheetFunction.Trim(LCase(chuoi))
stt = Len(chuoi)
If stt > 1 Then
  Do
    stt = InStrRev(chuoi, " ", stt)
    Mid(chuoi, stt + 1, 1) = UCase(Mid(chuoi, stt + 1, 1))
    stt = stt - 1
  Loop While stt > 0
  ProperUni = Mid(chuoi, 2)
End If
End Function
1. Mình có một file excell gồm rất nhiều sheet nay mình muốn maco này chỉ có tác dụng trên sheet có tên là: DSHS mà thôi. các bạn hướng dẫn chi tiết giúp mình với nhé vì mình loay hoay thử cả ngày rồi mà nó không được hix...hix...
2. Cho mình hỏi thêm một câu nữa: Mình làm một chương trình tính điểm trung bình môn, từ cột họ và tên đến điểm trung bình cả năm nó cách xa nhau một khoảng rất lớn (VD: từ cột B là cột họ và tên --> cột AR cột điểm TBCN), vì thế mình muốn có một maco hiện mầu để gióng hàng mỗi khi người sử dụng chọn bất kì một học sinh nào hay hàng nào là hàng đó sẽ hiện màu giúp cho người sử dụng có thể quan sát điểm của em học sinh đó được dễ dàng hơn.
Tôi xin chân thành cảm ơn !

-----------
Bạn ơi, macro chứ không phải là maco
Sửa dùm bạn tên tiêu đề rồi, còn trong bài thì bạn tự sửa lại nhé.

bạn mở file cần sử dụng
Nhấn Alt+F11 để mở phần soạn thảo VBA
Vào Insert \ Module
Copy đoạn mã này
Mã:
Function ProperUni(chuoi As String) As String
chuoi = " " & Application.WorksheetFunction.Trim(LCase(chuoi))
stt = Len(chuoi)
If stt > 1 Then
  Do
    stt = InStrRev(chuoi, " ", stt)
    Mid(chuoi, stt + 1, 1) = UCase(Mid(chuoi, stt + 1, 1))
    stt = stt - 1
  Loop While stt > 0
  ProperUni = Mid(chuoi, 2)
End If
End Function
quay về Excel, chọn sheet cần dùng
giả sử cell A1 có nội dung: công tằng tôn nữ
cell B1 bạn nhập công thức = ProperUni(A1) rồi Enter -> xem kết quả (Công Tằng Tôn Nữ)
tương tự như vậy bạn sẽ thấy cách swr dụng rất dơn giản thôi mà
 
1*/ Các bạn trên đã trả lời phần 1 câu 1;
2*/ Để chỉ xài hàm trong sheets("DSHS") thì bạn thêm dòng lệnh mang số 2 dưới đây;
3*/ Mình có sửa lại nội dung hàm một tẹo.
PHP:
Option Explicit

Function ProperUni(Chuoi As String) As String
1 Dim Stt As Integer, Vtr As Integer
 
2 If ActiveSheet.Name <> "DSHS" Then Exit Function
 
Chuoi = Application.WorksheetFunction.Trim(LCase(Chuoi)) & " "
Chuoi = UCase(Left(Chuoi, 1)) & Mid(Chuoi, 2)
Stt = Len(Chuoi):               Vtr = 1
If Stt > 1 Then
  Do
    Stt = InStr(Vtr, Chuoi, " ")
    If Stt > 0 Then
        Chuoi = Left(Chuoi, Stt) & UCase(Mid(Chuoi, Stt + 1, 1)) & Mid(Chuoi, Stt + 2)
        Vtr = Stt + 1
    Else
        Exit Do
    End If
  Loop
  ProperUni = Chuoi
End If
End Function
 
Cảm ơn các bạn nhiều lắm. Nhưng mình cứ nghĩ rằng dùng maco là có thể làm cho các chữ như công tằng tôn nữ chuyển ngay sang thành Công Tằng Ton Nữ. Chứ sau khi ghi maco rồi mà còn phải quay lại đánh một dòng lệnh dài thế kia "= ProperUni(A1)" thì mình dùng hàm =ProPer trong excel có phải nhanh hơn ko (hoặc đánh trực tiếp). Không có cách nào để nó tự động chuyển đổi sao ??? VD: Bạn gõ công tàng tôn nữ và ô A1 thì nó lập tức chuyển thành Công Tằng Tôn Nữ.
Chân trọng cảm ơn !.
 
Cảm ơn các bạn nhiều lắm. Nhưng mình cứ nghĩ rằng dùng maco là có thể làm cho các chữ như công tằng tôn nữ chuyển ngay sang thành Công Tằng Ton Nữ. Chứ sau khi ghi maco rồi mà còn phải quay lại đánh một dòng lệnh dài thế kia "= ProperUni(A1)" thì mình dùng hàm =ProPer trong excel có phải nhanh hơn ko (hoặc đánh trực tiếp). Không có cách nào để nó tự động chuyển đổi sao ??? VD: Bạn gõ công tàng tôn nữ và ô A1 thì nó lập tức chuyển thành Công Tằng Tôn Nữ.
Chân trọng cảm ơn !.
Bạn có thể sửa chữ ProperUni thành từ gì cũng được (chủ yếu là ngắn gọn và dễ nhớ và không được trùng tên các hàm) nhưng nhớ là phải sửa ở trong code
Còn bạn muốn gõ tên xong ra chữ ngay thì bạn cứ đặt công thức trước rồi gõ danh sách sau
 
Có lẽ Blad01 muốn khi gỏ tại cell A1 tên công tằng tôn nử, thì sau khi Enter A1 sẽ là Công Tằng Tôn Nử ngay.
 
Có lẽ Blad01 muốn khi gỏ tại cell A1 tên công tằng tôn nử, thì sau khi Enter A1 sẽ là Công Tằng Tôn Nử ngay.

hic hic hic
  1. Hỏi cách sử dụng đoạn code đó, bi giờ biết dùng rồi thì lại đổi ý. Thật là chẳng biết đâu mà chiều.
  2. Ai có thể giúp thì tiếp tục nha, mình còn phải học hỏi thêm may ra mới có thể giúp được
 
Nguyên văn bởi Blad01
Bạn gõ công tàng tôn nữ và ô A1 thì nó lập tức chuyển thành Công Tằng Tôn Nữ.
Muốn như thế phải biến đổi hàm thành sub và dùng sự kiện Worksheet_Change. Bạn mở cửa sổ code của sheet DSHS chép đoạn code sau vào. Tên của học sinh phải ở cột B. Nếu muốn thay đổi, chỉnh lại trong code:
Mã:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim chuoi As String
Dim stt As Byte
If Not Intersect(Target, Range("B:B")) Is Nothing Then
chuoi = Target
chuoi = " " & Application.WorksheetFunction.Trim(LCase(chuoi))
stt = Len(chuoi)
  If stt > 1 Then
    Do
      stt = InStrRev(chuoi, " ", stt)
      Mid(chuoi, stt + 1, 1) = UCase(Mid(chuoi, stt + 1, 1))
      stt = stt - 1
    Loop While stt > 0
    Target = Mid(chuoi, 2)
  End If
End If
End Sub
 
hic hic hic
  1. Hỏi cách sử dụng đoạn code đó, bi giờ biết dùng rồi thì lại đổi ý. Thật là chẳng biết đâu mà chiều.
  2. Ai có thể giúp thì tiếp tục nha, mình còn phải học hỏi thêm may ra mới có thể giúp được
Sorry bạn nha ! Vì khi chưa biết sử dụng thì mình cứ nghĩ rằng nếu dùng macro trên thì sau khi chép tên và Enter là nó sẽ tự động chuyển đổi ngay ai ngờ lại phải lắm thủ tục thế. Vì vậy mình mới có những thắc mắc về sau nay.
Thông cảm cho mình mới làm quen với macro nha.

"Kiến thức là biển cả. Có cái mình phải học người khác nhưng cũng có cái người khác phải học mình".
 
Muốn như thế phải biến đổi hàm thành sub và dùng sự kiện Worksheet_Change. Bạn mở cửa sổ code của sheet DSHS chép đoạn code sau vào. Tên của học sinh phải ở cột B. Nếu muốn thay đổi, chỉnh lại trong code:
Mã:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim chuoi As String
Dim stt As Byte
If Not Intersect(Target, Range("B:B")) Is Nothing Then
chuoi = Target
chuoi = " " & Application.WorksheetFunction.Trim(LCase(chuoi))
stt = Len(chuoi)
  If stt > 1 Then
    Do
      stt = InStrRev(chuoi, " ", stt)
      Mid(chuoi, stt + 1, 1) = UCase(Mid(chuoi, stt + 1, 1))
      stt = stt - 1
    Loop While stt > 0
    Target = Mid(chuoi, 2)
  End If
End If
End Sub
voda ơi mình đã làm theo macro của bản nhưng khi chạy macro đó thì nó thông báo lỗi như sau (mời bạn xem hình), vậy mình phải khắc phục nó như thế nào vậy ??? Mong bạn hướng dẫn giúp mình vơi.
Chân trong cảm ơn !
 
Lần chỉnh sửa cuối:
Tôi test thấy bình thường mà ta..
Hay bạn thêm vào 1 đoạn code nữa thế này xem nhé:
Mã:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim chuoi As String
Dim stt As Byte
[B][COLOR=red]On Error Resume Next[/COLOR][/B]
If Not Intersect(Target, Range("B:B")) Is Nothing Then
...................
.................
End Sub
Chổ đánh dấu màu đỏ ấy!
 
Tôi test thấy bình thường mà ta..
Hay bạn thêm vào 1 đoạn code nữa thế này xem nhé:
Mã:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim chuoi As String
Dim stt As Byte
[B][COLOR=red]On Error Resume Next[/COLOR][/B]
If Not Intersect(Target, Range("B:B")) Is Nothing Then
...................
.................
End Sub
Chổ đánh dấu màu đỏ ấy!
Cảm ơn bạn nhiều lắm không còn lỗi đó nữa rồi.
Thanks ! Thanks !
 
Web KT

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

Back
Top Bottom