*

Help!

Problemen met uw pc? De vrijwilligers van oplossing.be zoeken gratis met u mee! 8)

Meer weten over Oplossing.be?

Hoe stel ik een vraag?

Recent

Auteur Topic: Code aanpassen  (gelezen 6222 keer)

Offline JeanPaul

  • Lid
  • *
  • Berichten: 67
  • Oplossing.be
Re: Code aanpassen
« Reactie #45 Gepost op: 18 augustus 2018, 12:14:10 »
zonder code en bestand is het moeilijk een oplossing te geven

Offline JeanPaul

  • Lid
  • *
  • Berichten: 67
  • Oplossing.be
Re: Code aanpassen
« Reactie #46 Gepost op: 18 augustus 2018, 12:26:19 »
Verander in de macro eens
a = Cells(21, 1).CurrentRegion.Value
naar
    a = Range("A21:F" & Range("A" & Rows.Count).End(xlUp).Row)
dan werkt die wel, in je voorbeeld bestand is kolom C volledig leeg, currentRegion is dan alleen "A21:B37",
vandaar dat a(i,6) buiten bereik valt.
toch mooi van VBA dat die u dat vertelt.

Offline tonnie

  • Lid
  • *
  • Berichten: 81
  • Geslacht: Man
  • Oplossing.be
Re: Code aanpassen
« Reactie #47 Gepost op: 18 augustus 2018, 12:31:21 »
Leo ik weet al wat het probleem is:

Als de lijst geen opmerkingen heeft in kolom c dus dan gaat het fout.



Hoe los ik op als kolom c leeg is toch gewoon ze ding doen.

En hoe los ik op als ik als ik helemaal niks heb hij een msgbox geeft met niks te bestellen.


ha net te laat :P

Ik heb nog wel iets als dit nodig:

if txt =nothing then
msgbox "Er is niets te bestellen"
exit sub
else
end if

« Laatst bewerkt op: 18 augustus 2018, 13:12:20 door tonnie »

Offline tonnie

  • Lid
  • *
  • Berichten: 81
  • Geslacht: Man
  • Oplossing.be
Re: Code aanpassen
« Reactie #48 Gepost op: 18 augustus 2018, 13:25:13 »
Ik heb er dit van gemaakt maar dat kan best eleganter of niet?

Sub finale()

    Dim a, i As Long, txt As String, w
    a = Cells(21, 1).CurrentRegion.Value
    ''a = Range("A21:F" & Range("A" & Rows.Count).End(xlUp).Row)
    Range("A21:F" & Cells(Rows.Count, 1).End(xlUp).Row).Clear
    With CreateObject("Scripting.Dictionary")
        .CompareMode = 1
        For i = 1 To UBound(a, 1)
       
            txt = Join(Array(a(i, 1), a(i, 6)), Chr(2))
            If Not .exists(txt) Then
                .Item(txt) = VBA.Array(a(i, 1), " ", " ", a(i, 4), a(i, 5), a(i, 6))
            Else
                w = .Item(txt): w(3) = w(3) + a(i, 4)
                .Item(txt) = w
            End If
        Next
        a = .items: i = .Count
    End With
   
    If Range("F22") = "" Then
    MsgBox "Er is niets te bestellen"
    Exit Sub
    Else
    End If
  Range("a21").Resize(i, 6).Value = Application.Index(a, 0, 0) ''range = welke rij hij wegschrijft
End Sub
« Laatst bewerkt op: 18 augustus 2018, 13:55:57 door tonnie »

Offline RedHead

  • Ambassadeur
  • *****
  • Berichten: 1.776
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re: Code aanpassen
« Reactie #49 Gepost op: 18 augustus 2018, 14:01:49 »
Maak van...
  a = Cells(21, 1).CurrentRegion.Value
...deze...
  a = Cells(21, 1).CurrentRegion.resize(,6).Value
______________________________

Groet, Leo

Offline tonnie

  • Lid
  • *
  • Berichten: 81
  • Geslacht: Man
  • Oplossing.be
Re: Code aanpassen
« Reactie #50 Gepost op: 18 augustus 2018, 14:37:24 »
Hoi Leo,

Ja dat werkt ook goed, net als die van JeanPaul.

  a = Range("A21:F" & Range("A" & Rows.Count).End(xlUp).Row)
Ik heb die van JeanPaul gebruikt en alles loopt als een tierelier, ook de beveiliging bij geen bestelling zit goed.

Ik laat het zo het is en ga weer verder bouwen, thanks allemaal was weer gezellie :thumbsup:

Offline pitufo

  • Oplosser
  • ****
  • Berichten: 564
  • Geslacht: Man
Re: Code aanpassen
« Reactie #51 Gepost op: 18 augustus 2018, 19:56:53 »
Wat ook altijd kan helpen is een paar reacties lezen en niet enkel de laatste :
uit reactie 46 van JeanPaul (12.26 u.) :
Citaat
Verander in de macro eens
Code: [Selecteer]

a = Cells(21, 1).CurrentRegion.Value
naar
    a = Range("A21:F" & Range("A" & Rows.Count).End(xlUp).Row)

dan werkt die wel, in je voorbeeld bestand is kolom C volledig leeg, currentRegion is dan alleen "A21:B37",

uit reactie 41 van bibi (9.50 u.)
Citaat
In de code die je onlangs zelf als finale oplossing hebt aangegeven staat
a = Cells(21, 1).CurrentRegion.Value als code, en
'a = Range("A21:F" & Range("A" & Rows.Count).End(xlUp).Row) als commentaar
Keer dat eens om.
"De computer doet wel degelijk wat je hem vraagt,
 maar NIET wat je DENKT dat je hem vraagt"

Offline tonnie

  • Lid
  • *
  • Berichten: 81
  • Geslacht: Man
  • Oplossing.be
Re: Code aanpassen
« Reactie #52 Gepost op: 19 augustus 2018, 23:31:40 »
@Pitufo

Ik heb ze allemaal geprobeerd en dacht dat ze het goed deden, ja ik heb ze ook omgewisseld.

Op zich gaat het goed tot er niks meer te bestellen is, dan gaat het met beide codes verkeerd.
In een ander topic (zie Raadsel) vertelde ik dat mijn filter in rij 20 af en toe niet werkt, dat is oa ook deze rij!
Of dat filter er nu in zit of na deze macro maakt niet uit als er maar een filter in komt.

In het voorbeeld staan beide codes, en er achter staat wat ze fout doen.
Wellicht komt dat filter probleem ook hier vandaan.



Offline pitufo

  • Oplosser
  • ****
  • Berichten: 564
  • Geslacht: Man
Re: Code aanpassen
« Reactie #53 Gepost op: 20 augustus 2018, 09:57:44 »
Hallo Tonnie,
Mijn opmerking was ook een heel klein beetje voor JeanPaul bedoeld : enkele uren nadat ik je een specifiek advies had gegeven kreeg je van hem identiek hetzelfde.
Anderzijds : dat zou jou in principe ook moeten geruststellen dat het een correct advies was  ;)

Wat je nieuw probleem betreft (want dat IS het : we hebben je nu al meermaals een correcte code bezorgd die aan je toenmalige eisen voldeed, en dat het nu niet meer werkt komt omdat je dingen toevoegt waar eerder totaal geen sprake van was) : zo wil je bijvoorbeeld een melding krijgen dat er niets te bestellen is als er niets te bestellen is  ;D . De code die je daarvoor (vermoedelijk zelf) hebt toegevoegd staat NA de code die de samenvatting maakt van de te bestellen zaken. Die moet daar uiteraard VOOR staan, en als blijkt dat niets te bestellen is mag de de overige code niet uitgevoerd worden. Wat je daar nu bijvoorbeeld krijgt is dat in
a = Range("A21:F" & Range("A" & Rows.Count).End(xlUp).Row)
Range("A" & Rows.Count).End(xlUp).Row gelijk is aan 18 waardoor je wel heel vreemde resultaten moet krijgen.
Wat denk je ? Zelf eens proberen of je dat in orde krijgt ?


« Laatst bewerkt op: 20 augustus 2018, 12:28:56 door pitufo »
"De computer doet wel degelijk wat je hem vraagt,
 maar NIET wat je DENKT dat je hem vraagt"

Offline tonnie

  • Lid
  • *
  • Berichten: 81
  • Geslacht: Man
  • Oplossing.be
Re: Code aanpassen
« Reactie #54 Gepost op: 20 augustus 2018, 10:42:13 »
Je hebt helemaal gelijk en ik zal jullie hier niet meer mee lastig vallen.

iig bedankt voor het antwoord.

Offline pitufo

  • Oplosser
  • ****
  • Berichten: 564
  • Geslacht: Man
Re: Code aanpassen
« Reactie #55 Gepost op: 20 augustus 2018, 11:16:02 »
Wacht een momentje : kom je er echt zelf niet uit, dan kijken we natuurlijk wel verder !
M.a.w. ik bedoelde gewoon dat je er op langere termijn waarschijnlijk meer van opsteekt als je probeert sommige van onze tips zelf toe te passen.
"De computer doet wel degelijk wat je hem vraagt,
 maar NIET wat je DENKT dat je hem vraagt"

Offline RedHead

  • Ambassadeur
  • *****
  • Berichten: 1.776
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re: Code aanpassen
« Reactie #56 Gepost op: 20 augustus 2018, 14:25:01 »
TIP... Leer debuggen in VBA! Dus regel voor regel door je code lopen in de VBE en zien wat de variabelen voor waarde geven en wat eventuele subs voor handelingen uitvoeren. Zo kan je zien wat er gebeurt en leer je dus om oplossingen te verzinnen óf dat je een foute volgorde in je procedures hebt.
______________________________

Groet, Leo

 


www.combell.com