Hỏi nhanh - Đáp nhanh về macro (dành cho các thành viên mới học lập trình)

Liên hệ QC

tuananhya2

Thành viên mới
Tham gia
18/8/12
Bài viết
8
Được thích
0
Co ai chỉ dùm cách tạo pass marco với
 
Cho em hỏi có cách nào khi người dùng save file, thì sẽ tự động chạy 1 macro mình đã viết sẵn không. Tưng tự như "Sub Auto open" khi file được mở ra sẽ chạy 1 macro đã viết sẵn. Thanks
 
Upvote 0
Cho em hỏi có cách nào khi người dùng save file, thì sẽ tự động chạy 1 macro mình đã viết sẵn không. Tưng tự như "Sub Auto open" khi file được mở ra sẽ chạy 1 macro đã viết sẵn. Thanks

Đó là Sub Auto_Close bạn à ---> Sẽ tự chạy khi đóng file
 
Upvote 0
sao khi tải bài mẫu về thì không chạy macro được nhi?
p/s:chắc có lẽ vì dốt quá nên mới thế.nhưng cũng phải hỏi cho sáng cái đầu ra!
 
Upvote 0
Cho mình hỏi một vấn đề như sau :
- Mình có một mảng Arr chứa các thông tin --> bh mình muốn đưa toàn bộ dữ liệu mảng này xuống vùng [A1 :A1000] dưới dạng comment
---> có cách nào không dùng vòng lặp for để thực hiện việc trên không <---------- hôm qua mình dùng vòng for thấy tốc độ không ổn cho lắm cụ thể code mình như sau :

[GPECODE=vb]Sub AddComment(rng As Range, str As String)
With rng
.ClearComments
.AddComment str
.Comment.Shape.AutoShapeType = 1
With .Comment.Shape.TextFrame
.Characters(InStr(str, "Name :"), 6).Font.Bold = 1
.Characters.Font.Size = 9
.AutoSize = 1
End With
.Comment.Visible = 0
End With
End Sub[/GPECODE]
và đây là câu lệnh được trích ra từ sub main :
[GPECODE=vb]
For Each mycell In [A1:A1000]
AddComment mycell, Cstr(Arr(i))
Next
[/GPECODE]

Cho em hỏi là trong excel có lệnh nào mà gán 1 nhát xuống sheet hết các comment kiểu như là [A1:A1000] = Arr không ? -+*/

----> Cảm ơn mọi người đã dành thời gian đọc bài viết của mình !
 
Lần chỉnh sửa cuối:
Upvote 0
Cho mình hỏi một vấn đề như sau :
- Mình có một mảng Arr chứa các thông tin --> bh mình muốn đưa toàn bộ dữ liệu mảng này xuống vùng [A1 :A1000] dưới dạng comment
---> có cách nào không dùng vòng lặp for để thực hiện việc trên không
Cho em hỏi là trong excel có lệnh nào mà gán 1 nhát xuống sheet hết các comment kiểu như là [A1:A1000] = Arr không ? -+*/
Nếu bạn tìm được cách nào đó mà bằng tay làm được thao tác gán comment 1 lượt thì code sẽ làm được
Suy nghĩ xem!
Nếu suy nghĩ không ra nghĩa là KHÔNG CÓ CÁCH
Vậy thôi
 
Upvote 0
mình đang tập viết những ứng dụng nhỏ phục vu cho công việc nhưng găp những vướng mắc nhờ mọi người giúp đỡ, mình nói qua những cái mình đã làm
1. Lập được uerform (đã làm được)
2. Bây giờ mình muốn từ 1 cell bất kỳ của cột đã định trước cột (cột B) chỉ khi nào ấn ENTER là gọi userform lên làm việc (form này có listbox chứa sắn dữ liệu) bây giờ mình muốn là chọn xong dữ liệu thì form tắt đồng thời dữ liệu được điền vào cell vừa rồi mình ấn ENTER.
 
Upvote 0
mình đang tập viết những ứng dụng nhỏ phục vu cho công việc nhưng găp những vướng mắc nhờ mọi người giúp đỡ, mình nói qua những cái mình đã làm
1. Lập được uerform (đã làm được)
2. Bây giờ mình muốn từ 1 cell bất kỳ của cột đã định trước cột (cột B) chỉ khi nào ấn ENTER là gọi userform lên làm việc (form này có listbox chứa sắn dữ liệu) bây giờ mình muốn là chọn xong dữ liệu thì form tắt đồng thời dữ liệu được điền vào cell vừa rồi mình ấn ENTER.
Vậy thì tại cell bất kỳ của cột B tạo 1 sự kiện change để kích hoạt mở userform. Rồi trong userform tiếp tục gán sự kiện đóng form và chuyển kết quả đến cell cần đến.
 
Upvote 0
Vậy thì tại cell bất kỳ của cột B tạo 1 sự kiện change để kích hoạt mở userform. Rồi trong userform tiếp tục gán sự kiện đóng form và chuyển kết quả đến cell cần đến.
Cám ơn bạn vấn đề là ở chổ này tại ô B3 ấn ENTER sau đó lại thay kết quả vào ô B3 lúc đó sự kiện change sẽ lặp lại userform lại load lên mình thấy không ổn
mình đang vướng mắc
1. làm sao xác định sự kiện ấn ENTER
2. Trả về dòng con trỏ đang đứng để đưa thông tin vào
 
Upvote 0
Cám ơn bạn vấn đề là ở chổ này tại ô B3 ấn ENTER sau đó lại thay kết quả vào ô B3 lúc đó sự kiện change sẽ lặp lại userform lại load lên mình thấy không ổn
mình đang vướng mắc
1. làm sao xác định sự kiện ấn ENTER
2. Trả về dòng con trỏ đang đứng để đưa thông tin vào
Khi dùng sự kiện change thì phải biết sử dụng câu lệnh Application.EnableEvents=False để khống chế lỗi vòng lặp vô tận.
 
Upvote 0
Cám ơn bạn vấn đề là ở chổ này tại ô B3 ấn ENTER sau đó lại thay kết quả vào ô B3 lúc đó sự kiện change sẽ lặp lại userform lại load lên mình thấy không ổn
mình đang vướng mắc
1. làm sao xác định sự kiện ấn ENTER
2. Trả về dòng con trỏ đang đứng để đưa thông tin vào

1> Code cho Module:
Mã:
Sub EventEnable()
  Application.OnKey "~", "ShowForm"
End Sub
Sub EventDisable()
  Application.OnKey "~", ""
End Sub
Sub ShowForm()
  UserForm1.Show
End Sub
2> Code cho sự kiện SelectionChange (trên sheet)
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Target.Address = "$B$3" Then
    EventEnable
  Else
    EventDisable
  End If
End Sub
Làm đại, chưa biết trúng không! Bạn kiểm tra xem
-------------------
Phần gán dữ liệu từ UserForm xuống, bạn tự làm nhé
 
Upvote 0
1> Code cho Module:
Mã:
Sub EventEnable()
  Application.OnKey "~", "ShowForm"
End Sub
Sub EventDisable()
  Application.OnKey "~", ""
End Sub
Sub ShowForm()
  UserForm1.Show
End Sub
2> Code cho sự kiện SelectionChange (trên sheet)
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Target.Address = "$B$3" Then
    EventEnable
  Else
    EventDisable
  End If
End Sub
Làm đại, chưa biết trúng không! Bạn kiểm tra xem
-------------------
Phần gán dữ liệu từ UserForm xuống, bạn tự làm nhé
Cám ơn Thầy
Để mai làm tiếp có chi không biết mong thầy chỉ bảo thêm
 
Upvote 0
Khi dùng sự kiện change thì phải biết sử dụng câu lệnh Application.EnableEvents=False để khống chế lỗi vòng lặp vô tận.
làm theo cách của bạn mình đã làm được nhưng lại phát sinh lỗi khi xóa dữ liệu userform lại bị load lên
 
Lần chỉnh sửa cuối:
Upvote 0
1> Code cho Module:
Mã:
Sub EventEnable()
  Application.OnKey "~", "ShowForm"
End Sub
Sub EventDisable()
  Application.OnKey "~", ""
End Sub
Sub ShowForm()
  UserForm1.Show
End Sub
2> Code cho sự kiện SelectionChange (trên sheet)
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Target.Address = "$B$3" Then
    EventEnable
  Else
    EventDisable
  End If
End Sub
Làm đại, chưa biết trúng không! Bạn kiểm tra xem
-------------------
Phần gán dữ liệu từ UserForm xuống, bạn tự làm nhé

Cám ơn thầy đã giúp đỡ nhưng em không biết lỗi ở đâu mà em lam theo không thấy nó chạy chi cả
thầy cho em hỏi bây giờ em muốn lấy số thứ tự của hàng mà con trỏ đang đứng làm việc
 
Upvote 0
Chào các anh chị giaiphapexcel,

em có vấn đề nhỏ cần nhờ anh chị giải quyết giúp. Anh chị xem ở file em gửi kèm, bây h em muốn khi mình chọn mã số NV xong click vào button thì số công nhân viên đó được cộng thêm 1 đúng vào dòng đó ở bên bảng dữ liệu.

giúp em với nhé!
 

File đính kèm

  • test.xls
    38.5 KB · Đọc: 16
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
thữ vậy xem được ko

Sub a()

For i = 4 To Sheet2.[a100].End(xlUp).Row
If Sheet2.Range("A" & i).Value = Sheet1.[c3] Then
Sheet1.[c6].Value = 1 + CInt(Sheet1.[c6].Value)
Sheet2.Range("c" & i).Value = Sheet1.[c6].Value
Exit For
End If
Next

End Sub
 
Upvote 0
Cảm ơn nhapmon đã giúp đỡ nhưng mà chưa được bạn ạ!

vd công của nv1 đang là 7 thì nếu chuyển sáng nv2 nó cộng luôn lên bằng 8 :) ý mình là muốn cộng thêm công cho mỗi NV riêng biệt không liên quan đến nhau, nhờ bạn giúp.
 
Lần chỉnh sửa cuối:
Upvote 0
Chào các anh chị giaiphapexcel,

em có vấn đề nhỏ cần nhờ anh chị giải quyết giúp. Anh chị xem ở file em gửi kèm, bây h em muốn khi mình chọn mã số NV xong click vào button thì số công nhân viên đó được cộng thêm 1 đúng vào dòng đó ở bên bảng dữ liệu.

giúp em với nhé!
Xài thử Sub này cho cái Button của bạn coi sao
PHP:
Public Sub GPE()
Application.ScreenUpdating = False
Dim Rng As Range, Cll As Range, Tem As String
Tem = UCase([C3])
With Sheets("S2")
    Set Rng = .Range(.[A4], .[A65000].End(xlUp))
    For Each Cll In Rng
        If UCase(Cll) = Tem Then
            Cll.Offset(, 2).Value = Cll.Offset(, 2).Value + 1
            Exit For
        End If
    Next
End With
Set Rng = Nothing
Application.ScreenUpdating = True
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn nhapmon đã giúp đỡ nhưng mà chưa được bạn ạ!

vd công của nv1 đang là 7 thì nếu chuyển sáng nv2 nó cộng luôn lên bằng 8 :) ý mình là muốn cộng thêm công cho mỗi NV riêng biệt không liên quan đến nhau, nhờ bạn giúp.

Xem thử file đính kèm xem được không ?
 
Upvote 0
Cảm ơn nhapmon đã giúp đỡ nhưng mà chưa được bạn ạ!

vd công của nv1 đang là 7 thì nếu chuyển sáng nv2 nó cộng luôn lên bằng 8 :) ý mình là muốn cộng thêm công cho mỗi NV riêng biệt không liên quan đến nhau, nhờ bạn giúp.

đã có nhiêu code hay hơn, nhưng nếu có sửa thì sửa lại như vậy

Sub a()
For i = 4 To Sheet2.[a100].End(xlUp).Row
If Sheet2.Range("A" & i).Value = Sheet1.[c3] Then
Sheet2.Range("c" & i).Value = Sheet1.[c6].Value + 1
Exit For
End If
Next
End Sub
 
Upvote 0
Web KT
Back
Top Bottom