11. december 2002 - 13:47Der er
7 kommentarer og 1 løsning
IF i makro!
Jeg fik en god hjælp tidligere på ugen med en kode der virkede perfekt. Den kører en tabel igennem og tjekker det sidste felt (6) for hvor mange kopier der skal genereres til ark to og kopierer derefter 2,3 og 4 til ark 2.
Denne kode prøvede jeg så at lave om i, så den kunne tjekke felt fire (postnummer) og give det en værdi i feltet efter (københavn K, Frederiksberg C etc.). I den vedlagte kode tjekker den kun for København K. Når jeg prøver at køre den, får jeg dog en fejl "Loop without Do" og det fatter jeg ikke et ord af for den ligner jo til forveksling den første kode! Derudover er jeg ikke sikker på at Set overhovedet eksisterer i VB (er vant til java). Nogen råd/forslag?
1. kode (den virker!) Public Sub SkrivHusstande()
Dim i, j, k, maxRk, antal As Integer
maxRk = ActiveSheet.UsedRange.Rows.Count k = 1
For i = 1 To maxRk antal = ActiveSheet.Cells(i, 6).Value j = 1 Do While j <= antal Range(Cells(i, 2), Cells(i, 4)).Copy Sheets(2).Cells(k, 1) j = j + 1 k = k + 1 Loop Next i
End Sub
2. kode, den der ikke virker :-) Public Sub CheckIndreBy()
Dim i, j, k, maxRk, postnr As Integer
maxRk = ActiveSheet.UsedRange.Rows.Count k = 1
For i = 1 To maxRk postnr = ActiveSheet.Cells(i, 6).Value j = 1 Do While j <= 2000 If postnr < 1500 Then Set ActiveSheet.Cells(i, 7) = "København K" j = j + 1 k = k + 1 Loop Next i
Do while sætningen j < 2000 er et forsøg på at få den til at virke, men uden resultat... Som i kan se er den nærmest en tro kopi af den første kode, men hvis en gad se den igennem ville jeg være meget taknemlig...
Du mangler en end if sætning. Det kan være det den brokker sig over selvom den skriver noget andet.
For i = 1 To maxRk postnr = ActiveSheet.Cells(i, 6).Value j = 1 Do While j <= 2000 If postnr < 1500 Then Set ActiveSheet.Cells(i, 7) = "København K" END IF j = j + 1 k = k + 1 Loop Next i
Tak det virkede, du får pointene... Men lige et followup spørgsmål: Hvis jeg vil indsætte flere IF sætninger Kan jeg så bare gøre som følgende:
Public Sub CheckIndreBy()
Dim i, j, k, maxRk, postnr As Integer
maxRk = ActiveSheet.UsedRange.Rows.Count k = 1
For i = 1 To maxRk postnr = ActiveSheet.Cells(i, 4).Value j = 1 Do While i <= maxRk If postnr < 2000 Then ActiveSheet.Cells(i, 7) = "Frederiksberg C" End If If postnr < 1800 Then ActiveSheet.Cells(i, 7) = "København V" End If If postnr < 1500 Then ActiveSheet.Cells(i, 7) = "København K" End If If postnr < 1000 Then ActiveSheet.Cells(i, 7) = "København C" End If j = j + 1 k = k + 1 Loop Next i
Eller er der en smartere måde? Den ovenfor virker til at skabe en uendelig løkke, men jeg er ikke helt klar over hvorfor det sker, for det eneste der er rettet Do While linjen og så de ekstra IF sætninger...
Det her burde være nok, Elpedro Jeg er ikke helt klar over hvad du bruger k til, men den kan du jo sætte ind igen.
Public Sub CheckIndreBy() Dim i As Long, j As Long, k As Long, maxRk As Long, postnr As Long
maxRk = ActiveSheet.UsedRange.Rows.Count For i = 1 To maxRk postnr = ActiveSheet.Cells(i, 4).Value Select Case postnr Case 1800 To 2000: ActiveSheet.Cells(i, 7) = "Frederiksberg C" Case 1500 To 1799: ActiveSheet.Cells(i, 7) = "København V" Case 1000 To 1499: ActiveSheet.Cells(i, 7) = "København K" Case Is < 1000: ActiveSheet.Cells(i, 7) = "København C" End Select Next i End Sub
Måske skulle du lige tilføje en linie under Case Is < 1000: ActiveSheet.Cells(i, 7) = "København C"
Case Else : "Ikke i Kbh."
Bemærk at jeg har dimmet alle dine variable, for i vba betyder Dim i, j, k, maxRk, postnr As Integer at i, j, k, maxRK at disse bliver dimmet som Variant og kun postnr bliver dimmet som integer.
Public Sub CheckIndreBy() Dim i As Long, maxRk As Long, postnr As Long
maxRk = ActiveSheet.UsedRange.Rows.Count For i = 1 To maxRk postnr = ActiveSheet.Cells(i, 4).Value Select Case postnr Case 1800 To 2000: ActiveSheet.Cells(i, 7) = "Frederiksberg C" Case 1500 To 1799: ActiveSheet.Cells(i, 7) = "København V" Case 1000 To 1499: ActiveSheet.Cells(i, 7) = "København K" Case 1 to 1000: ActiveSheet.Cells(i, 7) = "København C" Case Else : ActiveSheet.Cells(i, 7) = "" End Select Next i End Sub
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.