Avatar billede gladhund Nybegynder
12. juli 2010 - 23:11 Der er 15 kommentarer og
1 løsning

Hvorfor gemmer koden kun een værdi...

Hej eksperter,

Jeg forsøger at gemme en række værdier i tekst- og combobokse fra en userform til et worksheet med klik på en kommandoknap.

Først findes den række hvor de rigtige data står (ud fra en unik ID værdi i en combobox "cbid" i userformen). Derefter forsøges at gemme værdierne fra userformens kontrolelementer i cellerne i kolonnerne til højre for kolonne B (som indeholder ID):

Dim celle2 As String

Range("B20").Select
Do Until ActiveCell.Value = ""
    ActiveCell.Offset(1, 0).Select
    celle2 = ActiveCell.Value
    If celle2 = cbid.Value Then
   
        Exit Do
    End If
Loop
With ActiveCell

    .Offset(0, 1).Value = txtnavn.Text
    .Offset(0, 2).Value = txtbeskrivelse.Text
'cbmål.Text = ActiveCell.Offset(0, 3).Value
'cbarbejdsgruppe.Text = ActiveCell.Offset(0, 4).Value
'cbstatus.Text = ActiveCell.Offset(0, 5).Value
'txtsti.Text = ActiveCell.Offset(0, 6).Value
'cbtype.Text = ActiveCell.Offset(0, 7).Value
'txtpdato.Text = ActiveCell.Offset(0, 8).Value
End With

Kan nogen sige hvorfor den kun bliver gemt den øverste værdi? De sidste er skrevet ud, det ved jeg, men de bliver heller ikke gemt hvis man aktiverer dem igen...

Thanx
Avatar billede Ialocin Novice
12. juli 2010 - 23:35 #1
Hej gladhund

Bare en skud i den mørke nattehimmel ...

Bliver der ikke blandet forskellige datatyper ??

Her tænker jeg på:
- Do Until ActiveCell.Value = "" 
> skal den tomme VALUE ikke være = null i stedet for ""

Og ...

- celle2 = ActiveCell.Value
> men celle2 er en string variabel - som tildeles en VALUE i stedet for en streng

og ...

- With ActiveCell

    .Offset(0, 1).Value = txtnavn.Text
> .Offset(0, 1).VALUE tildeles en streng.


Hvad om alle VALUE´s blev ændret til TEXT ????

Som sagt er det bare et sidste skud i bøssen inden sengetid :o)

mvh Nicolai
Avatar billede newbieatphp Nybegynder
13. juli 2010 - 11:34 #2
det nedester kode har du også udkommenteret:

'cbmål.Text = ActiveCell.Offset(0, 3).Value
'cbarbejdsgruppe.Text = ActiveCell.Offset(0, 4).Value
'cbstatus.Text = ActiveCell.Offset(0, 5).Value
'txtsti.Text = ActiveCell.Offset(0, 6).Value
'cbtype.Text = ActiveCell.Offset(0, 7).Value
'txtpdato.Text = ActiveCell.Offset(0, 8).Value

Den del af koden bliver ikke kørt igennem ... du skal lige fjerne ' foran dem alle.
Avatar billede gladhund Nybegynder
13. juli 2010 - 12:38 #3
Hey,

@Nicolai: Gode forslag - jeg prøver dem af og vender tilbage!

@newbieatphp: Thanx, men jeg forsøgte at skrive nederst i mit spgm at jeg godt er klar over at de er udkommenteret - jeg har blot skrevet "skrevet ud". Det er for at have så lidt variable i gang under fejlsøgningen
Avatar billede gladhund Nybegynder
13. juli 2010 - 12:56 #4
Nu har jeg forsøgt med datatyperne, men den gemmer stadig kun den første værdi, txtnavn!:


Dim celle2 As String

Range("B20").Select
Do Until ActiveCell.Text = Null
    ActiveCell.Offset(1, 0).Select
    celle2 = ActiveCell.Text
    If celle2 = cbid.Text Then
   
        Exit Do
    End If
Loop
With ActiveCell

    .Offset(0, 1).Value = txtnavn.Text
    .Offset(0, 2).Value = txtbeskrivelse.Text
'cbmål.Text = ActiveCell.Offset(0, 3).Value
'cbarbejdsgruppe.Text = ActiveCell.Offset(0, 4).Value
'cbstatus.Text = ActiveCell.Offset(0, 5).Value
'txtsti.Text = ActiveCell.Offset(0, 6).Value
'cbtype.Text = ActiveCell.Offset(0, 7).Value
'txtpdato.Text = ActiveCell.Offset(0, 8).Value
End With

Jeg kan ikke bruge Text i .Offset koderne, så får jeg "Object required". Jeg forstår det ikke :(
Avatar billede gladhund Nybegynder
13. juli 2010 - 13:00 #5
Det er som om den ikke vil skrive til arket efter EN .offset værdi er skrevet?
Avatar billede gladhund Nybegynder
13. juli 2010 - 13:07 #6
Der bliver også kun skrevet i den første celle (txtnavn.text) med den her kode:

Dim celle2 As Long

Range("B20").Select
Do Until ActiveCell.Value = Null
    ActiveCell.Offset(1, 0).Select
    celle2 = ActiveCell.Value
    If celle2 = cbid.Value Then
    ActiveCell.Select
        Exit Do
    End If
Loop

ActiveCell.Offset(0, 1).Select
ActiveCell.Value = txtnavn.Text
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = txtbeskrivelse.Text
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = cbmål.Text
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = cbarbejdsgruppe.Text
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = cbstatus.Text
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = txtsti.Text
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = cbtype.Text
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = txtpdato.Text
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = Format(Now, "dd-mmm-yyyy")
Avatar billede newbieatphp Nybegynder
13. juli 2010 - 13:42 #7
har du mulighed for at sende arket, så skal jeg prøve at kigge lidt på det.

Jeg er doven og gider ikke til at skulle lave en userform og alt det andet :)
Avatar billede gladhund Nybegynder
13. juli 2010 - 13:49 #8
hehe :). Helt sikkert. Send en mail til rasmus@2902.dk så sender jeg filen i et reply. Og tak :)
Avatar billede gladhund Nybegynder
13. juli 2010 - 14:04 #9
Har sendt nu - håber til den rigtige e-mailadresse.
Avatar billede gladhund Nybegynder
14. juli 2010 - 19:39 #10
newbieatphp - det virker bare nu - mange tak :). Smid et svar - og jeg opretter gerne en tråd med flere point for din indsats :)!
Avatar billede gladhund Nybegynder
14. juli 2010 - 19:40 #11
@Nicolai: Det gjorde ingen forskel mht datatyper :)
Avatar billede newbieatphp Nybegynder
14. juli 2010 - 19:55 #12
Det var så lidt :)
Avatar billede Ialocin Novice
27. juli 2010 - 22:58 #13
Hej I to :o)

Hvad var løsningen ???

mvh Nicolai
Avatar billede newbieatphp Nybegynder
28. juli 2010 - 18:08 #14
Problemet var, at den boks der vises, var sat til automatisk at skulle opdateres, og da navnet var en af de to ting som skulle vises, så blev en anden makro kørt selvom makroen til at gemme var igang.

Da det kun var en celle det drejede sig om, så ændrede vi blot på rækkefølgen af hvordan tingene blev gemt, således at navnet var det sidste der blev lagret og der ikke var flere ting i makroen der skulle udføres.

Så når navnet blev gemt, så blev listen også automatisk opdateret overfor brugeren.
Avatar billede Ialocin Novice
29. juli 2010 - 09:23 #15
Hej newbieatphp

Super, mange tak for info :o)

mvh Nicolai
Avatar billede gladhund Nybegynder
01. august 2010 - 18:23 #16
Hey :). Ferie - så jeg kommer lidt sent ind med svar, så tak til newbieatphp. Her er hans løsning helt konkret:

Idet du har lavet cbid_change til at skulle indeholde mere end blot id, så indgår netop navnet også i cbid_change.
Selvom der ikke bliver indsat et ny string under navn, så bliver den stadig ændret.

Som jeg ser det, så er der bl.a. følgende muligheder for at undgå problemet:

- At fjerne navn-listen fra listen i cbid (ikke mit foretrukne valg, da den kan være med til at hjælpe brugeren til at vælge den rigtige)

- Da det kun er navn-listen (udover id), som indgår i cbid-listen, så vælg at sætte navn til sit, således kommer koden til at se således ud:

ActiveCell.Offset(0, 2).Select
ActiveCell.Value = txtbeskrivelse.Text
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = cbmål.Text
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = cbarbejdsgruppe.Text
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = cbstatus.Text
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = txtsti.Text
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = cbtype.Text
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = txtpdato.Text
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = Format(Now, "dd-mmm-yyyy")
ActiveCell.Offset(0, -8).Select
ActiveCell.Value = txtnavn.Text

- Ellers kan du gøre det, at du har en række hvor du lager den valgte infomation, gemmer det der, også kopiere hele rækken op når der trykkes gem.

De sidste to løsninger burde virker uden problemer, vil nok selv vælge den midterste, da koden allerede er lavet dertil.
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