[excel vba] cellen uitlezen, berekenen en uitvoeren

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

  • Blerp
  • Registratie: Mei 2003
  • Niet online

Blerp

I exist out of spite

Topicstarter
ben ff bezig in excel en k blijf op het volgende hangen:

ik wil in vba van sheet1!d12 de waarde uit laten lezen (bijvoorbeeld "paard") en als die waarde erin staat op sheet2!a3 de waarde van sheet3!a1/sheet1!d15 laten uitvoeren... ben al een halve dag bezig met tweakers uitpluizen, van de msdn word ik echt niet wijs en zo geweldig ben ik ook weer niet in vba

deze berekening uiteraard ook al gewoon direct in excel proberen te laten doen, maar dat was niet practisch. Het zal dus in vba moeten omdat er in dezelfde if later nog meer komt te staan. Als ik DIT gedeelte begrijp kom ik iig een heel stuk verder :)

Insert vies grapje hier


  • Woudloper
  • Registratie: November 2001
  • Niet online

Woudloper

« - _ - »

Je kan eenvoudigerwijs op de volgende manier een cell van een specifiek sheet uitlezen, zie:

Visual Basic:
1
strTest = Sheets("sheet1").Cells(4, 12)


Vervolgens kan je dan bijvoorbeeld een IF statement schrijven die een vergelijking doet hiermee, dus:

Visual Basic:
1
2
3
If strTest = "Paard" Then
    'hier je code uitvoeren
End If

  • Blerp
  • Registratie: Mei 2003
  • Niet online

Blerp

I exist out of spite

Topicstarter
ik zat maar te kloten met

if sheet1!d12 = "paard" then

maar nu werkt het :D
thnx

edit: het uitlezen gaat prima, nu nog een waarde in een cel laten zetten...
code:
1
2
3
4
5
6
strTest = Sheets("Sheet1").Cells(4, 12)
If strTest = "paard" Then
sheet2!d9="olifant"           <- ff een excelcode gebruikt voor wat ik bedoel 
else
sheet2!d9="luipaard"          <- ff een excelcode gebruikt voor wat ik bedoel 
end if

en zijn ipv olifant en luipaard ook excelformules als =sheet1!d9/sheet2!e3 enzo te gebruiken? of wordt het platte tekst?

[ Voor 74% gewijzigd door Blerp op 02-03-2005 00:30 ]

Insert vies grapje hier


  • CoRrRan
  • Registratie: Juli 2000
  • Laatst online: 02-06 20:28

CoRrRan

Don't Panic!!!

Dit voorbeeld wordt platte tekst. Je kan ook hetvolgende doen (als je in de actieve sheet wilt werken):
Visual Basic:
1
Range("A1").Formula = "Sheet1!D9/Sheet2!E3"
of (als je in een niet-actieve sheet werkt)
Visual Basic:
1
Sheets("Sheet1").Range("D12").Formula = "Sheet1!D9/Sheet2!E3"

-- == Alta Alatis Patent == --


  • Blerp
  • Registratie: Mei 2003
  • Niet online

Blerp

I exist out of spite

Topicstarter
k heb dit er nu van gemaakt, maar hij doet nog steeds helemaal niets... Zelfs geen foutmelding (volgens mij is dat wel goed) maar er wordt ook niets in planner!D7 gegooid... Wat heb ik verkeerd gedaan?

code:
1
2
3
4
5
6
Sub Knop25_BijKlikken()
strLaminaat = Sheets("Formulier").Cells(4, 12)
If strLaminaat = "Tundra" Then
Sheets("Planner").Range("D7").Formula = "=(Formulier!D9/Data!E6)+1"
End If
End Sub


edit:
na wat gekloot blijkt het aan de IF formulering te liggen... de rest werkt gelukkig helemaal, maar het IF gedeelte niet. Weet iemand hoe ik dit moet formuleren dat de if wel werkt? MI was dit het logischte waar ik op kon komen...

[ Voor 28% gewijzigd door Blerp op 02-03-2005 20:27 ]

Insert vies grapje hier


  • Blerp
  • Registratie: Mei 2003
  • Niet online

Blerp

I exist out of spite

Topicstarter
ok, sorry voor het nu al schoppen, maar k ben er de hele tijd mee bezig geweest en ik word er GEK van! alles al zo ongeveer geprobeert wat ik in andere vba proggies hier op got zag, maar niets wil werken... AAAAAARGH!!!

Insert vies grapje hier


  • KingRichard
  • Registratie: September 2002
  • Laatst online: 17-08 19:31

KingRichard

former Duke of Gloucester

Dit is uit mijn hoofd gedaan, omdat ik Excel niet bij de hand heb. Ik weet 97% zeker dat dit werkt. ;)
Visual Basic:
1
2
3
4
5
6
7
8
9
Sub Knop25_BijKlikken()

If Sheets("Formulier").Range("D12").Formula = "Tundra" Then

   Sheets("Planner").Range("D7").Formula = "=(Formulier!D9/Data!E6)+1"

End If

End Sub
Met andere woorden, het gebruik van de variabele strLaminaat kun je overslaan, en blijkbaar had die variabele ook nog eens de verkeerde waarde (namelijk een cel i.p.v. een string uit een cel). Tips:
  1. Leer debuggen! Zet als eerste commando Stop in de code en ga de Sub regel voor regel af met F8. Op deze manier had je kunnen zien dat niet aan je If-voorwaarde voldaan werd.
  2. Gebruik Debug.Print in je code om tijdens de uitvoering wat variabelen te checken.
  3. Als je aan variabelendeclaratie had gedaan was de foute celverwijzing ook aan het licht gekomen, omdat Sheets("Formulier").Cells(4, 12) een cel is, en geen string.
  4. Train je linkerringvinger om binnen .01 seconden de F1-knop te vinden als iets niet lukt. :)

[ Voor 6% gewijzigd door KingRichard op 02-03-2005 23:29 ]

a horse! a horse! my kingdom for a horse! (exeunt)
[got.profile] | [t.net.profile] | [specs]


Verwijderd

Rubberenkip schreef op woensdag 02 maart 2005 @ 22:13:
ok, sorry voor het nu al schoppen, maar k ben er de hele tijd mee bezig geweest en ik word er GEK van! alles al zo ongeveer geprobeert wat ik in andere vba proggies hier op got zag, maar niets wil werken... AAAAAARGH!!!
op voorwaarde dat alles in 1 spreadsheet staat:
Visual Basic:
1
2
3
4
5
Sub Knop25_BijKlikken()
  If ucase(Sheets("Formulier").range("d12").value) = "TUNDRA" Then
    Sheets("Planner").Range("D7").Formula = "=(Formulier!D9/Data!E6)+1"
  End If
End Sub
voor de rest zie ik niet direct iets wat problemen kan opleveren. als de voorwaarde getest met de if-clausule onwaar is, wordt er met deze programmaregel niets in geplaatst in de cel d7 op blad planner. maar ik veronderstel dat dat de bedoeling is. maar is het werkelijk noodzakelijk dit met vba te doen?

  • Blerp
  • Registratie: Mei 2003
  • Niet online

Blerp

I exist out of spite

Topicstarter
thnx! ik was zelf al gekomen tot
code:
1
2
3
4
5
Sheets("formulier").Select
If Range("d12").Value = "Tundra" Then
Sheets("Planner").Range("D7").Formula = "=(Formulier!D9/Data!E6)+1"
Sheets("Planner").Range("f7").Value = "=data!e5"
End If

maar dit is weer korter en nu ik het lees is het helemaal duidelijk dat ik die string niet nodig heb maar dat ik direct de waarde uit de cel kan lezen en verkelijken met de waarde die ik als voorwaarde heb opgegeven.

nu gaat het zeker wel lukken geloof ik 8)

Insert vies grapje hier

Pagina: 1