Avatar billede swamboo Seniormester
06. november 2003 - 22:33 Der er 30 kommentarer og
2 løsninger

VBA - find første tomme felt

Ja, hvordan gør man det??

Jeg har d4:d16 og skal skrive i første tomme felt - er der en fiks sætning til det??
Avatar billede swamboo Seniormester
06. november 2003 - 22:34 #1
Altså en sætning til at FINDE feltet!!
Avatar billede jkrons Professor
06. november 2003 - 22:39 #2
Hvis du allerede står i d4 kan du bruge denne

Selection.End(xlDown).Offset(1, 0).Activate

Hvis du ikke står i d4 kan du bruge

Range("d4).Activate
Selection.End(xlDown).Offset(1, 0).Activate
Avatar billede kabbak Professor
06. november 2003 - 22:43 #3
Sub SidsteRække()
Range("A1").Select
Selection.End(xlDown).Offset(1, 0).Select
End Sub
Avatar billede jkrons Professor
06. november 2003 - 22:44 #4
Det går dog galt, hvs den celle du starter i, fx D4 er blank, eller hvis den første blanke er lige under den, du står i.
Avatar billede kabbak Professor
06. november 2003 - 22:44 #5
jeg er for laaangsom ;-))
Avatar billede jkrons Professor
06. november 2003 - 22:44 #6
kabbak :-)
Avatar billede swamboo Seniormester
06. november 2003 - 22:46 #7
Hmm - den kan jeg ikke lige finde ud af...

Min plan: Jeg har:
If Target = Range("c3") Then
felt = Range("c3").Value

felt skulle så gerne skrives i første tomme felt i D4-d16 - Men jeg kan ikke finde ud af at bruge dit fine exempel  :-(
Avatar billede jkrons Professor
06. november 2003 - 22:51 #8
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target = Range("c3") Then
        felt = Range("c3").Value
    End If
    For Each c In ActiveSheet.Range("d4:d16").Cells
        If IsEmpty(c) Then
            c.Value = felt
            Exit Sub
        End If
    Next c
End Sub
Avatar billede kabbak Professor
06. november 2003 - 22:52 #9
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$3" Then
Range("D4").Select
Selection.End(xlDown).Offset(1, 0) = Range("c3").Value
End If
End Sub

et forslag
Avatar billede jkrons Professor
06. november 2003 - 22:56 #10
kabbak-> Din kode har samme skavank som min første, den fejler hvis D4 eller D5 er tomme.
Avatar billede kabbak Professor
06. november 2003 - 22:57 #11
ja, men din sætter værdier ind hvergang du klikker ind i C3
Avatar billede jkrons Professor
06. november 2003 - 22:59 #12
Præcis. Og din skriver i D9, hvis der står noget i D8, også selv om D4, D5, D6 og D7 er tomme :-) Så helt perfekt er det ikke :-)
Avatar billede kabbak Professor
06. november 2003 - 23:00 #13
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$3" Then
Range("D4").Select
If Range("D4") <> "" Then
Selection.End(xlDown).Offset(1, 0) = Range("c3").Value
End If
Range("D4") = Range("c3").Value
End If
End Sub

prøv den
Avatar billede swamboo Seniormester
06. november 2003 - 23:01 #14
kabbak >> hvorfor "opdaterer" din kode når man klikker IND i feltet og ikke når man har ændret værdien og trykker enter??
Avatar billede swamboo Seniormester
06. november 2003 - 23:02 #15
NEJ - sorry - det var til Jkrons
Avatar billede swamboo Seniormester
06. november 2003 - 23:04 #16
kabbak - den fejler hos mig ved 2. indtastning
Avatar billede jkrons Professor
06. november 2003 - 23:05 #17
Det gør den fordi jeg bruge selection_change. Det var en fejl. Jeg skulle selvfølgfelig have brugt change. altså

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target = Range("c3") Then
        felt = Range("c3").Value
    End If
    For Each c In ActiveSheet.Range("d4:d16").Cells
        If IsEmpty(c) Then
            c.Value = felt
            Exit Sub
        End If
    Next c
End Sub
Avatar billede kabbak Professor
06. november 2003 - 23:05 #18
jkrons > jeg har hukket lidt fra dig, men nu er den ok

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$3" Then
  For Each c In ActiveSheet.Range("d4:d16").Cells
        If IsEmpty(c) Then
            c.Value = Range("c3").Value
            Exit Sub
        End If
    Next c
End If
End Sub
Avatar billede jkrons Professor
06. november 2003 - 23:06 #19
Husrtigst igen :-)
Avatar billede kabbak Professor
06. november 2003 - 23:08 #20
jaa, men jeg kommenterer også bare for at holde dig i ilden ;-))
Avatar billede swamboo Seniormester
06. november 2003 - 23:12 #21
Kabbak - din virker!!
Jkrons - første gang man indtaster kommer det på ALLE feleterne d4:d16

Det er helt flovt jeg kun satte 15 point med al det besvær...
Hvis i lægger et svar hver får i begge 15 - ok??  ;-)

1000 tak - det har været sjovt at følge med på sidelinien!!!!!
Avatar billede jkrons Professor
06. november 2003 - 23:14 #22
Lige et spørgsmål? Hvad nu når alle celler i området D4:D16 er fyldt ud?
Avatar billede kabbak Professor
06. november 2003 - 23:14 #23
ok med mig
Avatar billede swamboo Seniormester
06. november 2003 - 23:15 #24
Det sad jeg også og tænkte på - men den kan jo udvides til D65536 så det går nok...
Avatar billede jkrons Professor
06. november 2003 - 23:17 #25
Det er i orden med mig at dele :-)

Men du kan bruge denne, som skriver i en tom celle i området hvis en sådan findes, eller skriver videre i D17, hvis alle celler i området er brugt :-)

Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Address = "$C$3" Then
    On Error GoTo newcell
        ActiveSheet.Range("d4:d16").Cells.SpecialCells(xlCellTypeBlanks).Activate
       
        For Each c In ActiveSheet.Range("d4:d16").Cells
        If IsEmpty(c) Then
            c.Value = Range("c3").Value
            Exit Sub
        End If
    Next c
    End If

    Exit Sub

newcell:
    If Err.Number = 1004 Then
        Range("d4").Select
        Selection.End(xlDown).Offset(1, 0).Value = Range("c3").Value
        Exit Sub
    End If
Avatar billede jkrons Professor
06. november 2003 - 23:18 #26
Og her var det så min tur til at stjæle fra kabbaks første forslag :-)
Avatar billede swamboo Seniormester
06. november 2003 - 23:26 #27
jkrons - den kan ikke finde tomme D5 hos mig?!?
Men nu vi er i gang - er der et sted man kan finde ud af hvad linie nr. linien blev skrevet?? Bliver det "gemt" et sted??
Avatar billede kabbak Professor
06. november 2003 - 23:30 #28
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$3" Then
  For Each c In ActiveSheet.Range("d4:d16").Cells
        If IsEmpty(c) Then
            c.Value = Range("c3").Value
            Msgbox "Gemt i " & C.row  ' fortæller rækken
            Exit Sub
        End If
    Next c
End If
End Sub
Avatar billede jkrons Professor
06. november 2003 - 23:31 #29
Den kan sagtens finde en tom D5 hos mig. et er ikke noget i koden, der gemme celleadressen. Og under alel omstændigheder er info væk, når koden er kørt færdig med mindre du gemmer den i en variabel eller i en celle i arket.

Hvis du har brug for at gemme det til senere brug, så tilføje denne linie lige efter linien hvor du skriver i cellen. Så gemmes rækkenummeret i A1.:

Range("a1") = c.Row
Avatar billede swamboo Seniormester
06. november 2003 - 23:38 #30
1000 tak for jeres deltagelse. Det virker som jeg havde tænkt - men det jeg trode var et let spørgsmål resulterede i 29 indlæg!!

Så endnu engang MANGE TAK!!
Avatar billede kabbak Professor
06. november 2003 - 23:38 #31
selv tak :oP
Avatar billede jkrons Professor
06. november 2003 - 23:39 #32
Velbekomme :-)

Selv på de mest enkle spørgsmål er det muligt at finde komplcerede løsninger :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester