Thông báo cho vòng lặp For (VBA cho phần mềm Inventor)

Liên hệ QC

Thanh Bình PV

Thành viên hoạt động
Tham gia
30/10/19
Bài viết
151
Được thích
19
Em chào mọi người trong diễn đàn ạ,
Em đang viết code VBA cho phần mềm Inventor (phần mềm thiết kế).

Code của em hiện tại là sẽ ẩn những đối tượng có tên bắt đầu là "EXT-" nhưng nếu không có đối tượng nào tên bắt đầu như vậy thì code vẫn chạy không thông báo, nên em không biết là đã ẩn hay chưa.

Em muốn tạo thông báo cho vòng lặp For bên dưới là :
1. Nếu không có đối tượng nào tên bắt đầu là "EXT-" thì hiện thông báo "khong co doi tuong EXT".
2. Nếu có đối tượng nào tên bắt đầu là "EXT-" thì hiện thông báo số lượng đã ẩn cho đối tượng "EXT-".

Em cảm ơn ạ.
Mã:
Sub Hide_EXT()
    Dim oDoc As PartDocument
    Dim oComponent As Object
    Dim namesolid As String
    Dim i As Integer
    Dim oBody As Variant
    
    Set oDoc = ThisApplication.ActiveDocument
    Set oComponent = oDoc.ComponentDefinitions.Item(1)
    For i = 1 To oComponent.SurfaceBodies.Count
        Set oBody = oComponent.SurfaceBodies.Item(i)
        namesolid = oBody.Name
        If InStr(1, namesolid, "EXT-") Then
            oBody.Visible = False
        End If
    Next
End Sub
 
Em chào mọi người trong diễn đàn ạ,
Em đang viết code VBA cho phần mềm Inventor (phần mềm thiết kế).

Code của em hiện tại là sẽ ẩn những đối tượng có tên bắt đầu là "EXT-" nhưng nếu không có đối tượng nào tên bắt đầu như vậy thì code vẫn chạy không thông báo, nên em không biết là đã ẩn hay chưa.

Em muốn tạo thông báo cho vòng lặp For bên dưới là :
1. Nếu không có đối tượng nào tên bắt đầu là "EXT-" thì hiện thông báo "khong co doi tuong EXT".
2. Nếu có đối tượng nào tên bắt đầu là "EXT-" thì hiện thông báo số lượng đã ẩn cho đối tượng "EXT-".

Em cảm ơn ạ.
Mã:
Sub Hide_EXT()
    Dim oDoc As PartDocument
    Dim oComponent As Object
    Dim namesolid As String
    Dim i As Integer
    Dim oBody As Variant
   
    Set oDoc = ThisApplication.ActiveDocument
    Set oComponent = oDoc.ComponentDefinitions.Item(1)
    For i = 1 To oComponent.SurfaceBodies.Count
        Set oBody = oComponent.SurfaceBodies.Item(i)
        namesolid = oBody.Name
        If InStr(1, namesolid, "EXT-") Then
            oBody.Visible = False
        End If
    Next
End Sub
Bạn thêm cái biến đếm là được mà.
Mã:
Sub Hide_EXT()
    Dim oDoc As PartDocument,a as long   
    Dim oComponent As Object
    Dim namesolid As String
    Dim i As Integer
    Dim oBody As Variant
    
    Set oDoc = ThisApplication.ActiveDocument
    Set oComponent = oDoc.ComponentDefinitions.Item(1)
    For i = 1 To oComponent.SurfaceBodies.Count
        Set oBody = oComponent.SurfaceBodies.Item(i)
        namesolid = oBody.Name
        If InStr(1, namesolid, "EXT-") Then
            oBody.Visible = False
            a=a+1
        End If
    Next
    msgbox "so " & a
End Sub
 
Bạn thêm cái biến đếm là được mà.
Mã:
Sub Hide_EXT()
    Dim oDoc As PartDocument,a as long  
    Dim oComponent As Object
    Dim namesolid As String
    Dim i As Integer
    Dim oBody As Variant
   
    Set oDoc = ThisApplication.ActiveDocument
    Set oComponent = oDoc.ComponentDefinitions.Item(1)
    For i = 1 To oComponent.SurfaceBodies.Count
        Set oBody = oComponent.SurfaceBodies.Item(i)
        namesolid = oBody.Name
        If InStr(1, namesolid, "EXT-") Then
            oBody.Visible = False
            a=a+1
        End If
    Next
    msgbox "so " & a
End Sub
Em cảm ơn ạ. Em dùng mã như sau để thông báo được rồi ạ.
Mã:
If a = 0 Then
            MsgBox("không có đối tượng EXT")
        Else
            MsgBox(a & " đối tượng EXT bị ẩn")
        End If
Em muốn hỏi thêm về 1 vấn đề nữa ạ. Liên quan tới VB.Net, như ở trên em muốn hiện số lượng đối tượng ẩn nhưng em viết lại để có thể hiện tên của đối tượng bị ẩn. Ở dưới là mã em viết lại cho VBA và hoạt động tốt.
Nhưng không hiểu sao khi em chuyển sang VB.Net (em đã thay đổi 1 số đối tượng để phù hợp với VB.Net) thì lại bị lỗi ở chỗ "ab = ab & namesolid & vbCrLf" cụ thể lỗi như sau.
"Variable 'ab' is used before it has been assigned a value. A null reference exception could result at runtime."
Em tìm hiểu mà vẫn không hiểu sao. Anh giúp em với ạ. Em cảm ơn.
Mã:
Sub Hide_EXT()
    Dim oDoc As PartDocument
    Dim oComponent As Object
    Dim namesolid As String
    Dim i As Integer
    Dim oBody As Variant
    Dim ab As String
    
    Set oDoc = ThisApplication.ActiveDocument
    Set oComponent = oDoc.ComponentDefinitions.Item(1)
    For i = 1 To oComponent.SurfaceBodies.Count
        Set oBody = oComponent.SurfaceBodies.Item(i)
        namesolid = oBody.Name
        If InStr(1, namesolid, "EXT-") Then
            oBody.Visible = False
            ab = ab & namesolid & vbCrLf
        End If
    Next
    If ab = "" Then
    MsgBox "khong co doi tuong EXT"
    Else
    MsgBox " Doi tuong EXT bi an:" & Chr(10) & ab
    End If
End Sub
 
Dim ab As String
ab = "" '<--- Thêm dòng này

=======================
Hoặc
Thay dòng:
ab = ab & namesolid & vbCrLf
bằng:
if len(ab) = 0 then ab = namesolid else ab = ab & namesolid & vbCrLf
VB.Net bắt buộc không dùng mặc định trị cho biến. Vì vậy, lệnh Dim cho phép khởi trị luôn
Dim ab As String = ""
 
Mã:
Sub Hide_EXT()
 ...
        If InStr(1, namesolid, "EXT-") Then
            oBody.Visible = False
            ab = ab & namesolid & vbCrLf
        End If
...

Ngay đoạn code trên là bạn đã xác định được là có đối tượng hay chưa rồi, cần chi thêm biến ab.
If Instr(...) Then
...
Else
Msgbox "No"
End if
 
Dim ab As String
ab = "" '<--- Thêm dòng này

=======================
Hoặc
Thay dòng:
ab = ab & namesolid & vbCrLf
bằng:
if len(ab) = 0 then ab = namesolid else ab = ab & namesolid & vbCrLf
VB.Net bắt buộc không dùng mặc định trị cho biến. Vì vậy, lệnh Dim cho phép khởi trị luôn
Dim ab As String = ""
Em cảm ơn ạ. Em đã chỉnh được rồi ạ.
Ngay đoạn code trên là bạn đã xác định được là có đối tượng hay chưa rồi, cần chi thêm biến ab.
If Instr(...) Then
...
Else
Msgbox "No"
End if
Em tạo vòng lặp For nên nếu em có 5 đối tượng không có tên bắt đầu là "EXT-" vậy thì sẽ hiện thông báo 5 lần và vẫn ẩn đối với đối tượng không có tên bắt đầu là "EXT-".
 
Web KT

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

Back
Top Bottom