• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

GoTo Komut Satır Numarası ?

Katılım
25 Ocak 2009
Mesajlar
110
Excel Vers. ve Dili
Excel-2007 Türkçe
Merhaba arkadaşlar benim sormak istediğim konu,

İki modulüm var Module1 ve Module2

Module1 deki

Sub a()

For j=1 To kesit_sayisi

If j=1 Then
Call Module2.b
ElseIf j>1 Then
GoTo Module2.b deki 47. satıra git demek istiyorum
End If

Fortran da GoTo şeklinde kod satırının başına kod satır numarası belirtilip o koda git denilebiliyordu.

Excel Visual Basic de bu iş nasıl yapılıyor acaba?

Teşekkürler

İyi çalışmalar
 
Böyle bir şeyin yapılıp yapılamadığını bilmiyorum ancak alternatif olarak o kısmı ayrı bir sub olarak tanımlayıp istediğiniz yerden çağırabilirsiniz
 
merhaba
ek dosyadaki gibi bir kod işinizi görür mü?

Kod:
Public deger As Integer

Kod:
Sub a()
deger = Sheets("Sayfa1").[a1]
Call Module2.b
End Sub

Kod:
Sub b()
Select Case deger
    Case "1": GoTo 10
    Case "2": GoTo 20
    Case "3": GoTo 30
End Select

10 MsgBox "merhaba"
Exit Sub
20 MsgBox "selam"
Exit Sub
30 MsgBox "günaydın"
End Sub
 

Ekli dosyalar

Teşekkürler janveljan ve uzmanamele ama tam olarak kodda nasıl düzenleyebilirim bulamadım yardımcı olabilir misiniz arkadaşlar kodun çalışma sırası şöyle

Hocam üç modulüm var.

Module1'de Donatı subroutine i var.
Sub Donatı()

For j=1 To Kesit_sayisi
' Kodlar var

For t=1 To nokta_sayisi(j)
' Kodlar var
Next

If j=1 Then
Call Module2.Beton()
ElseIf j>1 Then
GoTo Module2.Beton().47
' Hocam VB'de böyle bir yazım olmadığını biliyorum ama derdimi anlatmak için böyle yazdım Module2.Beton Subroutinein 47.kod satırına gitmek istiyorum.
End If

(46) Next

End Sub

Module2 de Beton Subroutine i var.

Sub Beton()

For j=1 To Module1.Kesit_sayisi
'Kodlar var
For t_beton=1 To nokta_sayisi(j)
' Kodlar var
Next

If j=1 Then
Call Module3.Toplam()
ElseIf j>1 Then
GoTo Module3.Toplam().49 -----> Module3deki Toplam() subroutinindeki 49. satıra gitmek istiyorum.
End If

(48) GoTo Module1.Donati().46 ------> Module1deki Donati() subroutinindeki 46.satıra, Next yazan satıra gelip subroutine i çağırdığımda j=1 den tekrar baştan başlamayıp nerde kaldıysa j değeri oradan devam etmesi için.

(47) Next

End Sub


Module3 de Toplam() adlı subroutine var.

Sub Toplam()

For j=1 To Module1.Kesit_sayisi

For t_toplam=1 To Module1.nokta_sayisi(j)
' Kodlar var
Next

GoTo Module2.Beton().48

(49) Next

End Sub

Hocam kodların işleme sırası bu şekilde olmalı. GoTo statement pek hoş karşılanmıyor ama daha şık bir çözüm nasıl olurdu bulamadım.

Yardımcı olacak arkadaşlara çok teşekkürler
 
Selamlar,

Bu tarz bir işlem için bence PUBLIC bir değer tanımlamalısınız. Sn. uzmanamele beyin önerdiği şekilde.

Boş bir modüle aşağıdaki satırı yazın.

Public Kontrol As Boolean


Donatı() isimli makronuzda kullandığınız ElseIf j>1 Then sorgusundan sonra aşağıdaki satırı yazın.

Kontrol = True
Call Module2.Beton()


Beton() isimli makronuzun ilk satırına aşağıdaki kodu ekleyin.

If Kontrol = True Then Go To 47

Aynı makronuzun 47. satırının başınada 47 rakamını ekleyin ve kodu çalıştırmayı deneyin.
 
Bir çözüm önerisi de benden,

If j=1 Then
Call Module3.Toplam()
ElseIf j>1 Then
Range("A1") = "büyük"
Call Module3.Toplam 'satırını ekleyin.
End If

ve Modül3.Toplam makrosunun en başına;
if Range("A1") = "büyük" then goto git 'yazın
49. satırın üstüne;
git:
yazın.

Böylece j>1 ise ilgili modül (modül3.toplam) çağırılacak. Çağırılan modül en başta A1 hücresine bakacak ve istenilen değer gerçekleşiyorsa (a1'de büyük yazıyorsa) 49. satırın olduğu yere giderek çalışmaya devam edecek.

gibi...
 
Teşekkürler arkadaşlar sorunu dediğiniz şekilde hallettim tekrar sağolun.

İyi çalışmalar
 
Geri
Üst