webForumDet fria alternativet

Taxam för hjälp med koden

Kontorsprogram

11 svar · 361 visningar · startad av prls

Medlem sedan jan. 2000352 inlägg
Frågan#1

Hellö,

En förbättring jag har jobbat på senaste veckorna är följande: jag har lagt till en ”flersides”-formulär.. Pa varje sida finnes mellan 4 – 6 stycken Kryssrutor (CheckBox) med korresponderande textruta (TextBox).

Jag försöker få ”programmet” att göra följande:
Arbetsboken består av 10 sidor med “vätskebalans” som den aktiva, som öppnas då arbetsboken öppnas.

  • När boken öppnas visas endast sidan ”vätskebalans”.
  • När knappen ”vbl” trycks visas formuläret i egen ruta.

Då man tycker på en knapp på en sida skall följande hända:

  1. Kolla vilka av kryssrutorna är markerade
  2. Kolla efter den första ifyllda rutan i området E7:K7
  3. Sök i området B15:B36 efter ”checkbox..Caption”
  4. om ”checkbox..Caption” hittats så förflytta - på den rad där uttrycket hittats –till den kolumn i området E7:K7 där den första tomma cellen hittats och där fylla i ”TextBox.Value”
  5. om ej ”checkbox..Caption” hittats så skriv in detta i första tomma cellen i området B15:B36 och förflytta till den kolumn i området E7:K7 där den första tomma cellen hittats och där fylla i ”TextBox.Value”.
  6. Upprepa detta tills samtliga kryssrutor och textrutor…

Följande kod har jag kommit fram till senaste veckan:<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">. Private Sub Search_fill()
Dim wsBlad As Worksheet
Dim m As Range
Dim p As Range
Dim q As Range
Dim r As Range
Dim ctr As MSForms.Control
Dim txb As MSForms.Control

Set wsBlad = ThisWorkbook.Worksheets("vätskebalans")
Set mysearch = ctr.Caption
Set r = Application.WorksheetFunction.CountA(Range("E7:K7")) + 1
Set p=wsBlad.Range(”B15:B36”)
Set q= Application.WorksheetFunction.CountA(Range(”B15:B36”)) + 1

For Each ctr In MultiPage1.Pages(MultiPage1.Value).Controls
If TypeOf ctr Is MSForms.CheckBox Then
If ctr.Value true then
With p
Set m =.Find(What:=mysearch, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext)

If m is nothing then
Cells(q,0).Value=mysearch
Cells(0,r).Value=txb.Value
Else Cells (0,r).Value= txb.Value
End If
End If
End if
End with
Next ctr
End Sub
Problemet är att när jag trycker F5 i VBE får jag bara felmeddelande
Taxam för hjälp med koden

------------------
Tack på förhand!
Det är svårt när förmågan/kunskaperna vida överstiger idéerna/Peter

Medlem sedan jan. 2000352 inlägg
#2

Hej Dennis,
Hoppas Du har haft en bra sommar!.
”Dags” har hela tiden varit, har bara ägnat tiden åt att läsa boken, och försöka på egen hand. Jag köpte John Walkenbach :”XL2000 power programming with VBA”
Har lärt mig massor, men det är inte så lätt bara på egen hand….

Debugging och msgbox är en av sakerna som jag inte riktigt fattat – menar Du att jag bör sätta ett msgbox efter varje set?

r - range?
q - range??

Det var ju Du som lärde mig att definiera sådana områden som Range

/Peter

------------------
Tack på förhand!
Det är svårt när förmågan/kunskaperna vida överstiger idéerna/Peter

Medlem sedan jan. 2000352 inlägg
#3

Hej Dennis,
Låter som Du jobbar som lärare, eller?

Japp, är fullt nöjd med boken, även om vissa svagheter har jag upptäckt, bla variabel området

Ditt exempel:

Exempel:
Dim r as Range
Set r = 1

fattar jag tyvärr inte riktigt. När tilldelar jag r värdet 1??

Skulle Du kunna ge exempel på hur jag i mitt aktuella kod kunde använda mig av ditt tipps

Ett tips för debugging:
Sätt en msgbox för de olika variablerna när de har tilldelats värden samt stoppa koden direkt efter msgbox.

Som vanligt är jag ytterligt taxam för all din ovärderliga hjälp och råd

------------------
Tack på förhand!
Det är svårt när förmågan/kunskaperna vida överstiger idéerna/Peter

Medlem sedan jan. 2000352 inlägg
#4

Är detta upplägg bättre, kanske tom bra??<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">Private Sub Search_fill()
Dim wsBlad As Worksheet
Dim mysearch as String
Dim Datum As Range
Dim Sort As Range
Dim m As String
Dim rnCellD As Range
Dim ctr As MSForms.Control
Dim txb As MSForms.Control

Set wsBlad = ThisWorkbook.Worksheets("vätskebalans")
Set mysearch = ctr.Caption
Set Datum = wsBlad.Range("E7:K7")
For Each rnCellD In Datum
If Not IsEmpty(rnCellD) Then
Set Sort = Range(rnCellD.Offset(8, -3), rnCellD.Offset(42, -3))

For Each ctr In MultiPage1.Pages(MultiPage1.Value).Controls
If TypeOf ctr Is MSForms.CheckBox Then
If ctr.Value = true then
With Sort
Set m =.Find(What:=mysearch, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext)
If m is nothing then
Cells(sort,1).Value=mysearch
Cells(1, rnCellD).Value=txb.Value
Else Cells(1, rnCellD).Value=txb.Value
End If
End If
End if
End with
Next ctr
Next rnCellD
End Sub

------------------
Tack på förhand!
Det är svårt när förmågan/kunskaperna vida överstiger idéerna/Peter

Medlem sedan jan. 2000352 inlägg
#5

Dennis, Du är en klippa och måste tycka att jag är en otacksam jävul, men –vilket jag itne är
Men jag tror att jag ”behöver” msgbox för:

  1. i vilka celler som letas igenom (tex B20) med <font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">Set Sort = Range(rnCellD.Offset(8, -3), rnCellD.Offset(42, -3))
  2. i vilka celler resultatet skrivs med <font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600"> Cells(sort,1).Value=mysearch

Är och förblir dig evinnerlig tacksam
/Peter

------------------
Tack på förhand!
Det är svårt när förmågan/kunskaperna vida överstiger idéerna/Peter

Medlem sedan jan. 2000352 inlägg
#6

Dennis,
Jag försökte ikväll:
I projekt5.xls/formulär –mappen/UserForm1 satte jag in nedanstående:<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600"> Private Sub Search_fill()
Dim wsBlad As Worksheet
Dim mysearch As String
Dim Datum As Range
Dim Sort As Range
Dim m As String
Dim rnCellD As Range
Dim ctr As MSForms.Control
Dim txb As MSForms.Control

Set wsBlad = ThisWorkbook.Worksheets("vätskebalans")
Set mysearch = ctr.Caption
Set Datum = wsBlad.Range("E7:K7")
For Each rnCellD In Datum
If Not IsEmpty(rnCellD) Then
Set Sort = Range(rnCellD.Offset(8, -3), rnCellD.Offset(42, -3))
For Each rnCellD In Sort
MsgBox rnCellD.Adress
Next rnCellD
For Each ctr In MultiPage1.Pages(MultiPage1.Value).Controls
If TypeOf ctr Is MSForms.CheckBox Then
If ctr.Value = True Then
With Sort
Set m = .Find(What:=mysearch, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext)
If m Is Nothing Then
MsgBox Cells(Sort, 1).Address
Cells(Sort, 1).Value = mysearch
Cells(1, rnCellD).Value = txb.Value
Else: Cells(1, rnCellD).Value = txb.Value
End If
End If
End If
End With
Next ctr
Next rnCellD
End Sub

Private Sub CommandButton1_Click()
Search_fillEnd Sub
När jag Tryckte F5 fick jag felmeddelandet: Kompileringsfel: objekt krävs och mysearch (i Set mysearch = ctr.Caption) blev markerad. När jag sedan klickar på ok blir helaraden: ” Private Sub Search_fill()” överstruken med gul-penna. Så jag kan inte ens prova ”addresserna”
Vad gör jag för FEL???
/Peter

------------------
Tack på förhand!
Det är svårt när förmågan/kunskaperna vida överstiger idéerna/Peter

Medlem sedan jan. 2000352 inlägg
#7

men varför får jag fel mess på<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">Set mysearch = ctr.Caption

------------------
Tack på förhand!
Det är svårt när förmågan/kunskaperna vida överstiger idéerna/Peter

Medlem sedan jan. 2000352 inlägg
#8

Dennis,

klart bättre - dessutom har jag redan själv kommit på det...

MEN: nu bråkar msgboxalternativet<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">For Each rnCellD In Datum
If Not IsEmpty(rnCellD) Then
Set Sort = Range(rnCellD.Offset(8, -3), rnCellD.Offset(42, -3))
For Each rnCellD In Sort

MsgBox rnCellD.Adress
Next rnCellD Jag får hella tiden error:For används redanFor Each rnCellD In Sort
iof kommer formuläret upp, men jag kan ej fortsätta testandet

------------------
Tack på förhand!
Det är svårt när förmågan/kunskaperna vida överstiger idéerna/Peter

Medlem sedan jan. 2000352 inlägg
#9

Nu har jag ändrat <font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">

  1. Private Sub Search_fill()
  2. Dim wsBlad As Worksheet
  3. Dim mysearch as String
  4. Dim Datum As Range
  5. Dim Sort As Range
  6. Dim m As String
  7. Dim rnCellD As Range
  8. Dim ctr As MSForms.Control
  9. Dim txb As MSForms.Control
  10. Set wsBlad = ThisWorkbook.Worksheets("vätskebalans")
  11. Set Datum = wsBlad.Range("E7:K7")
  12. Set Datum = wsBlad.Range("E7:K7")
  13. For Each rnCellD In Datum
  14. If Not IsEmpty(rnCellD) Then
  15. Set Sort = Range(rnCellD.Offset(8, -3), rnCellD.Offset(42, -3))
  16. For Each ctr In MultiPage1.Pages(MultiPage1.Value).Controls
  17. If TypeOf ctr Is MSForms.CheckBox Then
  18. If ctr.Value = true then
  19. mysearch = ctr.Caption
  20. With Sortwith
  21. m =.Find(What:=mysearch, LookIn:=xlValues, _
  22. LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext)
  23. If m is nothing then
  24. Cells(sort,1).Value=mysearch
  25. Cells(1, rnCellD).Value=txb.Value
  26. Else Cells(1, rnCellD).Value=txb.Value
  27. End If
  28. End If
  29. End if
  30. End with
  31. Next ctr
  32. Next rnCellD
  33. End Sub

och då får jag “varningen inkompatibla typer" med m markerad på rad 23

------------------
Tack på förhand!
Det är svårt när förmågan/kunskaperna vida överstiger idéerna/Peter

Medlem sedan juli 200012 978 inlägg
#10

Hej Peter & Dennis
Det är sådana här inlägg som gör att det är värt att logga in då och då.
Bra exempel och öppen dialog.
Kunde man tänka sig att Peter la ut det färdiga resultatet som grädde på Moset??

------------------
GvdsSfdtTddv.

Medlem sedan jan. 2000352 inlägg
#11

Dennis,
jag är ledsen, det var inte alls meningen att förolämpa dig!! Är mycket tacksam för all övärderligt hjälp fr dig!!
Dessutom VET jag att du även finns på EXCEL-L . Min tanke var mera att se vartifrån jag får snabbare svar. Men som sagt om jag förolämpade dig på ngt sätt så ber jag om ursäkt!!

------------------
Tack på förhand!
Det är svårt när förmågan/kunskaperna vida överstiger idéerna/Peter

Medlem sedan jan. 2000352 inlägg
#12

Dennis,
faktiskt bara snabbare. Dessutom var jag i "villfarelsen" att Du kanske snabbare ser inlägget där än här

------------------
Tack på förhand!
Det är svårt när förmågan/kunskaperna vida överstiger idéerna/Peter

266 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)