Just nu i M3-nätverket
Gå till innehåll

Begränsa en loop


Dezon1

Rekommendera Poster

Hej!

 

Med risk för att bli dumförklarad så har jag inte hittat någon lösning på mitt problem.

 

Makrot gör Bl.a. en sak.

Den skapar en markering utifrån hur måga rader som har samma cellinnehål.

 

Mitt problem kan definieras enligt följande:

Om INGEN cell har givet innehåll (stPgr) så vill jag att den hoppar en hel hög med rader nedåt i koden (utanför loopen)

 

Det som händer nu är att den söker till sidans slut och ger felmeddelande när den kommer dit och ingen cell är identifierad.

 

Därmed går den inte heller vidare i koden och gör annat som den skall göra.

 

Så jag är ute efter två saker:

 

Hur talar jag om för VBA att om inte programnamnet finns i cellerna så skall den inte heller skapa rangen utan istället gå vidare till nästa uppgift. (förmodligen en GOTO, men hur definierar jag VAR den skall gå.

 

När loopen kommer till cell M300 så är tabellen slut, och då behöver den inte leta längre. Hur skriver jag det?

 

' Letar efter första cell med värdet stPgr
If stPgr = "" Then Exit Sub

   Range("M4").Select
   Do Until ActiveCell.Value = stPgr

   ActiveCell.Offset(1, 0).Select

   Loop

   ActiveCell.Offset(0, -1).Select

   Set rnStart = ActiveCell

Länk till kommentar
Dela på andra webbplatser

Hej, om du vet området som ska genomsökas behöver du inte loopa, använd Excels inbyggda sökfunktion istället. Typ:

 

Sub Search()
   Dim hit As Range
   Set hit = Range("M4:M15").Find(What:="b", MatchCase:=False)
   If hit Is Nothing Then
       MsgBox ("Ingen träff!")
   Else
       hit.Select
   End If
End Sub

Hälsningar

/Johan

Länk till kommentar
Dela på andra webbplatser

Ove Söderlund

Nu tänkte jag göra det lite enkelt för mig, texten här nedan är kopierad från Excel 2003-hjälpen, har f.n. inte tillgång till nyare Excel :) .

 

Visst går det att lösa med GoTo-sats, men det är inte att föredra att ha en sådan lösning. Visst finns det situationer där det kan vara tillämpligt, men precis som Excel-hälpen beskriver, det är inte "bra kod-manér" att använda sig av GoTo, tänk i termer som "spagetti-kod a la 80-tal".

 

Från Excel 2003-hjälpen:

GoTo Statement

Branches unconditionally to a specified line within a procedure.

 

Syntax GoTo line

The required line argument can be any line label or line number.

 

RemarksGoTo can branch only to lines within the procedure where it appears.

 

Note

Too many GoTo statements can make code difficult to read and debug. Use structured control statements (Do...Loop, For...Next, If...Then...Else, Select Case) whenever possible.

 

 

Kodexempel från Excel 2003-hjälpen.

Sub GotoStatementDemo()

   Dim Number, MyString

   Number = 1     ' Initialize variable.

   ' Evaluate Number and branch to appropriate label.
   If Number = 1 Then GoTo Line1 Else GoTo Line2

Line1:
   MyString = "Number equals 1"
   GoTo LastLine    ' Go to LastLine.

Line2:
   ' The following statement never gets executed.
   MyString = "Number equals 2"

LastLine: 
   Debug.Print MyString    ' Print "Number equals 1" in the Immediate window.

End Sub

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...