2010-11-19 19 views

cevap

3
var isExecuted = false 
for each element in sarray 
    if ... then 
    if Not isExecuted Then 
     --do stuff 
     isExecuted = true 
    end if 
    end if 
next element 
+1

Eğer tüm döngü yapmak zorundaysa, o zaman, 'işten çıkma' yordamının rutininin son satırı olarak ekleyin. – ForEachLoop

2
flag = true 
For each ... 
    if flag 
     do whatever with first element 
     flag = false 
    endif 
    do what you want with all elements ... including the first 
next 
2

muhtemelen bunu yapmanın daha iyi bir yolu yoktur ama doğru olarak dışarı başlayacak ve eğer açıklamada yanlış olarak ayarlanmış olsun bir boolean değişken first_time sahip olabilir. Daha sonra seni doğru anladıysam Eğer N unsurları var

If first_time = True Then 
    Stuff 
End If 
+0

bu vba değil, değil mi? –

+0

Daha çok sahte kod gibiydi, mantık aynı olsa da ... – user472875

+0

@belisarius: Aslında, bu soruda bugüne kadar tek VBA kodu parçası bu. Senin derlenmeyecek. Ne de CDeutsch's. – GSerg

2

kontrol edebilir ve sadece ilk öğe için bazı işlemi gerçekleştirmek istiyoruz. Bunu yapmak istediğin gibi yapmak, işlemci zamanının israfıdır.

Yeni bir boole değişkeni eklemeden mantığınızı yeniden yazmanızı öneririm. Daha temiz ve hızlı. Örneğin, bu gibi bir şey:

Dim intCount As Integer  

If (some condition) Then 
    DoSomething with sarray(0) 
For intCount = 1 To sarray.Length 
    //Do something 
Next intCount 
+0

Dizinin ilk nesnesi değil, koşulu karşılayan ilk. Peki eğer durum doğruysa ilk olan sarray (5) ise? – user472875

+1

Şartı karşılayan ilk unsur olduğunu kabul edersiniz, ama dürüst olmak gerekirse ... arasında bir şey olabilir ve eğer kullanıcı gerçekten durumun gerçekte olduğunu söylemediğinden, cevabımın geçerli kaldığını düşünüyorum. – Wodzu

İlgili konular