Hỏi đáp về VBA - Macro (1 người xem)

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

Người dùng đang xem chủ đề này

khoa186

Thành viên chính thức
Tham gia
23/11/07
Bài viết
64
Được thích
4
Lần chỉnh sửa cuối:
các bạn cho mình hỏi , mình mới tạo macro c1= a1+b1,c2=a2+b2, khi đó mình bấm vào c1 thì macro mới chạy đúng còn mấy ô khác thì không, nay mình muốn dù mình có nhấn vào ô nào thì khi macro chạy cũng nằm ở ô c1 và c2 . mình mới biết macro mong các bạn giúp mình

Bạn nên post code của bạn viết lên mới biết tại sao. Nhưng nhìn sơ qua mô tả thì có lẻ bạn đang sử dụng sự kiện change.
 
Upvote 0
mình chỉ biết vầy thôi
Sub thunghiem()'
' thunghiem Macro
'
' Keyboard Shortcut: Ctrl a
'
ActiveCell.FormulaR1C1 = "=SUM(RC[-4]:RC[-1])"
Range("E1").Select
Selection.AutoFill Destination:=Range("E1:E9"), Type:=xlFillDefault
Range("E1:E9").Select
End Sub
e1=a1 b1 c1 d1
.....
e9=a9 b9 c9 d9
nếu mình click chuột ở ô e1 thì Macro chạy đúng , còn chỗ khác thì nó không chạy , mình muốn dù click chuột chỗ nào thì khi chay macro kết quả đều phải hiện từ E1-E9 , các bạn giúp mình nha , mình chẳng biết gì về macro hết . hihihi

quần áo trẻ em | quan ao tre em | quần áo sơ sinh | quần áo bé trai | quần áo bé gái | bodysuit carter | quan ao so sinh | quan ao tre em nhap khau
 
Lần chỉnh sửa cuối:
Upvote 0
mình chỉ biết vầy thôi
Sub thunghiem()'
' thunghiem Macro
'
' Keyboard Shortcut: Ctrl+a
'
ActiveCell.FormulaR1C1 = "=SUM(RC[-4]:RC[-1])"
Range("E1").Select
Selection.AutoFill Destination:=Range("E1:E9"), Type:=xlFillDefault
Range("E1:E9").Select
End Sub
e1=a1+b1+c1+d1
.....
e9=a9+b9+c9+d9
nếu mình click chuột ở ô e1 thì Macro chạy đúng , còn chỗ khác thì nó không chạy , mình muốn dù click chuột chỗ nào thì khi chay macro kết quả đều phải hiện từ E1-E9 , các bạn giúp mình nha , mình chẳng biết gì về macro hết . hihihi

Làm sao chạy được chứ!!! Bạn thay chỗ này

ActiveCell.FormulaR1C1 = "=SUM(RC[-4]:RC[-1])"

thành dòng code thế này

[E1].FormulaR1C1 = "=SUM(RC[-4]:RC[-1])"

Bạn nên vào đây để đọc sách căn bản về VBA nhé

http://www.giaiphapexcel.com/forum/forumdisplay.php?55-Hướng-dẩn-lập-trình-Excel
 
Lần chỉnh sửa cuối:
Upvote 0
Làm sao chạy được chứ!!! Bạn thay chỗ này

ActiveCell.FormulaR1C1 = "=SUM(RC[-4]:RC[-1])"

thành dòng code thế này

[E1].FormulaR1C1 = "=SUM(RC[-4]:RC[-1])"

Bạn nên vào đây để đọc sách căn bản về VBA nhé

http://www.giaiphapexcel.com/forum/forumdisplay.php?55-Hướng-dẩn-lập-trình-Excel
cám ơn anh , sẵn đây anh cho em hỏi , nếu mình muốn chạy macro xong kết qua chỉ hiện số thôi và tự động xóa luôn công thức sum thì mình phải làm sao , cám ơn anh rất nhiều .

quần áo trẻ em | quan ao tre em | quần áo sơ sinh | quần áo bé trai | quần áo bé gái | bodysuit carter | quan ao so sinh | quan ao tre em nhap khau
 
Lần chỉnh sửa cuối:
Upvote 0
cám ơn anh , sẵn đây anh cho em hỏi , nếu mình muốn chạy macro xong kết qua chỉ hiện số thôi và tự động xóa luôn công thức sum thì mình phải làm sao , cám ơn anh rất nhiều .

Bạn có thể đổi thành công thức VBA tương ứng như sau:
[E1].Value = WorksheetFunction.Sum(Range([E1].Offset(, -4).Address & ":" & [E1].Offset(, -1).Address))

Hoặc bạn cũng có thể protect cell (nhưng bạn mới học VBA thì khoan dùng). Bạn cũng có thể linh hoạt nếu biết được là lấy tổng của A1:D1 thì dùng WorksheetFunction.Sum(Range("A1:D1") luôn cũng là một ý.
 
Lần chỉnh sửa cuối:
Upvote 0
cám ơn anh , sẵn đây anh cho em hỏi , nếu mình muốn chạy macro xong kết qua chỉ hiện số thôi và tự động xóa luôn công thức sum thì mình phải làm sao , cám ơn anh rất nhiều .

Nếu bạn thêm dòng lệnh này phía dưới trước dòng End Sub, thì toàn bộ bảng tính sẽ mất hết công thức

UsedRange = UsedRange.Value
 
Upvote 0
Nếu bạn thêm dòng lệnh này phía dưới trước dòng End Sub, thì toàn bộ bảng tính sẽ mất hết công thức

UsedRange = UsedRange.Value
không mất anh ơi , cái cột sum vẫn hiện công thức , và nó báo cái lỗi gì đó
Sub thunghiem()
'
' thunghiem Macro
'
' Keyboard Shortcut: Ctrl b
'
[E1].FormulaR1C1 = "=SUM(RC[-4]:RC[-1])"
Range("E1").Select
Selection.AutoFill Destination:=Range("E1:E9"), Type:=xlFillDefault
Range("E1:E9").Select
UsedRange = UsedRange.Value
End Sub

quần áo trẻ em | quan ao tre em | quần áo sơ sinh | quần áo bé trai | quần áo bé gái | bodysuit carter | quan ao so sinh | quan ao tre em nhap khau
 
Lần chỉnh sửa cuối:
Upvote 0
không mất anh ơi , cái cột sum vẫn hiện công thức , và nó báo cái lỗi gì đó
Sub thunghiem()
'
' thunghiem Macro
'
' Keyboard Shortcut: Ctrl+b
'
[E1].FormulaR1C1 = "=SUM(RC[-4]:RC[-1])"
Range("E1").Select
Selection.AutoFill Destination:=Range("E1:E9"), Type:=xlFillDefault
Range("E1:E9").Select
UsedRange = UsedRange.Value
End Sub

Cái dòng tô đậm, bạn sửa thành

Sub thunghiem()

'
' thunghiem Macro
'
' Keyboard Shortcut: Ctrl+b
'
[E1].FormulaR1C1 = "=SUM(RC[-4]:RC[-1])"
Range("E1").Select
Selection.AutoFill Destination:=Range("E1:E9"), Type:=xlFillDefault
Range("E1:E9").Select
Sheet1.UsedRange = Sheet1.UsedRange.Value
End Sub

Nhưng lưu ý với bạn khi xài UsedRange ám chỉ là những Range đã được xài, do đó, nếu bạn muốn hạn chế lại, chẳng hạn chỉ muốn giấu công thức của ô E1 thì không xài như vậy được bạn nhé.
--------------------
Ngoài ra, mình giải thích cho bạn câu này, hai dòng dưới đây là tương đương nhau, chỉ khác một cái xài công thức Excel, một cái xài lệnh VBA.
[E1].FormulaR1C1 = "=SUM(RC[-4]:RC[-1])"
[E1].Value = WorksheetFunction.Sum(Range([E1].Offset(, -4).Address & ":" & [E1].Offset(, -1).Address))

Bạn có thể nghiên cứu thêm về Offset trong GPE để hiểu thêm.
 
Upvote 0
không mất anh ơi , cái cột sum vẫn hiện công thức , và nó báo cái lỗi gì đó
Sub thunghiem()
'
' thunghiem Macro
'
' Keyboard Shortcut: Ctrl+b
'
[E1].FormulaR1C1 = "=SUM(RC[-4]:RC[-1])"
Range("E1").Select
Selection.AutoFill Destination:=Range("E1:E9"), Type:=xlFillDefault
Range("E1:E9").Select
UsedRange = UsedRange.Value
End Sub
Nguyên tắc thì đúng rồi, tại sao trên máy tinh của bạn vẫn còn công thức thì mình hỏng biết
Bạn nào kiểm tra thử code trên xem có gì khác không
 
Upvote 0
Mình thank các anh trước nha vậy là sửa như vầy Sheet1.UsedRange = Sheet1.UsedRange.Value là ok . nhưng bạn Kyo cho mình hỏi nếu thay [E1].Value = WorksheetFunction.Sum(Range([E1].Offset(, -4).Address
 
Lần chỉnh sửa cuối:
Upvote 0
Mình thank các anh trước nha vậy là sửa như vầy Sheet1.UsedRange = Sheet1.UsedRange.Value là ok . nhưng bạn Kyo cho mình hỏi nếu thay [E1].Value = WorksheetFunction.Sum(Range([E1].Offset(, -4).Address & ":" & [E1].Offset(, -1).Address)) cho [E1].FormulaR1C1 = "=SUM(RC[-4]:RC[-1])" , thì khi macro chạy e1 = e2 ........ = e9 .

Về cái sửa thành lệnh VBA luôn thì do mình chỉ trả lời về cái gọi là tương đương với công thức Excel kia nên nó chỉ đúng với chỗ đó thôi bạn à. Bởi vì khi bạn xài công thức, bạn fill xuống thì công thức nó cũng được tham chiếu tương đối xuống. Nhưng ở đây nếu xài thuần VBA thì nó ra giá trị luôn, nên fill xuống dẫn đến nó giống nhau cả rồi. Nếu mà xài VBA thì cái macro của bạn theo mình phải có vòng lặp mới được. Cụ thể sẽ như sau:

PHP:
Sub thunghiem()
Dim i As Long

For i = 1 To 9
    Range("E" & i).Value = WorksheetFunction.Sum(Range(Range("E" & i).Offset(, -4).Address & _
                                                ":" & Range("E" & i).Offset(, -1).Address))
Next i
End Sub

Nhưng mà trong trường hợp này xài công thức như trên thì sẽ cho tốc độ nhanh hơn.

Ngoài ra, macro trên của bạn theo mình có thể được rút gọn như thế này:

PHP:
Sub thunghiem()

Range("E1:E9").FormulaR1C1 = "=SUM(RC[-4]:RC[-1])"
Sheet1.UsedRange = Sheet1.UsedRange.Value

End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
cám ơn bác kyo , mình mới làm macro ẩn cột thế này
Sub ANCOT()
'
' ANCOT Macro
'


'
Columns("M:M").Select
Selection.EntireColumn.Hidden = True
End Sub
nhưng nó chỉ chạy trong sheet1 thôi , nay mình muốn nó chạy luôn trong các sheet2,sheet3 nhưng sheet4 thì không cần . Vậy mình phải làm như thế nào . cảm ơn bạn lần nữa .

quần áo trẻ em | quan ao tre em | quần áo sơ sinh | quần áo bé trai | quần áo bé gái | bodysuit carter | quan ao so sinh | quan ao tre em nhap khau
 
Lần chỉnh sửa cuối:
Upvote 0
cám ơn bác kyo , mình mới làm macro ẩn cột thế này
Sub ANCOT()
'
' ANCOT Macro
'


'
Columns("M:M").Select
Selection.EntireColumn.Hidden = True
End Sub
nhưng nó chỉ chạy trong sheet1 thôi , nay mình muốn nó chạy luôn trong các sheet2,sheet3 nhưng sheet4 thì không cần . Vậy mình phải làm như thế nào . cảm ơn bạn lần nữa .

Đơn giản nhất là bạn muốn Sheet nào thì bạn chỉ cần gõ Sheet đó vào thôi

PHP:
Sub ANCOT()
Sheet1.Columns("M:M").EntireColumn.Hidden = True
Sheet2.Columns("M:M").EntireColumn.Hidden = True
Sheet3.Columns("M:M").EntireColumn.Hidden = True
End Sub
 
Upvote 0
Đơn giản nhất là bạn muốn Sheet nào thì bạn chỉ cần gõ Sheet đó vào thôi

PHP:
Sub ANCOT()
Sheet1.Columns("M:M").EntireColumn.Hidden = True
Sheet2.Columns("M:M").EntireColumn.Hidden = True
Sheet3.Columns("M:M").EntireColumn.Hidden = True
End Sub
Tiện chủ đề này cho mình hỏi:
Mình muốn tạo một Fom gồm 2 ô cho phép nhập vào: Ẩn từ cột .... đến cột.....
(Ví dụ cho phép ẩn từ cột A đến cột K, hay ẩn từ cột A đến 10 cột tiếp theo)
Tương tự như vậy tạo một Fom có chức năng hiện số cột như ẩn các cột!
Thank các bạn!
 
Upvote 0
Mình Đang cần làm một File có chữ chạy trong Excel.
Mình có Download được một File trong Giaiphapexcel.com nhưng không biết làm sao để làm được nó.
Mình mới tìm hiểu về VBA thôi lên chưa biết gì mong các bạn chỉ Các bạn chỉ giúp mình cụ thể từng bước được không ?.
Vì mình copi nguyên code vào trong Code Visual basic mà không được.
mình có đọc 1 số bài về VBA nhưng trong đó dường như chỉ hướng dẫn cho những người đã làm và hiểu nó còn người chưa động chạm bao giờ như mình thì chẳng thể hiểu nổi.
Mong các bạn cố gắng giúp mình.
Mình sẽ Thank nhiệt tình.
 

File đính kèm

Upvote 0
Web KT

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

Back
Top Bottom