Toon posts:

[excel] VBA syntax error

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
########## Ik heb het probleem opgelost, ik dacht dat het misschien voor andere extreme newbies wel hanidg zou zijn om te zien

Beste mensen,

Ik wilde een macro schrijven in VBA maar had dit nog nooit gedaan. Nu is het niet meer nodig want ik heb de taak met de hand gedaan, maar nu wil ik ook weten hoe je het doet:D

Ik snap niet op welke manier ik mijn code moet schrijven zodat hij doet wat ik wil want ik heb (nog) weinig idee van hoe alles precies werkt. Als jullie mij hier mee zouden kunnen helpen zou dat geweldig zijn.

Heel erg bedankt!
-Jelle

De macro in woorden:

Selecteer cell C3,
Terwijl A < 5
Als geselecteerde cell leeg is, zet A naar A +1
kopieer de linker cel en die daarboven (-2. -1 met hoogte 2) # B2+B3
plak 2 cellen hoger dan geselecteerde cel #wat C3 is in dit geval en uiteindelijk worden B2+B3 op C1 en C2 geplakt)
Zoniet
A = 0
End als
Selecteer de cell 1 naar rechts #D4
Loop

Mijn code (Error is "Synhax Error":
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Sub Colum()
Workbooks("ROSproduction_timecourses_students_morning.xlsx").Activate
Dim U As Integer
U = 0

Dim I As Range
Set I = Cells(3, 1)

Dim Selection As Range

Do While U < 5
    If IsEmpty(I) Then
        U = U + 1
         I.Offset(-2, -1)Resize((1),(2)).Copy #Het probleem zit hier, ik kan niet offset met width gebruiken om wat voor                                 een reden dan ook. Maar ook zonder Resize doet hij het niet.
            I.Offset(2, 0).PasteSpecial xlPasteAll # en hier hetzelfde
            Else
        U = 0
        End If
    I.Offset(0, 1).Select
    Loop
End Sub

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Oplossing:Sub Colum()
Workbooks("ROSproduction_timecourses_students_morning.xlsx").Activate
Dim U As Integer
U = 0

Dim I As Range
Set I = Cells(3, 6)

Dim Selection As Range
Do While U < 5
If IsEmpty(I) Then
U = U + 1
I.Offset(-1, -1).Resize(2, 1).Copy
I.Offset(-2, 0).PasteSpecial xlPasteAll
Else
U = 0
End If
Set I = I.Offset(0, 1)
Loop
End Sub

[ Voor 14% gewijzigd door Lustucru op 01-12-2016 22:36 . Reden: code tags toegevoegd ]

Alle reacties


Acties:
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Verwijderd schreef op donderdag 1 december 2016 @ 21:55:
########## Ik heb het probleem opgelost, ik dacht dat het misschien voor andere extreme newbies wel hanidg zou zijn om te zien
Altijd fijn als mensen de zelf gevonden oplossing ook posten. :)

Zet ik er voor je codetags omheen en wijzig ik de titel, want 'mijn macro doet het niet' is niet zo heel erg inhoudelijk sterke titel.

Maar on-topic: weet je nu ook wat je hebt opgelost en waarom je oorspronkelijke versie eruit knalde? Dat is wellicht nog leerzamer dan een werkend stukje.

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Heel erg bedankt Lustucru!

Ja het probleem was het gebruik van Set I = Cells(3, 1), wat niet C3 is, waardoor hij soms naar cell 0 verwees. Dan kwam er een error bij de offset line, maar deze was uiteindelijk dus okay gebruikt.

Mvg, Jelle!

PS. Ik hoor het graag hoe deze code efficiënter kan!

Acties:
  • 0 Henk 'm!

  • Paultje3181
  • Registratie: November 2002
  • Laatst online: 18:15
Je hebt nu 3,6 (=F3) staan in je code, moet dit geen 3,3 zijn (=C3)?

Daarnaast heb je een infinite loop als rij 3 helemaal gevuld is...