24/06/2018
Excel for you

Hướng dẫn cơ bản sử dụng excel.

Go now
24/06/2018
English easier

Học tiếng Anh hiệu quả

Go now
24/06/2018
Banking sevices

Tìm hiểu về dịch vụ ngân hàng

Go now
Check if any Shapes exist
If you want to check whether there are any VBA Shapes on the active worksheet then you can simply check the value of the .Count property of the Shapes object:

ActiveSheet.Shapes.Count
...which will return the number of shapes, or return zero if there are no shapes.

Example Usage:

If ActiveSheet.Shapes.Count = 0 Then MsgBox "No shapes found!"


If you need to check whether a specific shape exists, use this function:


Function shapeExists(shapeName As String) As Boolean
'returns TRUE if a shape named [ShapeName] exists on the active worksheet
Dim sh As Shape
For Each sh In ActiveSheet.Shapes
If sh.Name = shapeName Then shapeExists = True
Next sh
End Function
Example usage:

If Not shapeExists("My Shape Name") Then MsgBox "Shape not found!"

List All Shapes

Lists all shapes on the active worksheet, in the Immediate window. (Hit Ctrl+G to open it.)

Sub ListAllShapes()
'list all shapes on the active worksheet
Dim sh As Shape
For Each sh In ActiveSheet.Shapes
Debug.Print "id=" & sh.ID, "name=" & sh.Name
Next sh
End Sub

Delete All Shapes

Deletes all shapes from the active worksheet.

Sub DeleteAllShapes()
'delete all shapes on the active worksheet (Including CONTROLS, so use with caution!)
Dim sh As Shape
For Each sh In ActiveSheet.Shapes
sh.Delete
Next sh
End Sub
1. Bạn càng sử dụng nhiều thư viện tham chiếu References của excel thì càng dễ gây ra lỗi khi mà một máy tính nào đó không tương thích, có  thể là do máy tính đó cài đặt Microsoft Office bị lỗi.
2. Viết code đơn giản và rõ ràng sẽ dễ dàng duy trì và phát triển.
3. Hãy viết code giống như các thao tác mà bạn sẽ làm với đối tượng dữ liệu sẽ giúp cho quá trình hiểu dễ dàng hơn
4. Đừng quên sau khi viết xong code thì phải tiếp tục tối ưu nó.
5. Nếu bạn muốn có ngay một giải pháp tạm thời cho công việc của bạn hãy google search và đọc thật nhiều về nó
6. Tham gia tất cả các trang và diễn đàn là một ý hay để học hỏi
7. Nếu bạn cài các dòng lệnh tăng tốc cho Excel mà một trong các dòng lệnh bị lỗi sẽ khiến cho các thuộc tính không được bật lên khi đó bạn lại phải chỉnh bằng tay hoặc không hiện cảnh báo. Do đó, bạn luôn phải cài bẫy lỗi khi code.
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.DisplayAlerts = False
Và bạn có thể đặt vào đầu câu lệnh

On Error goto LastSub

Và đặt vào đoạn code sau trước khi End Sub để đảm bảo rằng mọi thứ được kích hoạt lại nếu code bị lỗi và hoặc nếu code không lỗi thì rời khỏi sub và cũng kích hoạt lại toàn bộ thuộc tính tăng tốc.

Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.Calculation = xlCalculationAutomatic
Exit Sub
LastSub:
    Msgbox Err.Number & ": " & Err.Description
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    Application.Calculation = xlCalculationAutomatic
Để tăng tốc xử lý và tự động hóa trong Excel thì vòng lặp là phương thức có thể nói là được sử dụng thường xuyên nhất. Khi sử dụng vòng lặp bạn sẽ tiết kiệm được thời gian để hoàn thành một tác vụ trong excel.
Các loại vòng lặp trong Excel VBA có thể được biết đến như sau:
+ For ... next
+ For ... each

Vòng lặp đơn

Hãy đặt một CommandButton trên bảng tính và thêm vào những dòng code sau
for i = 1 to 10
cells(i,1).value = i
next i
Kết quả bạn nhận được khi nhấn nút CommandButton

Vòng lặp kép

Hãy đặt một command Button trên bảng tính và thêm vào những dòng code sau
Dim i, j As Integer
    For i = 1 To 10
        For j = 1 To 2
            Cells(i, j).Value = i
        Next j
    Next i
Kết quả bạn nhận được khi nhấn nút CommandButton
Tuy nhiên, điều bạn muốn là đếm số lượng ô mà bạn sử dụng thì bạn hãy sửa lại với những dòng code sau đây:
Dim i, j, k As Integer
k = 1
For j = 1 To 2
    For i = 1 To 10
        Cells(i, j).Value = k
        k = k + 1
    Next i
Next j
Và đây là kết quả bạn nhận được khi thay đổi đoạn mã mới
Qua những ví dụ trên thì bạn đã hiểu một phần về vòng lặp rồi phải không nào.
airplanemode_active