[vba/excel2k]kom er niet aan uit met de cells.count functie

Pagina: 1
Acties:
  • 111 views sinds 30-01-2008
  • Reageer

  • degroot
  • Registratie: December 2003
  • Niet online
ik ben in excel een offerte aan het maken
links komt een foto en rechts de informatie over het product.

met de volgende code kan ik als ik alles van de offerte heb ingevuld mooi een rij naar beneden en een nieuwe foto invoegen
code:
1
ActiveCell.Offset(1, -4).Range("A1").Select


dit werkt allemaal en de foto komt netjes onder de andere foto te staan.
maar soms hoeven niet alle gegevens ingevuld te worden waardoor de rij rechts van de foto korter is dan normaal.
als ik dus een foto invoeg overschrijft ie voor een gedeelte de andere foto.

nu was ik dus met cells.count aan het klooien zodat ie de aantal ingevulde cellen telt.
als dat bijvoorbeeld kleiner is dan 8 moet ie minimaal 10 cellen naar benenden om de foto opnieuw in te voegen.
is het aantal ingevulde cellen groter dan 8 dan hoeft ie maar 1 cel naar beneden om de foto in te voegen.

maar dit lukt juist niet.
ik weet ook niet precies wat ik fout aan de code heb gedaan. maar ik kom er ff niet meer aan uit!(kzal wel iets kleins weer eens over het hoofd hebben gezien)

dit is de cells.count code waar het allemaal om draait
code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
    Cells(6, 5).Select

    Range(Selection, Selection.End(xlDown)).Select
    
    aant = Selection.Cells.Count
    If aant.Value < "8" Then
    ActiveCell.Offset(1, -4).Range("A1").Select
    GoTo 13
    Else
    Cells(6, 5).Select
    ActiveCell.Offset(10, -4).Range("A1").Select
    GoTo 13
    End If


hoop dat jullie mij weer een beetje op weg kunnen helpen

www.degroot-it.nl


  • Dido
  • Registratie: Maart 2002
  • Laatst online: 19:08

Dido

heforshe

degroot schreef op 01 oktober 2004 @ 10:59:
als dat bijvoorbeeld kleiner is dan 8 moet ie minimaal 10 cellen naar benenden om de foto opnieuw in te voegen.
is het aantal ingevulde cellen groter dan 8 dan hoeft ie maar 1 cel naar beneden om de foto in te voegen.
code:
code:
1
2
3
4
5
    If aant.Value < "8" Then
    ActiveCell.Offset(1, -4).Range("A1").Select
    Else
    ActiveCell.Offset(10, -4).Range("A1").Select
    End If
Je code doet precies het tegengestelde van wat je schrijft :P

Waarom staan er trouwens die goto's in :?

[ Voor 4% gewijzigd door Dido op 01-10-2004 11:03 ]

Wat betekent mijn avatar?


  • Woudloper
  • Registratie: November 2001
  • Niet online

Woudloper

« - _ - »

Daarbij vraag ik mij af waarom je met een tekstuele verwijzing naar een getal werkt? De dubbele quotes om het getal acht mogen dus weg...

  • degroot
  • Registratie: December 2003
  • Niet online
jah sorry kzag net dat ik precies het omgekeerde bedoelde maar dan is het nu hopelijk wel duidelijk :9

ik zal voor de duidelijk heid de hele code posten zodat je snapt waarvoor de goto's ensow er voor zijn.
(ik ben geen nette programmeur dus de schoonheids prijs verdient ie niet :*)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
Private Sub CommandButton2_Click()
Range("A6").Select
'foto invoegen
12

Dim naam As String
naam = Application.GetOpenFilename()
ActiveSheet.Pictures.Insert(naam).Select
    Selection.ShapeRange.LockAspectRatio = msoTrue
    Selection.ShapeRange.Height = 198.75
    Selection.ShapeRange.Width = 264.75
    Selection.ShapeRange.LockAspectRatio = msoTrue
    Selection.ShapeRange.Height = 141.75
    Selection.ShapeRange.Width = 189#
    Selection.ShapeRange.Fill.Visible = msoFalse
    Selection.ShapeRange.Fill.Transparency = 0#
    Selection.ShapeRange.Line.Weight = 1.25
    Selection.ShapeRange.Line.DashStyle = msoLineSolid
    Selection.ShapeRange.Line.Style = msoLineSingle
    Selection.ShapeRange.Line.Transparency = 0#
    Selection.ShapeRange.Line.Visible = msoTrue
    Selection.ShapeRange.Line.ForeColor.SchemeColor = 64
    Selection.ShapeRange.Line.BackColor.RGB = RGB(255, 255, 255)
   
 'offerte formulier invullen
  ActiveCell.Offset(0, 4).Range("A1").Select

   'art nummer
   Dim artnr As String
   Selection.Font.bold = True
   ActiveCell.FormulaR1C1 = "Article nr:"
   ActiveCell.Offset(0, 1).Range("A1").Select
   artnr = InputBox("voer artikel nummer in. vb F01-034")
   ActiveCell.FormulaR1C1 = artnr
   ActiveCell.Offset(1, -1).Range("A1").Select
   
   'description
   Dim des As String
   Selection.Font.bold = True
   ActiveCell.FormulaR1C1 = "Description:"
   ActiveCell.Offset(0, 1).Range("A1").Select
   des = InputBox("geef een omschrijving vb girls jacket")
   ActiveCell.FormulaR1C1 = des
   ActiveCell.Offset(1, -1).Range("A1").Select
   
    'size range
10
   Dim sizerange As String
   Dim price As String
   
   srange = MsgBox("Size range met prijs toevoegen?", vbYesNo)
   If srange = vbYes Then
   Selection.Font.bold = True
   ActiveCell.FormulaR1C1 = "Size range:"
   sizerange = InputBox("size range vb 128-176")
   ActiveCell.Offset(0, 1).Range("A1").Select
   ActiveCell.FormulaR1C1 = sizerange
   ActiveCell.Offset(0, 1).Range("A1").Select
   ActiveCell.FormulaR1C1 = "Price"
   ActiveCell.Offset(0, 1).Range("A1").Select
   price = InputBox("vb 5.99 (in euro)")
   ActiveCell.FormulaR1C1 = price
   Selection.NumberFormat = "[$€-2] #,##0.00_-"
   ActiveCell.Offset(1, -3).Range("A1").Select
   GoTo 10
   If no Then GoTo 11
   End If
         
   ' outshell
11
   Dim outshell As String
   Selection.Font.bold = True
   ActiveCell.FormulaR1C1 = "outshell:"
   ActiveCell.Offset(0, 1).Range("A1").Select
   outshell = InputBox("voer de buitenstof in vb 100%nylon!")
   ActiveCell.FormulaR1C1 = outshell
   ActiveCell.Offset(1, -1).Range("A1").Select
   
   'lining
   Dim lining As String
   lining = MsgBox("wilt u de voering vermelden?", vbYesNo)
   If lining = vbYes Then
   Selection.Font.bold = True
   ActiveCell.FormulaR1C1 = "Lining:"
   lining = InputBox("hoeveel gram watten bevat de jas?")
   ActiveCell.Offset(0, 1).Range("A1").Select
   ActiveCell.FormulaR1C1 = lining
   ActiveCell.Offset(1, -1).Range("A1").Select
   End If
   
   'padding
   Dim padding As String
   padding = MsgBox("wilt u het aantal gram watten vermelden?", vbYesNo)
   If padding = vbYes Then
   Selection.Font.bold = True
   ActiveCell.FormulaR1C1 = "Padding:"
   padding = InputBox("hoeveel gram watten bevat de jas?")
   ActiveCell.Offset(0, 1).Range("A1").Select
   ActiveCell.FormulaR1C1 = padding
   ActiveCell.Offset(1, -1).Range("A1").Select
   End If
   
   'leverdatum
   Dim deldate As String
   deldate = MsgBox("wil je de leverdatum vermelden?", vbYesNo)
   If deldate = vbYes Then
   Selection.Font.bold = True
   ActiveCell.FormulaR1C1 = "Delivery date:"
   deldate = InputBox("leverdatum vb week30 2005")
   ActiveCell.Offset(0, 1).Range("A1").Select
   ActiveCell.FormulaR1C1 = deldate
   ActiveCell.Offset(1, -1).Range("A1").Select
   End If
   
   'packing:
   Dim packing As String
   packing = MsgBox("wil je de verpakking melden?", vbYesNo)
   If packing = vbYes Then
   Selection.Font.bold = True
   ActiveCell.FormulaR1C1 = "Packing:"
   packing = InputBox("hoe word het verpakt?")
   ActiveCell.Offset(0, 1).Range("A1").Select
   ActiveCell.FormulaR1C1 = packing
   ActiveCell.Offset(1, -1).Range("A1").Select
   End If
   
   'delivery conditions
   Dim delcon As String
   delcon = MsgBox("wil je de leveringsomstandigheden vermelden?", vbYesNo)
   If delcon = vbYes Then
   Selection.Font.bold = True
   ActiveCell.FormulaR1C1 = "Delivery Conditions:"
   delcon = InputBox("wat zijn de leveringsomstandigheden?")
   ActiveCell.Offset(0, 1).Range("A1").Select
   ActiveCell.FormulaR1C1 = delcon
   ActiveCell.Offset(1, -1).Range("A1").Select
   End If
   
   'payment conditions
   Dim payment As String
   payment = MsgBox("wil je de payment conditions vermelden?", vbYesNo)
   If payment = vbYes Then
   Selection.Font.bold = True
   ActiveCell.FormulaR1C1 = "Payment Conditions:"
   payment = InputBox("geeft de betalingsvoorwaarden vb 10% within 1 month?")
   ActiveCell.Offset(0, 1).Range("A1").Select
   ActiveCell.FormulaR1C1 = payment
   ActiveCell.Offset(1, -1).Range("A1").Select
   End If
   
   'details weergeven
   Dim detail As String
   ActiveCell.Offset(0, 0).Range("A1:D2").Select
   Selection.Merge
    With Selection
    .HorizontalAlignment = xlLeft
    .VerticalAlignment = xlTop
    .WrapText = True
    .Orientation = 0
    .AddIndent = False
    .IndentLevel = 0
    .ShrinkToFit = False
    .MergeCells = True
    End With
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    Selection.Font.bold = True
detail = "detail: " & InputBox("vrije tekst")
ActiveCell.FormulaR1C1 = detail
  
  'cellen tellen
   ' verwijzing naar sub cellentellen
    Cells(6, 5).Select

    Range(Selection, Selection.End(xlDown)).Select
    
    aant = Selection.Cells.Count
    If aant.Value < "8" Then
    ActiveCell.Offset(1, -4).Range("A1").Select
    GoTo 13
    Else
    Cells(6, 5).Select
    ActiveCell.Offset(10, -4).Range("A1").Select
    GoTo 13
    End If

   'nieuwe foto invoegen
13
   Dim ganaar As String
   ganaar = MsgBox("wil je een nieuwe offerte toevoegen?", vbYesNo)
   If ganaar = vbYes Then
   GoTo 12
   End If
   
End Sub

[ Voor 7% gewijzigd door degroot op 01-10-2004 11:34 ]

www.degroot-it.nl


  • Dido
  • Registratie: Maart 2002
  • Laatst online: 19:08

Dido

heforshe

Die goto 13's slaan nog steeds als een tang op een varken :?
Wat denk jij dat er bebeurt als je ze delete?

[ Voor 29% gewijzigd door Dido op 01-10-2004 11:40 ]

Wat betekent mijn avatar?


  • degroot
  • Registratie: December 2003
  • Niet online
jah idd zoals ik het nu bekijk slaan ze echt nergens op 8)7
beetje domme fout 8)7

als ik me "scriptje" uitvoer dan geeft ie aan dat het bij het volgend stukje code misgaat:
code:
1
If aant.Value > "8" Then

[ Voor 45% gewijzigd door degroot op 01-10-2004 11:48 ]

www.degroot-it.nl


  • Dido
  • Registratie: Maart 2002
  • Laatst online: 19:08

Dido

heforshe

En als je, zoals hierboven staat, die aanhalingstekens rond die 8 weglaat? (Het is immers een numerieke waarde, geen string ;) )

Wat betekent mijn avatar?


Verwijderd

if aant>8 then
of beter in dit geval zonder de tussenstap van toewijzing aan een variabele:
if Selection.Cells.Count>8 then
(maar het kan zelfs nog beter dan dat!)

je 'aant' is gewoon een variabele die het resultaat van de count bevat. een variabele is niet noodzakelijk een string, en is nooit een object (er zijn dus geen subojecten, methoden en eigenschappen zoals Value aan gebonden). aangezien count een waarde van het type long is, bevat aant ook gewoon deze waarde.

Verwijderd

Dido schreef op 01 oktober 2004 @ 13:14:
En als je, zoals hierboven staat, die aanhalingstekens rond die 8 weglaat? (Het is immers een numerieke waarde, geen string ;) )
dit zou eigenaardig genoeg wel gewerkt hebben. de vba engine zorgt wel voor impliciete typecasting om de vergelijking met succes te maken. (if aant>"8")

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 19:08

Dido

heforshe

Verwijderd schreef op 01 oktober 2004 @ 13:16:
dit zou eigenaardig genoeg wel gewerkt hebben. de vba engine zorgt wel voor impliciete typecasting om de vergelijking met succes te maken. (if aant>"8")
|:( Natuurlijk. Ik ben de laatste tijd verwend door de verplichting hier wel goed op te letten :P

Wat betekent mijn avatar?


  • degroot
  • Registratie: December 2003
  • Niet online
ik dank u vriendelijk allemaal
ben weer wat verder gekomen met mijn "scriptje"

www.degroot-it.nl

Pagina: 1