Gå til innhold

Foto

Excel VBA som egentlig SKAL virke?


4 svar i denne tråden

#1 trn100

trn100

    Bruker

  • Medlemmer
  • 4 941 innlegg
  •   21. september 2001

Skrevet 2. oktober 2019 - 19:29

Hei.

Jobber med et prosjekt hvor jeg bruker userforms for å oppdatere tabeller og har en kode som av en eller annen ubegripelig årsak ikke fungerer? Bruker nesten den samme koden for å legge til nye navn og fødselsdager og det fungerer, men å oppdatere/endre eksisterende får jeg ikke til?

Userformen har en listbox hvor jeg klikker for å hente eksisterende info til ulike felter i userformen, f.eks. Navn, fødselsdag osv.

I userformen har jeg en knapp for å oppdatere tabellen og denne knappene virker i forhold til navn, men ingen andre celler enn navnet blir oppdatert med det endrede innholdet??

I koden har jeg lagt inn en ekstra linje bare for å sjekke at det blir skrevet noe til raden i arket, og denne fungerer samt navnet som også blir oppdatert, men ikke noe av de i mellom?

Begriper det ikke, så hvis noen har tips hører jeg gjerne fra dere! :-)
 

Private Sub cmdEndre_Click()

'Application.ScreenUpdating = False

If Me.txtID = "" Then
MsgBox "Det finnes ingen data å endre. Klikk et navn.", vbInformation, "Månedsplan"
Exit Sub
End If

If Me.txtNavn = "" Then
MsgBox "Du må taste inn et navn.", vbInformation, "Månedsplan"
Exit Sub
End If

Dim FinnVerdi As Range
Set FinnVerdi = A005000.Range("A3:A1000").Find(what:=Me.txtID.Value, LookIn:=xlValues, LookAt:=xlWhole)

With A005000
FinnVerdi.Offset(0, 1).Value = Me.txtNavn
FinnVerdi.Offset(0, 2).Value = DateValue(Me.txtFdag.Value)
FinnVerdi.Offset(0, 3).Value = Me.txtForeldre
FinnVerdi.Offset(0, 4).Value = Me.txtEPost
FinnVerdi.Offset(0, 10).Value = "Hallo"
End With

Call SorterBursdager
Call mndBursdager

Me.lstBarn.RowSource = "BursdagerUfiltrert"

Call TømSkjema

cmdLeggTil.Enabled = True

'Application.ScreenUpdating = True

End Sub

 


  • 0
"The true sign of intelligence is not knowledge but imagination"

#2 Harald Staff

Harald Staff

    Bruker

  • Medlemmer
  • 2 417 innlegg
  •   25. april 2005

Skrevet 3. oktober 2019 - 10:40

Hei

 

Nei si det... Vrient å vite uten det helt store bildet.

 

Jeg laget en nummerrekke i A i Sheet1 som test, og skrellet ned koden din til dette:

Sub Test()
Dim FinnVerdi As Range
Set FinnVerdi = Sheet1.Range("A1:A1000").Find(what:=9, LookIn:=xlValues, LookAt:=xlWhole)
MsgBox FinnVerdi.Row
FinnVerdi.Offset(0, 1).Value = "Harald"
FinnVerdi.Offset(0, 2).Value = "Fin fyr"
End Sub

Det funker, også når Sheet1 ikke er aktivt ark. With - end With gjør ingenting slik du har skrevet det, så fjern det.

 

Herfra kan jeg bare gi deg et par tips om feilsøking. Først, skriv alltid

 

Option Explicit

 

øverst i alle modulene dine. Excel blir mye strengere på å deklarere variabler (som du har inne allerede ser det ut som), men du får mye mer kvalifiserte feilmeldinger i retur. Gå Tools - Options og hak av for Require variable declaration, så gjør editoren dette automatisk fra nå av.

 

Så har jeg lagt inn en MsgBox midt i prosedyren for å stoppe koden på et kritisk punkt og vise en viktig variabel. Gjør dette mange steder nedover i koden, så ser du hvor langt ting virker og hvor ting begynner å svikte. Fjern dem igjen når alt funker.

 

Lykke til. Beste hilsen Harald


  • 0

#3 trn100

trn100

    Bruker

  • Medlemmer
  • 4 941 innlegg
  •   21. september 2001

Skrevet 4. oktober 2019 - 11:53

Hei Harald, og takk for svar!

Option Explicit er alltid på etter tidligere forslag fra deg og jeg får ingen feil når jeg kompilerer.

Jeg bruker som nevnt et skjema med en listbox når jeg henter data til input feltene i skjemaet, og etter at eventuelle data er endret skal dataene skrives til tabellen i regnearket. Når jeg bruker nesten den samme rutinen til å skrive inn en ny rad, fungerer også dette.

Skjemaet ser slik ut, og dataene blir riktig hentet ved klikk på en linje i Listboxen.

Skjermbilde.PNG

Jeg bruker denne koden hente dataene fra Listboxen til de øvrige feltene i skjemaet:

Private Sub lstBarn_Click()

cmdLeggTil.Enabled = False

Dim i As Integer

i = Me.lstBarn.ListIndex

Me.txtNavn.Value = Me.lstBarn.Column(1, i)
Me.txtFdag.Value = Format(Me.lstBarn.Column(2, i), "DD.MM.YYYY")
Me.txtForeldre.Value = Me.lstBarn.Column(3, i)
Me.txtEPost.Value = Me.lstBarn.Column(4, i)
Me.txtID.Value = Me.lstBarn.Column(0, i)

End Sub

Det merkelige er at om jeg bytter ut txtFdag og txtForeldre med en fast tekst (F.eks. FinnVerdi.Offset(0, 3).Value = "Test") i så blir cellene i tabellen overskrevet?

Bruker MsgBox trikset og den viser det samme som står i inputboksene i skjemaet før dataene blir skrevet til tabellen, men tabellen endrer seg altså ikke etter lagring?

Jeg bruker nesten den samme koden for å legge inn nye navn i tabellen bortsett fra at jeg da skriver til første ledige rad, og det fungerer helt fint. Det er altså kun når jeg vil endre i tabellen at jeg har problemer.

Takk igjen for gode tips! :-)


  • 0
"The true sign of intelligence is not knowledge but imagination"

#4 Harald Staff

Harald Staff

    Bruker

  • Medlemmer
  • 2 417 innlegg
  •   25. april 2005

Skrevet 4. oktober 2019 - 12:50

Hei igjen

 

Jeg overskuer ikke helt hvordan dette virker, verken mot regneark eller mot skjemaet internt. Men slik kan du skrive i en flerkolonnes listbox:


Me.lstBarn.List(3, 2) = "Harald"

Beste hilsen List(3, 2) :)


  • 0

#5 trn100

trn100

    Bruker

  • Medlemmer
  • 4 941 innlegg
  •   21. september 2001

Skrevet 5. oktober 2019 - 13:50

Hei igjen

 

Jeg overskuer ikke helt hvordan dette virker, verken mot regneark eller mot skjemaet internt. Men slik kan du skrive i en flerkolonnes listbox:


Me.lstBarn.List(3, 2) = "Harald"

Beste hilsen List(3, 2) :)

 

Den koden virket!  :) 

Legger like godt ved hele prosjektet. Driver og skriver om en del slik at enkelte variabelnavn etc. er endret i forhold til det som står over.

For enkelthetsskyld har jeg lagt inn en liten blå knapp på noen av arkene som starter Hovedmenyen hvorfra man kan starte "problem" formen med "Fødselsdager".

 

Det er KUN koden i userformen frmBarn jeg trenger hjelp til, så se bort fra alt det andre som på langt nær er ferdig.

frmBarn skal brukes til å legge til, endre og slette informasjon i arket Bursdager (A005000).

Det fungerer å legge til nye!
Det fungerer å slette!
Når jeg skal endre en post er det imidlertid KUN navnet som blir endret og jeg klarer ikke å se problemet?

Rowsource til Listboxen i skjemaet er den dynamiske listen BursdagerUfiltrert.

Takk på forhånd!  :) 

 

Vedlagt(e) fil(er)


Dette innlegget har blitt redigert av trn100: 5. oktober 2019 - 14:11

  • 0
"The true sign of intelligence is not knowledge but imagination"


0 bruker(e) leser denne tråden

0 medlemmer, 0 gjester, 0 skjulte brukere