Bài tập VBA - Macro

Liên hệ QC

handung107

Thành viên gắn bó
Thành viên danh dự
Tham gia
30/5/06
Bài viết
1,630
Được thích
17,436
Nghề nghiệp
Bác sĩ
1) Tạo Macro
Tạo Macro có tên "Dinhdang" ghi lại một hành động Format (màu, loại font, cỡ,..)
Gán Macro "Dinhdang" lên thanh Toolbar (không yêu cầu dùng VBA), dùng với phương pháp "ustomize...".
Định dạng một số ô bằng Macro "Dinhdang"
2) Đọc hiểu Macro
Mở xem nội dung của Macro "Dinhdang" (ALT+F11)
Giải thích từng dòng lệnh
Bản chất của một Macro là một Sub (thủ tục)?
3) Có mấy cách để chạy được một Macro? Nội dung của các cách?
4) Tạo một Macro định dạng bảng, giải thích từng dòng lệnh của Macro đó.
5) Tạo một Macro để dán giá trị (Paste Value)
Ứng dụng: Khi cần copy giá trị của một công thức, bạn chọn lệnh Copy sau đó đặt con trỏ vào địa chỉ cần dán dữ liệu và chạy Macro trên.
6) Tạo một Macro định dạng số tiền về dạng "#,##0"
7) Tạo một Macro định dạng ngày tháng về dạng "dd/MM/yy"
8) Tạo một Macro dán định dạng (Paste Formats)
9) Tạo một Macro để xoay chiều giá trị
Ứng dụng: Khi cần xoay các giá trị nằm theo hàng thành theo cột.
10) Tạo một thanh công cụ (Toolbar) có tên "Các lệnh của tôi". Trên thanh toolbar gán tất cả các Macro đã tạo từ câu 1-9 đặt tên rõ ràng theo nội dung công việc.

Huy vọng các bạn làm tốt và tự rút ra được nhiều điều từ việc Record một Macro, đọc hiểu các câu lệnh của VBA .
 
cho xem bài giải đi, em không biết làm...
 
Tôi làm bài tập 5 của chị handung107, nhưng khi chạy cứ báo lỗi.
Tôi ghi lại lần lượt đã làm như sau: chọn vùng cần copy, copy, chọn một ô sẽ paste, ghi macro, edit, paste special, value, stop ghi macro.
Và kết quả như sau: "Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks :=False, Transpose:=False".
Các bạn làm ơn chỉ lỗi ở đâu?
Xin chân thành cám ơn.
 
Phải ghi macro ngay khi chọn vùng cần copy - Value, Stop
Chớ ghi macro từ lúc dán thì lấy gì mà dán.
Sub Macro1()
' Macro1 Macro
'copy
Range("A1:A6").Select
Selection.Copy
'chon vùng dán
Range("D1").Select
'dán
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'thoát copy
Application.CutCopyMode = False
'đến lúc nào không còn hiểu gì hết là thành công => đi thuê
End Sub
 
Nên bỏ đi thủ tục Selection ThuNghi ạ

Mã:
Sub Macro1()

Range("A1:A6").Copy
Range("D1").PasteSpecial Paste:=xlPasteValues

    Application.CutCopyMode = False
End Sub

Thân!
 
Đây là dùng VBA theo cách ABC, phai từ đơn giản.
 
Theo như bạn ThuNghi thì vùng copy và paste là cố định. Nhưng tôi muốn copy một vùng bất kỳ và paste vào một vùng bất kỳ khác thì làm thế nào?
 
Dù bất kỳ thế nào bạn cũng phải chỉ cho chỗ cần copy và chỗ cần Paste chớ.
Chắc mình chưa hiểu ý bạn!
 
Ý của tôi là tôi copy chẳng hạn D10:E15 rồi paste vào F100, một lúc sau tôi lại copy C2:G10 paste vào A24, hoặc copy từ range của sheet khác paste vào sheet này ... Tóm lại là tôi copy một vùng dữ liệu nào đó trước, sau đó chọn cell đầu tiên của vùng cần paste rồi mới chạy Macro "Paste value".

Tôi nhắc lại đề bài của chị handung107:
"5) Tạo một Macro để dán giá trị (Paste Value)
Ứng dụng: Khi cần copy giá trị của một công thức, bạn chọn lệnh Copy sau đó đặt con trỏ vào địa chỉ cần dán dữ liệu và chạy Macro trên."
 
Chỉnh sửa lần cuối bởi điều hành viên:
ngo15 đã viết:
Ý của tôi là tôi copy chẳng hạn D10:E15 rồi paste vào F100, một lúc sau tôi lại copy C2:G10 paste vào A24, hoặc copy từ range của sheet khác paste vào sheet này ... Tóm lại là tôi copy một vùng dữ liệu nào đó trước, sau đó chọn cell đầu tiên của vùng cần paste rồi mới chạy Macro "Paste value".

Quá trình Copy --> Paste đòi hỏi không được gián đoạn.

Khi copy tức là máy đã nạp vào bộ nhớ tạm của nó dũ liệu copy. Vì vậy cần chú ý đến các hành động và sự kiện có thể làm mất vùng tạm này, đặc biệt là sự kiện Workbook Change Selection.

Có lẽ bạn nên gửi File đó lên để mọi người tìm hiểu.

Thân!
 
ngo15 đã viết:
Ý của tôi là tôi copy chẳng hạn D10:E15 rồi paste vào F100, một lúc sau tôi lại copy C2:G10 paste vào A24, hoặc copy từ range của sheet khác paste vào sheet này ... Tóm lại là tôi copy một vùng dữ liệu nào đó trước, sau đó chọn cell đầu tiên của vùng cần paste rồi mới chạy Macro "Paste value".
oh, vậy thì bạn không nên dùng chức năng Copy - Paste vì nếu làm nhiều lần chương trình sẽ rất chậm!
Bạn tạo 2 biến kiểu Range: 1 biến là vùng dữ liệu nguồn, 1 biến là vùng dữ liệu đích.
Mã:
Dim rngSource As Range
Dim rngDest As Range
Set rngDest = Range(....)
With rngSource
            Set rngDest = basebook.ActiveSheet.Cells(.....).Resize(.Rows.Count, .Columns.Count)
End With
rngDest.Value = rngSource.Value
......
Bạn tham khảo thêm bài "Lấy Thông Tin Từ File Không Mở " #22 nhé!
 
Tôi làm bài tập số 5 của chị handung107và thấy trong thực tế nhiều lúc cũng cần copy một vùng từ file khác paste value sang file này nên hỏi chứ không có file cụ thể (Không phải dữ liệu nguồn và đích cố định). Tôi cũng đoán có thể không có lệnh copy trong Macro nên nó không biết Paste cái gì. Tóm lại tôi chỉ muốn thay lệnh: Edit/Paste Special/Valume/OK thành một Ctrl+Shift+P chẳng hạn.
 
Cái này thì bản thân excel đã có, bạn vào View, toolbars, customize (dòng cuối), tiếp tục chọn Commands, bên khung bên trái chọn Edit, bên phải tìm Paste Values (icon có hình số 12), click chuột vào vào kéo lên thanh trên cùng. Lần sau khi copy bạn muốn dán value chỗ nào thì chọn chỗ cần dán và click mouse vào icon.
 
Cám ơn bạn Thu Nghi. Đúng cái tôi cần. Nhưng tôi vẫn muốn làm thử bài tập đó thì viết macro này như thế nào?
 
Macro copy- paste : chọn trước vùng Paste chứ không phải vùng copy?

Phải ghi macro ngay khi chọn vùng cần copy - Value, Stop
Chớ ghi macro từ lúc dán thì lấy gì mà dán.

hí hi`! bạn ( chị ) Thunghi xinh đẹp ơi, tớ ( em ) cần giúp đỡ :
tớ ( em ) cần một Macro copy nhưng sao cho User được tự chọn vùng Paste bất kỳ chứ không phải Macro tự offset như trên , tức là giống như nút [12] vậy !

thanks nhìu nhé !}}}}}
 
Mình hiểu ý của bạn ngo15 rồi. Mình cũng đang thắc mắc như bạn ấy.
Như bạn Mr Okebab nói thì:
Code:
Sub Macro1()

Range("A1:A6").Copy
Range("D1").PasteSpecial Paste:=xlPasteValues

Application.CutCopyMode = False
End Sub
chỉ copy từ vùng A1:A6, nhưng nếu mình copy vùng bất kì thì sao?
Bây giờ mình muốn paste giá trị vào một vùng khác thì sao?
Code phải sửa như thế nào?
Các bạn trả lời giúp mình nhé!
 
Mình hiểu ý của bạn ngo15 rồi. Mình cũng đang thắc mắc như bạn ấy.
Như bạn Mr Okebab nói thì:
Code:
Sub Macro1()

Range("A1:A6").Copy
Range("D1").PasteSpecial Paste:=xlPasteValues

Application.CutCopyMode = False
End Sub
chỉ copy từ vùng A1:A6, nhưng nếu mình copy vùng bất kì thì sao?
Bây giờ mình muốn paste giá trị vào một vùng khác thì sao?
Code phải sửa như thế nào?
Các bạn trả lời giúp mình nhé!
Thì dùng InputBox mà chọn vùng tùy ý
PHP:
Sub CopyPaste()
  Dim Des As Range
  With Application.InputBox("Chon vung can copy", Type:=8)
    Set Des = Application.InputBox("Chon vung can paste", Type:=8)
    .Copy: Des.PasteSpecial
  End With
  Application.CutCopyMode = False
End Sub
 
Chào cả nhà. Có ai có thể giúp em ghi Macro để xem lại quá trình tính toán của hàm Solver không? Vì em ghi nó hay báo lỗi và bài toán của em phải chạy Solver nhiều lần với các điều kiện ràng buộc thay đổi nhiều lần ?
Cám ơn sự giúp đỡ
Thân !
 
Thì dùng InputBox mà chọn vùng tùy ý
PHP:
Sub CopyPaste()
  Dim Des As Range
  With Application.InputBox("Chon vung can copy", Type:=8)
    Set Des = Application.InputBox("Chon vung can paste", Type:=8)
    .Copy: Des.PasteSpecial
  End With
  Application.CutCopyMode = False
End Sub
Nhưng nó vẫn chưa phải là Copy và Paste special Value (Nếu ô mình cần copy mà là link tính toán thì khi copy sẽ không đúng kết quả).
 
Web KT
Back
Top Bottom