Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[excel 2007 + vba] problemen met lege cellen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo allemaal,

hoewel ik nieuw geregistreerd ben op dit forum sneup ik hier af en toe wel eens..

Momenteel ben ik bezig met een excel sheet die afspraken in een outlook 2007 agenda zet. Hoewel dit allemaal prima gaat houdt de module geen rekening met lege cells.

Je moet je voorstellen dat ik een soort van kalender heb gemaakt in excel, met de velden:


.Start = cel // tijd datum
.Duration = cel.Offset(0, 1) //aantal minuten voor de afspraak
.Subject = cel.Offset(0, 2) //onderwerp
.Location = cel.Offset(0, 3) //locatie
.ReminderSet = False
.Save


Dit is de module:


Sub MakeAppts()

Dim olApp As Object
Dim olAppt As Object
Dim cel As Object

Set olApp = CreateObject("Outlook.Application")

For Each cel In Intersect(ActiveSheet.UsedRange, ActiveSheet.[a2:a65536]).Cells
Set olAppt = olApp.CreateItem(1)
With olAppt
.Start = cel
.Duration = cel.Offset(0, 1)
.Subject = cel.Offset(0, 2)
.Location = cel.Offset(0, 3)
.ReminderSet = False
.Save
End With
Next


' Clean up...
MsgBox "Afspraken zijn aangemaakt in je Outlook agenda...", vbMsgBoxSetForeground
Set olNs = Nothing
Set olAppt = Nothing
Set olItem = Nothing
Set olApp = Nothing
End Sub

Weet iemand hier een oplossing voor?

Verwijderd

dit kan toch niet zo moeiljk zijn, heb je zelf al iets gevonden?
in any case, gewoon testen binnen de lus of de cel leeg is:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
For Each cel In Intersect(ActiveSheet.UsedRange, ActiveSheet.[a2:a65536]).Cells
if cel.value<>"" then
Set olAppt = olApp.CreateItem(1)
With olAppt
.Start = cel
.Duration = cel.Offset(0, 1)
.Subject = cel.Offset(0, 2)
.Location = cel.Offset(0, 3)
.ReminderSet = False
.Save
end if
End With
Next


trouwens originele manier om te zien hoeveel rijen er in kolom A zijn ingevuld.
zet code tussen codetags.

Verwijderd

Topicstarter
Mijn god :) ik ben helemaal niet thuis in vb, maar wel matig in excel ;-), deze opossing is idd simpel.
Wel wordt ik redelijk gek hehe..

de onderstaande code haalt de informatie uit "blad2" die in blad "planning" staan.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
For Each cel In Intersect(ActiveSheet.UsedRange, ActiveSheet.[a2:a65536]).Cells 
if cel.value<>"" then 
Set olAppt = olApp.CreateItem(1) 
With olAppt 
.Start = cel 
.Duration = cel.Offset(0, 1) 
.Subject = cel.Offset(0, 2) 
.Location = cel.Offset(0, 3) 
.ReminderSet = False 
.Save 
end if 
End With 
Next


Waar ik nu tegen aan loop is wanneer er niets is gepland op een datum dat de uitkomst voor die cel 0 is. de andere cellen zoals plaats, duur, datum zijn wel bezet, maar moeten verwaarloost worden. De cellen krijgen hun informatie namelijk uit functies soort gelijk aan deze:

code:
1
=planning!B14


Ik dacht dit met de volgende code opgelost te hebben, alleen dan wordt de afspraak niet in de outlook agenda gepland.

code:
1
2
3
4
5
6
7
Private Sub Worksheet_Calculate()
If Range("c2").Value = 0 Then
Rows("2:2").Value = ""
Else

End If
End Sub


Het leek allemaal goed, tot dat ik een nieuwe datum inplande, wat natuurlijk heel logisch is, is dat ook de =planning!B14 verdwenen zijn zodat de informatie niet wordt doorgepeeld naar blad2

Ik wordt redelijk moedeloos nu ik zelf geen oplossing weet te bedenken :/

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Verwijder dan niet, maar gebruik een (verborgen) hulpkolom. Of check meteen bij de bron: de planning sheet :)

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Verwijderd

de formulekolommen niet verwijderen uiteraard zoals F_J_K zegt, daarnaast voeg je deze nieuwe voorwaarde toe aan de reeds bestaande:
Visual Basic:
1
if (cel.value<>"") and (cel.value<>0) then 
het begint ondertussen toch wel langzaam gaan door te dringen mag ik hopen :) ?