Sửa vòng lập For... Next ?

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
Mọi người sửa giúp em vòng lặp sau với ạ.
Em cho chạy vòng lặp như Code dưới :
Mã:
For i = 1 To oParameters.UserParameters.Count
        If oParameters.UserParameters.Item(i).Name <> "length2" Then
            Set oUserParam = oParameters.UserParameters.AddByValue("length2", 6, kMeterLengthUnits)
        Else
            MsgBox " test"
        End If
Nhưng khổ nỗi là nếu oParameters.UserParameters.Item(1).Name <> "length2" thì tạo 1 "length2" (Set oUserParam = oParameters.UserParameters.AddByValue("length2", 6, kMeterLengthUnits)) và oParameters.UserParameters.Item(2).Name <> "length2" thì tạo 1 "length2_1" ....

Cho em hỏi mình chạy hết vòng lặp 1 lần rồi mới chạy câu lệnh "Set oUserParam = oParameters.UserParameters.AddByValue("length2", 6, kMeterLengthUnits)" ạ.

Em cảm ơn.

Mã:
'Code đầy đủ
Private Sub CommandButton2()

' Get the Parameters object.  Assumes a part or assembly document is active.
    Dim oParameters As Parameters
    Set oParameters = ThisApplication.ActiveDocument.ComponentDefinition.Parameters   
    ' Create a user parameter
    Dim oUserParam As UserParameter
    Dim i As Integer
    Dim binh As Variant
    
If oParameters.UserParameters.Count = 0 Then
    Set oUserParam = oParameters.UserParameters.AddByValue("length2", 6, kMeterLengthUnits)
Else
    For i = 1 To oParameters.UserParameters.Count
        If oParameters.UserParameters.Item(i).Name <> "length2" Then
            Set oUserParam = oParameters.UserParameters.AddByValue("length2", 6, kMeterLengthUnits)
        Else
            MsgBox " test"
        End If
    Next
End If
    ' Update the document.
    Call ThisApplication.ActiveDocument.Update
End Sub
 
Nếu tìm thấy <> "length2" thì gán và thoát vòng lặp luôn. Exit for.
 
Nếu tìm thấy <> "length2" ở i = 1 sau đó Exit for nhưng "length2" lại có ở i = 3 thì sao ạ.

Có thể tôi hiểu sai ý đồ code của bạn. Vì tôi thấy dòng code đầu nếu oParameters= 0 thì chỉ thêm 1 dòng "length2" vào oUserParam. Ở câu kế tiếp chỉ cần phát hiện "<>" là thêm 1 dòng thôi.
Bạn phát biểu lại ý đồ code xem.
 
Lần chỉnh sửa cuối:
Có thể tôi hiểu sai ý đồ code của bạn. Vì tôi thấy dòng code đầu nếu oParameters= 0 thì chỉ thêm 1 dòng "length2" vào oUserParam.
Bạn phát biểu lại ý đồ code xem.
Trường hợp 1 : "oParameters.UserParameters.Count = 0" thì sẽ tạo 1 dòng "lenght2" vào oUserParam.
Trường hợp 2 : "oParameters.UserParameters.Count > 0" ( Ví dụ : có 3 giá trị) thì chạy vòng lặp For .Nếu 3 giá trị đó <> "length2" thì thêm 1 dòng "length2" vào oUserParam.
 
Trường hợp 2 : "oParameters.UserParameters.Count > 0" ( Ví dụ : có 3 giá trị) thì chạy vòng lặp For .Nếu 3 giá trị đó <> "length2" thì thêm 1 dòng "length2" vào oUserParam.

Tức là toàn bộ giá trị phải khác "length2" thì mới thêm 1 dòng "length2"? Nếu vậy thì theo cách của tôi là tạo thêm 1 biến phụ boolean để kiểm tra.
Vd:

Mã:
Dim blnThem As Boolean
blnThem = True
If = 0 Then
   blnThem = True  '--> không cần dòng này cũng ok.
Else
   For i = 1 to .Count
      If Name = "length2" Then
         blnThem = False
         Exit for
      End If
   Next i
End If

If blnThem Then
oUserParam.Add "length2"
End if
 
Tức là toàn bộ giá trị phải khác "length2" thì mới thêm 1 dòng "length2"? Nếu vậy thì theo cách của tôi là tạo thêm 1 biến phụ boolean để kiểm tra.
Vd:
Mã:
Dim blnThem As Boolean
blnThem = True
If = 0 Then
   blnThem = True  '--> không cần dòng này cũng ok.
Else ....
Em chạy được rồi ạ. Sẵn cho em hỏi luôn. Em thử dùng mảng Array để chạy thử thì cũng chạy được như Code dưới. Em không hiểu lắm về mảng Array cho lắm, anh giải thích giúp em được không ạ.
Mã:
Dim arr As Variant 
    arr = Array(oParameters.UserParameters.Count)
If oParameters.UserParameters.Count = 0 Then
    Set oUserParam = oParameters.UserParameters.AddByValue("length2", 6, kMeterLengthUnits)
Else
    For i = 1 To UBound(arr)
        If oParameters.UserParameters.Item(i).Name <> "length2" Then
            Set oUserParam = oParameters.UserParameters.AddByValue("length2", 6, kMeterLengthUnits)
            ElseIf oParameters.UserParameters.Item(i).Name = "length2" Then
        End If
    Next
 
Tức là toàn bộ giá trị phải khác "length2" thì mới thêm 1 dòng "length2"? Nếu vậy thì theo cách của tôi là tạo thêm 1 biến phụ boolean để kiểm tra.
Vd:

Mã:
Dim blnThem As Boolean
blnThem = True
If = 0 Then
   blnThem = True  '--> không cần dòng này cũng ok.
Else
   For i = 1 to .Count
      If Name = "length2" Then
         blnThem = False
         Exit for
      End If
   Next i
End If

If blnThem Then
oUserParam.Add "length2"
End if
Bạn khong cần phải thêm biến phụ.
Chỉ cần xét i, nếu i > oParameters.UserParameters.Count thì là vòng lặp đã thông suốt, kể cả trường hợp Count = 0.
 
Như thế này xem sao:

------------
PHP:
    For i = 1 To oParameters.UserParameters.Count
        If oParameters.UserParameters.Item(i).Name <> "length2" Then Goto Addlength
    Next
If oParameters.UserParameters.Count = 0 Then
  Addlength: Set oUserParam = oParameters.UserParameters.AddByValue("length2", 6, kMeterLengthUnits)
End If
Bài đã được tự động gộp:

Hoặc:
PHP:
For i = oParameters.UserParameters.Count To 1 Step - 1
    If oParameters.UserParameters.Item(i).Name <> "length2" Then Goto Addlength
Next
If I = 0 Then
  Addlength: Set oUserParam = oParameters.UserParameters.AddByValue("length2", 6, kMeterLengthUnits)
End If
 
Lần chỉnh sửa cuối:
Như thế này xem sao:

------------
PHP:
    For i = 1 To oParameters.UserParameters.Count
        If oParameters.UserParameters.Item(i).Name <> "length2" Then Goto Addlength
    Next
If oParameters.UserParameters.Count = 0 Then
  Addlength: Set oUserParam = oParameters.UserParameters.AddByValue("length2", 6, kMeterLengthUnits)
End If
Bài đã được tự động gộp:

Hoặc:
PHP:
For i = oParameters.UserParameters.Count To 1 Step - 1
    If oParameters.UserParameters.Item(i).Name <> "length2" Then Goto Addlength
Next
If I = 0 Then
  Addlength: Set oUserParam = oParameters.UserParameters.AddByValue("length2", 6, kMeterLengthUnits)
End If

Không được ạ. Nếu "length2" đã có sẵn thì Set oUserParam = oParameters.UserParameters.AddByValue("length2", 6, kMeterLengthUnits) sẽ thêm 1 "length2_1" ạ.
 
Hay là như thế này:
PHP:
For i = 1 To oParameters.UserParameters.Count
    If oParameters.UserParameters.Item(i).Name = "length2" Then Goto Final
Next
Set oUserParam = oParameters.UserParameters.AddByValue("length2", 6, kMeterLengthUnits)
Final:
 
Web KT

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

Back
Top Bottom