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 | 'msg Dim OutApp As Object Dim OutMail As Object Dim strbody As String Dim FilenameStr As String Dim ccaddress As String Dim name As String MakeFileForEmail name = Range("D5") ccaddress = Range("N8") Set OutApp = CreateObject("Outlook.Application") OutApp.Session.Logon Set OutMail = OutApp.CreateItem(0) strbody = "Hi xxx," & vbNewLine & vbNewLine & _ runbody On Error Resume Next With OutMail .to = "xxx@xx.nl" .CC = ccaddress .BCC = "xxx@xx.nl" .Subject = "bladiebla request from " & name .Body = strbody .Display 'or use .Send End With On Error GoTo 0 MsgBox "Email sent to xxx, xxx and " & name & "!" Set OutMail = Nothing Set OutApp = Nothing End Sub |
onethische zaken kun je met alle programmeertalen. Maarja, daar doe je het (meestal) niet voor hequote:Op maandag 1 maart 2010 16:43 schreef Hi_flyer het volgende:
[ code verwijderd ]
De body van de e-mail maak ik in een subje. Het is dus vrij eenvoudig. Een nadeel is dat je besturingssysteem een waarschuwing geeft als je .send in plaats van .display doet. Anders zou je eenvoudig een macro kunnen schrijven waarmee je een mailserver aardig kan belasten/platleggen.
Overigens kan je als je wilt wel 'onetische zaken' uitvoeren met excel. Ik kan bijv (doe ik niet) mailtjes van collega's lezen mbv Excel of hun persoonlijke agenda inkijken, of hun 'my documents' leegtrekken.
quote:Op maandag 1 maart 2010 17:16 schreef qu63 het volgende:
in VBA is het ook leuk om autimagisch een random scheldwoord neer te gooien in je documentMaar dat werkt natuurlijk alleen als je op een gedeelde pc werkt..
Volgens de VBA help niet: http://msdn.microsoft.com/en-us/library/7ee5a7s1(VS.80).aspxquote:Op dinsdag 2 maart 2010 10:22 schreef ralfie het volgende:
@Hi_flyer
besef je wel dat dit
dim a, b, c as String
hetzelfde is als
dim a as variant, b as variant, c as string?
en je dus eigenlijk
dim a as string, b as string, c as string
bedoelt?
Verder nutteloze opmerking, maar wel een beetje snelheidswinst.
1 2 | ' a, b, and c are all Single; x and y are both Double |
quote:Different Types.
You can specify different data types for different variables by using a separate As clause for each variable you declare. Alternatively, you can declare several variables to be of the same type by using a common As clause. Each variable takes the data type specified in the first As clause encountered after its variablename part.
Dim a, b, c As Single, x, y As Double, i As Integer
' a, b, and c are all Single; x and y are both Double;
1 2 3 | a = 12 MsgBox TypeName(a) |
1 2 3 | a = 12 MsgBox TypeName(a) |
1 2 3 4 5 6 7 8 9 10 11 | Dim a, b, c As String a = 12 b = 12 c = 12 MsgBox TypeName(a) & TypeName(b) & TypeName(c) End Sub |
1 2 3 4 5 6 7 8 9 10 11 12 | Dim a As String Dim b, c As String a = 12 b = 12 c = 12 MsgBox TypeName(a) & TypeName(b) & TypeName(c) End Sub |
Leer arrays te gebruiken, dat heeft mij ontzettend veel ruimte en snelheid opgeleverd. Zeker als je bepaalde handelingen door een hele sheet wilt uitvoeren.quote:Op dinsdag 2 maart 2010 12:26 schreef Holy_Goat het volgende:
Even tussen haakjes: aangezien ik mezelf alles aangeleerd heb wat vba betreft:
zijn er wat stukken tekst die ik echt gelezen móet hebben? Ik heb vaak het idee dat ik nog best "ranzig" programmeer namelijk.
En momenteel doe ik alles nog in vba behorende bij office 2003. Zou ik stiekem wel eens een keer .net moeten gaan leren?
Verder nog een subvraagje:
Kan ik sub of subsubclasses maken in vba?
Voorbeeld: variabele diersoorten.kat.poot.lengte
De allerbelangrijkste eye-opener voor mij was dat een range in een keer omgezet kan worden naar een variant (als array)quote:Op dinsdag 2 maart 2010 12:26 schreef Holy_Goat het volgende:
Even tussen haakjes: aangezien ik mezelf alles aangeleerd heb wat vba betreft:
zijn er wat stukken tekst die ik echt gelezen móet hebben? Ik heb vaak het idee dat ik nog best "ranzig" programmeer namelijk.
1 2 3 4 5 6 7 8 | w = Range("A1:Z1502") For x = 1 To UBound(w) For y = 1 To UBound(w, 2) w(x, y) = w(x, y) * 26 + 45 / 7 + w(x, y) Next y Next x Range("AA1:AZ1502") = w |
1 2 3 4 | q = cell.Value cell.Offset(0, 26).Value = q * 26 + 45 / 7 + q Next cell |
quote:Op dinsdag 2 maart 2010 14:07 schreef ralfie het volgende:
[..]
De allerbelangrijkste eye-opener voor mij was dat een range in een keer omgezet kan worden naar een variant (als array)
Dim w as variant
w = range(a1:b2);
MsgBox w(1,1)
Helaas is mijn kennis van VBA te klein (nihil namelijk) om dit zelf verder uit te werkenquote:Op maandag 1 maart 2010 10:36 schreef Deetch het volgende:
[..]
Helaas geen tijd om uitgebreid te coderen.
Echter een principe schetsje ziet er mi als volgt uit.
[ code verwijderd ]
goedverdoemme moet kabouter wesley u dan ook alles voorkauwenquote:Op dinsdag 2 maart 2010 15:06 schreef qu63 het volgende:
[..]
Helaas is mijn kennis van VBA te klein (nihil namelijk) om dit zelf verder uit te werken
Kan iemand me op weg helpen?
Jaquote:Op dinsdag 2 maart 2010 15:43 schreef Deetch het volgende:
[..]
goedverdoemme moet kabouter wesley u dan ook alles voorkauwen
vlatsquote:
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 | opnieuw: Dim aantal As Integer Dim lengte As Integer Dim lowerbound As Integer Dim upperbound As Integer Set myRange = Range("A140:A867") aantal = InputBox("Geef aantal x-en") ' lengte = myRange.Cells.Count - 1 lowerbound = 140 upperbound = lowerbound + lengte ReDim myArray(aantal) As Integer 'LET OP: ![]() For i = 1 To aantal myArray ![]() Next i 'x-jes neerzetten For j = 1 To aantal ActiveSheet.Cells(myArray(j), 1).Value = "X" Next j 'check op aantal ingevulde x-en ivm rnd functie check = Application.WorksheetFunction.CountIf(myRange, "X") vraag = MsgBox("Wil je opnieuw laten invullen?" & vbNewLine & "Gevraagde aantal x-en: " & aantal & vbNewLine & "Aantal ingevulde x-en: " & check, vbRetryCancel) If vraag = vbRetry Then Range("A140:A867").Select Selection.ClearContents Range("A139").Select GoTo opnieuw End If End Sub |
je kunt 8x een range inlezen of 1x alle kolommen en die in vba splitsen in meerdere arrays. Geen idee welke sneller is, maar ik denk dat bij vele waarden de eerste methode het beste is.quote:Op dinsdag 2 maart 2010 19:06 schreef Holy_Goat het volgende:
**wacht op clever antwoord van ralphie op vraag**
1 2 3 4 5 6 7 8 9 10 11 | dim a1() as string,a2() as string,a3() as string 'je arrays redim a1(1 to ubound(alles)) redim a2(1 to ubound(alles)) redim a3(1 to ubound(alles)) for x=1 to UBound(alles) a1(x) = alles(x,1) a2(x) = alles(x,2) a3(x) = alles(x,3) next x |
quote:
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 | Dim rng As Range, aantal As Integer, aantalcellen As Integer, value As Integer rng = "A1:A100" 'vul hier je range in aantal = InputBox("Hoeveel xjes ?", "seriously", 0) Dim x As Variant x = Range("A1:A100") aantalcellen = UBound(x) If UBound(x, 2) > 1 Then MsgBox "Bereik is ongeldig, slechts support voor 1 kolom!" Exit Sub ElseIf aantal < 1 Or aantal >= aantalcellen Then MsgBox "Invoer is ongeldig, teveel of te weinig" Exit Sub End If Randomize Do value = Int(Rnd * aantalcellen) If Not x(value, 1) = "x" Then x(value, 1) = "x" aantal = aantal - 1 End If Loop While aantal > 0 Range("A1:A100") = x End Sub |
dus dit is veel sneller als bijvoorbeeld:quote:Op dinsdag 2 maart 2010 21:22 schreef ralfie het volgende:
[..]
je kunt 8x een range inlezen of 1x alle kolommen en die in vba splitsen in meerdere arrays. Geen idee welke sneller is, maar ik denk dat bij vele waarden de eerste methode het beste is.
Indien je gebruik maakt van variant = range(xxx) zit je altijd met een multidimensionale array, dus als je dat niet wilt, zul je de hele reut in een keer in moeten laden en daarna in vba met een for each je arrays maken
[ code verwijderd ]
ofzoiets
1 2 3 4 5 6 7 8 9 10 11 12 13 | do while cells(i,1) <>"" redim preserve array1(i-1) ... redim preserve array8(i-1) array1(i-1)=cells(i,1) ... array8(i-1)=cells(i,8) i=i+1 loop |
http://office.microsoft.com/nl-nl/excel/HP052089811043.aspxquote:Op woensdag 3 maart 2010 12:45 schreef EINZ het volgende:
Welke fomule pas ik toe voor de inverse cosinus in excel?
Neah! Inverse cosinus van 0,43 is iets van 64 graden, en boogcos geeft me als antwoord 1,12 aan.quote:Op woensdag 3 maart 2010 13:14 schreef DaFan het volgende:
[..]
http://office.microsoft.com/nl-nl/excel/HP052089811043.aspx
BOOGCOS() in NL.
ACOS() in EN.
Geometrie-noob aan Geometrie-expert:quote:Op woensdag 3 maart 2010 15:15 schreef EINZ het volgende:
[..]
Neah! Inverse cosinus van 0,43 is iets van 64 graden, en boogcos geeft me als antwoord 1,12 aan.
quote:Als u de boogcosinus wilt uitdrukken in graden, vermenigvuldigt u het resultaat met 180/PI() of gebruikt u de functie GRADEN.
Je kunt 1 kolom verdelen over drie via "Data" en "Tekst naar kolommen". Dan moet je de bewuste kolom selecteren. Maar:quote:Op woensdag 3 maart 2010 15:58 schreef ThatsMeThatsRight het volgende:
Casus!
Ik heb een werkblad met drie kolommen, kolom 1 is gevuld met getal, kolom 2 met tekst en nu de crux kolom 3 ook met tekst, maar dit zijn telkens 3 woorden die met een tab gescheiden zijn.
Ik wil dus graag de cellen in kolom C splitsen naar drie cellen met één woord.
Kan dat?
Is 20 en 50 altijd vast?quote:Op woensdag 3 maart 2010 16:01 schreef Ratjepoepe het volgende:
Volgende probleem.
Principe:
Opbrengsten periode 1 t/m 3 = 1.000
Opgebouwd uit een basisopbrengst plus extra opbrengst
Periode 1: basisopbrengst
Periode 2: basisopbrengst + 20
Periode 3: basisopbrengst + 50
Weet iemand met welke excel formule ik de basisopbrengst kan berekenen (als dit überhaupt mogelijk is)?
3b+70=1000quote:Op woensdag 3 maart 2010 16:01 schreef Ratjepoepe het volgende:
Volgende probleem.
Principe:
Opbrengsten periode 1 t/m 3 = 1.000
Opgebouwd uit een basisopbrengst plus extra opbrengst
Periode 1: basisopbrengst
Periode 2: basisopbrengst + 20
Periode 3: basisopbrengst + 50
Weet iemand met welke excel formule ik de basisopbrengst kan berekenen (als dit überhaupt mogelijk is)?
Ah okee. De afdeling feestneuzen dankt u.quote:Op woensdag 3 maart 2010 15:37 schreef DaFan het volgende:
Staat ook in de voorbeelden in de link die ik heb gegeven.
BOOGCOS(0,43)*(180/PI()) geeft wel 64,53 aan.
Ook GRADEN(BOOGCOS(0,43)) geeft dat antwoord.
[..]
Wederom wiskundequote:Op woensdag 3 maart 2010 16:12 schreef Ratjepoepe het volgende:
Ja, het was ook niet helemaal goed verwoord. Het gaat namelijk alleen om het principe, dit voorbeeld lukt me ook wel![]()
Het gaat om heel veel factoren die veranderen en over heel veel perioden dus onmogelijk om het op deze manier te doen. Ben dus eigenlijk echt op zoek naar een formule
F2 (edit) en daarna F4 (die elimineert stap voor stap de $-tekens)quote:Op woensdag 3 maart 2010 16:22 schreef Gitarist het volgende:
Ik heb een Excel werkblad waarop ik gegevens wil tonen uit een ander blad. Dit doe ik d.m.v. een verwijzing.
Het zijn echter getallen per maand, dus ik wil bij januari de formule van de verwijzing erin zetten en die dan vervolgens de formule doortrekken naar december, zodat in elke cel een verwijzing komt te staan naar de corresponderende cel in het bronblad.
Nu is mijn probleem echter dat Excel er standaard een absolute verwijzing van maakt (dus met $ in de formule), maar ik wil dat hij standaard een relatieve verwijzing ervan maakt, zodat ik kan doorvoeren.
Ik kan wel telkens die $ gaan weghalen, maar dat is nogal bewerkelijk.
Ik kan er in de opties niks van vinden... iemand een idee?
Ik gebruik Office 2003 in de Nederlandse taal.
Top! Bedankt voor je antwoord!quote:Op woensdag 3 maart 2010 16:57 schreef Twentsche_Ros het volgende:
[..]
F2 (edit) en daarna F4 (die elimineert stap voor stap de $-tekens)
Je kunt ook doen Ctrl-H (vervangen): vervang $ door (niks)
Maar:
Als je over de hele linie een relatieve verwijzing wil, moet je alleen de bovenste ont-$-en.
En dan copieer je de bovenste naar beneden.
Dan krijg je juist die relatieve verwijzing.
Als je eerst een hele rij absolute verwijzingen hebt (voorzien van allerlei $-tekens), en je gaat de $-tekens deleten, schiet je nog geen … op.
Dan blijft ie verwijzen naar 1 cel.
SPOILEROm spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.Kan dit ook wat netter? En eventueel: is er een manier om die waarde sowieso, onafhankelijk van de region setting, goed om te zetten? (nu laat ik even mogelijkheden als tekst vermeldingen 1000,00 1000.00 en 1000 buiten beschouwing. Wel een beetje consequentie is te eisen van de data downloaders)
Verder nog een vraagje
Is het wachten met een bep. tijd t nodig na een copy aanroep? Ik heb het idee dat het anders soms een beetjefout gaat in windows. Is dat onterecht?
ps: fncopyfile is een functie met errorhandler eromheen via
1
2
3Dim fs
Set fs = CreateObject("Scripting.FileSystemObject")
fs.CopyFile Source, Destination
.
aanroep met 'wacht ding erna'SPOILEROm spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.
[ Bericht 25% gewijzigd door Holy_Goat op 04-03-2010 20:30:50 ]
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |