Hỏi cách đổi tên Module

Liên hệ QC

alibaba2209

Thành viên thường trực
Tham gia
4/12/10
Bài viết
283
Được thích
13
làm sao để đổi được tên của vba nhỉ, bạn nào biết hướng dẫn mình với.. xin cảm ơn!
 
làm sao để đổi được tên của vba nhỉ, bạn nào biết hướng dẫn mình với.. xin cảm ơn!

Tại cửa sổ của VBA bạn vào View chọn Properties Window (hoặc ấn phím F4) sau đó 1 cửa sổ mới hiện lên. Bạn chỉ cần click chooutj vào chữ name rồi đánh tên module bạn muốn vào là ok
 
Lần chỉnh sửa cuối:
Upvote 0
làm sao để đổi được tên của vba nhỉ, bạn nào biết hướng dẫn mình với.. xin cảm ơn!
Bạn muốn đổi tên Module trong VBA bằng VBA?
Bạn có thể thử code sau:
[GPECODE=vb]
Sub ReNameMod(Mod_Old_Name As String, Mod_New_Name As String)
Dim VBACom As VBComponent
On Error GoTo MyExit
For Each VBACom In ThisWorkbook.VBProject.VBComponents
If VBACom.Name = Mod_Old_Name Then VBACom.Name = Mod_New_Name
Next
MyExit:
Set VBACom = Nothing
End Sub[/GPECODE]
Lưu ý: vào Tool/Reference chọn tích vào "Microsoft Visual Basic for Applications Extensibility x.x"
 
Upvote 0
Bạn muốn đổi tên Module trong VBA bằng VBA?
Bạn có thể thử code sau:
[GPECODE=vb]
Sub ReNameMod(Mod_Old_Name As String, Mod_New_Name As String)
Dim VBACom As VBComponent
On Error GoTo MyExit
For Each VBACom In ThisWorkbook.VBProject.VBComponents
If VBACom.Name = Mod_Old_Name Then VBACom.Name = Mod_New_Name
Next
MyExit:
Set VBACom = Nothing
End Sub[/GPECODE]
Lưu ý: vào Tool/Reference chọn tích vào "Microsoft Visual Basic for Applications Extensibility x.x"
thanks you! hay quá....
 
Upvote 0
Bạn muốn đổi tên Module trong VBA bằng VBA?
Bạn có thể thử code sau:
[GPECODE=vb]
Sub ReNameMod(Mod_Old_Name As String, Mod_New_Name As String)
Dim VBACom As VBComponent
On Error GoTo MyExit
For Each VBACom In ThisWorkbook.VBProject.VBComponents
If VBACom.Name = Mod_Old_Name Then VBACom.Name = Mod_New_Name
Next
MyExit:
Set VBACom = Nothing
End Sub[/GPECODE]
Lưu ý: vào Tool/Reference chọn tích vào "Microsoft Visual Basic for Applications Extensibility x.x"
Đổi kiểu này cũng có nhiều bất cập, riêng tôi thì không dùng code mà chỉ dùng Find & Replace để đổi thôi. Tôi đưa ra ví dụ như sau:

Mã:
Sub RunMyMacro()
    Call MyMacro
End Sub


Sub MyMacro()
    MsgBox "Nghia Dep Trai"
End Sub

Như thế, bất kỳ cái Sub nào có chạy macro MyMacro thì sẽ đều báo lỗi (vì tên của "nhân vật chính" bị thay đổi).

Tôi sẽ làm như sau:

Chọn vào Tên Macro cần thay đổi rồi bấm Ctrl+H để ra hộp thoại Replace & Find.

Tại Replace with tôi gõ tên cần thay đổi

Sau đó tôi check vào nút Current Project (tất cả các module của ThisWorkbook), cuối cùng tôi click vào nút Replace All. Như thế, tôi đã hoàn tất việc chuyển đổi tên hay bất cứ chuỗi gì tôi muốn thay đổi.
 

File đính kèm

  • Picture1.jpg
    Picture1.jpg
    43 KB · Đọc: 103
Upvote 0
Đổi kiểu này cũng có nhiều bất cập, riêng tôi thì không dùng code mà chỉ dùng Find & Replace để đổi thôi. Tôi đưa ra ví dụ như sau:

Mã:
Sub RunMyMacro()
    Call MyMacro
End Sub


Sub MyMacro()
    MsgBox "Nghia Dep Trai"
End Sub

Như thế, bất kỳ cái Sub nào có chạy macro MyMacro thì sẽ đều báo lỗi (vì tên của "nhân vật chính" bị thay đổi).

Tôi sẽ làm như sau:

Chọn vào Tên Macro cần thay đổi rồi bấm Ctrl+H để ra hộp thoại Replace & Find.

Tại Replace with tôi gõ tên cần thay đổi

Sau đó tôi check vào nút Current Project (tất cả các module của ThisWorkbook), cuối cùng tôi click vào nút Replace All. Như thế, tôi đã hoàn tất việc chuyển đổi tên hay bất cứ chuỗi gì tôi muốn thay đổi.

Người ta đổi tên MODULE chứ có phải đổi tên Sub đâu mà Find & Replace
----------------------------------
Bạn muốn đổi tên Module trong VBA bằng VBA?
Bạn có thể thử code sau:
[GPECODE=vb]
Sub ReNameMod(Mod_Old_Name As String, Mod_New_Name As String)
Dim VBACom As VBComponent
On Error GoTo MyExit
For Each VBACom In ThisWorkbook.VBProject.VBComponents
If VBACom.Name = Mod_Old_Name Then VBACom.Name = Mod_New_Name
Next
MyExit:
Set VBACom = Nothing
End Sub[/GPECODE]
Lưu ý: vào Tool/Reference chọn tích vào "Microsoft Visual Basic for Applications Extensibility x.x"
Chỉ cần thế này thì khỏi check Tool/Reference gì ráo:
Mã:
Sub ReNameMod(Mod_Old_Name As String, Mod_New_Name As String)
  On Error Resume Next
  ThisWorkbook.VBProject.VBComponents(Mod_Old_Name).Name = Mod_New_Name
End Sub
Ví dụ áp dụng
Mã:
Sub Test()
    ReNameMod "Module1", "ndu"
End Sub
 
Upvote 0
Người ta đổi tên MODULE chứ có phải đổi tên Sub đâu mà Find & Replace
----------------------------------

Chỉ cần thế này thì khỏi check Tool/Reference gì ráo:
Mã:
Sub ReNameMod(Mod_Old_Name As String, Mod_New_Name As String)
  On Error Resume Next
  ThisWorkbook.VBProject.VBComponents(Mod_Old_Name).Name = Mod_New_Name
End Sub
Ví dụ áp dụng
Mã:
Sub Test()
    ReNameMod "Module1", "ndu"
End Sub
Hình như muốn thay đổi mấy cái Project này phải check vào Trust Center gì đó mới cho chạy phải không Thầy?
 
Upvote 0
Hình như muốn thay đổi mấy cái Project này phải check vào Trust Center gì đó mới cho chạy phải không Thầy?

Ai biết đâu! Thử thấy hổng được thì.. la lên.. lại hướng dẫn tiếp...
Nhưng mà... bị vì ở trên người ta có nói thanh kiu
nên chắc là biết làm goài
Ẹc... Ẹc...
(Nếu chỉ Thanh kiu chơi cho vui thì..ráng chịu vậy) --=0
---------------------------------
[h=2]Hỏi cách đổi tên Module[/h]
Hỏi ngược lại chủ topic cái: Bạn có thể cho biết bạn cần đổi tên Module để làm cái gì không?
 
Lần chỉnh sửa cuối:
Upvote 0
Ai biết đâu! Thử thấy hổng được thì.. la lên.. lại hướng dẫn tiếp...
Nhưng mà... bị vì ở trên người ta có nói thanh kiu

nên chắc là biết làm goài
Ẹc... Ẹc...
(Nếu chỉ Thanh kiu chơi cho vui thì..ráng chịu vậy) --=0
---------------------------------

Hỏi ngược lại chủ topic cái: Bạn có thể cho biết bạn cần đổi tên Module để làm cái gì không?

Vâng thưa thầy! mình add lệnh vào 1 file ảnh, alt+f8 hay tạo ra 1 form control rồi gán macros thì cũng chỉ để thực thi câu lệnh, e có nhiều module nên đặt tên để khi mình vào muốn tùy biến gì nhìn nó sẽ nhanh hơn giống như là đặt tên cho em.. e đang dùng theo cách của bạn Phuongvietphong là thấy ổn.. còn các cách khác cũng hay em cũng thử cho biết thôi.. cảm ơn lòng nhiệt huyết của các bạn..
Trước kia e làm 1 công việc mất 1h còn giờ đây e làm chỉ mất có 10 phút << 50' còn lại có thời gian em sẽ mời các anh 1 ly cafe!
 
Upvote 0
Các anh chị làm ơn cho hỏi: Có cách nào hoán đổi tên biến được không? Ví dụ mình có 5 biến mVarial1, mVarial2, mVarial3, mVarial4, mVarial5... thay vì phải dùng lệnh DIM cho từng biến 1 thì mình dùng For... Next để khai biến và gán giá trị.
Hoặc trường hợp: Tên các biến mình đưa vào 1 cột trong sheet "CODE" chẳng hạn, mình sẽ quét cột có tên biến để mình DIM... thì có làmđược không?
Trân trọng!
 
Upvote 0
khai báo có 1 lần xài tới cuối cuộc đời mà cũng vẻ nhiều thế nhỉ ... quả là chuyện đời khó nói ... nhọc ghê :p ===\.
 
Upvote 0
Các anh chị làm ơn cho hỏi: Có cách nào hoán đổi tên biến được không? Ví dụ mình có 5 biến mVarial1, mVarial2, mVarial3, mVarial4, mVarial5... thay vì phải dùng lệnh DIM cho từng biến 1 thì mình dùng For... Next để khai biến và gán giá trị.
Hoặc trường hợp: Tên các biến mình đưa vào 1 cột trong sheet "CODE" chẳng hạn, mình sẽ quét cột có tên biến để mình DIM... thì có làmđược không?
Trân trọng!
Bạn hãy đính kèm tập tin đã giải quyết xong bằng code với 5 biến kia. Lúc đó thì người khác mới biết, thực sự bạn muốn gì.
 
Upvote 0
.... để khai biến và gán giá trị.
VBA không cho khai biến và gán giá trị cùng một luc. Chấm hết.

Lười biếng khai từng biến thì cứ vệc khai chúng một lần trong một cái mảng.
Dim bienCaCum(1 To 5)
bienCaCum(1) chẳng khác bienCaCum1 là mấy.

Nói cho cùng thì:
1. cái tư tưởng khai báo cả cụm là từ căn bản nó đã đi sai lý do tại sao phải khai báo biến.
2. cái tư tưởng khai báo biến bằng lệnh chạy code nó phá vỡ rào ngăn giữa lệnh dẫn trình dịch và lệnh chạy code.
Dim là lệnh dẫn trình dịch. Nó bảo trình dịch lập biến.
For-Next là lệnh chạy code. Trình dịch dịch lệnh thành mã CPU và chạy.
 
Upvote 0
Lười biếng khai từng biến thì cứ vệc khai chúng một lần trong một cái mảng.
Có thể "gộp" vào mảng khi 5 biến có tính chất nào đó chung, về mặt lôgíc chúng là "tương đương". Lúc đó "gộp" sẽ giúp code ngắn gọn, lôgíc. Còn cứ có 5 biến bất kỳ mà gộp vào mảng thì chỉ làm code thêm rắc rối, không có chút lợi nào.

Vd. như có code
Mã:
Sub test()
Dim z1 As Long, z2 As String, z3 As Boolean, z4 As Date, z5 As Range
    With Sheet1
        z1 = .Range("A1").Value
        z2 = .Range("C1").Value
        z3 = .Range("B1").Value > .Range("A1").Value
        If .Range("D1").Value < DateSerial(2020, 1, 1) Then
            z4 = Date
        Else
            z4 = .Range("D1").Value
        End If
        Set z5 = .Range(z2).Offset(Abs(z1))
        If z3 Then
            z5(1).Value = z4
        Else
            z5(1).Value = 1
        End If
    End With
End Sub

Nếu bây giờ khai báo Dim mang(1 To 5) thì cũng được thôi. Nhưng cũng chả lợi thêm được gì, còn "tồi" hơn so với khai báo 5 biến. Khai báo thế nào cũng được thôi. Nhưng phải dễ hiểu, có lôgíc. Vì thế mà tôi yêu cầu đính kèm tập tin đã giải quyết xong với code dùng 5 biến. Lúc đó mới có lời khuyên cụ thể được.
 
Upvote 0
...
Nếu bây giờ khai báo Dim mang(1 To 5) thì cũng được thôi. Nhưng cũng chả lợi thêm được gì, còn "tồi" hơn so với khai báo 5 biến. Khai báo thế nào cũng được thôi. Nhưng phải dễ hiểu, có lôgíc. Vì thế mà tôi yêu cầu đính kèm tập tin đã giải quyết xong với code dùng 5 biến. Lúc đó mới có lời khuyên cụ thể được.
Đương nhiên là TỒI rồi. Khai báo "gộp" là tự phản lại lý do tại sao phải khai báo:

- Nếu biến có kiểu hoặc nhiệm vụ khác nhau thì dùng một loạt tên gần nhau là chơi dại. Ví dụ ta có thể khai báo hằng loạt
For i = 1 To 100
Dim "mVariable" & i As SomeType
Next
Ai đọc hiểu nổi mVarriabel1, mVariable2, ... là cái gì? Thà bỏ quách cái Option Explicit cho yên chuyện.

- Nếu biến có kiểu và nhiệm vụ giống nhau thì nó chính là mảng.
 
Upvote 0
Web KT

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

Back
Top Bottom