[VBA] Query bouwen van waardes in excel

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • tha_crazy
  • Registratie: Maart 2007
  • Laatst online: 20:15
Ik ben bezig om met VBA in Excel te proberen om een query op te bouwen.
Deze moet er als volgt uit gaan zien:
INSERT INTO Tabel (waarde1, waarde2, waarde3, waarde4) VALUES ('product','5','val1','val2'-'val3'-'val4')

Waarde 1 en 2 staan vast.
waarde 3 en 4 worden opgehaalt uit de excel.
waarde 3 wordt uit 1 cell gehaalt
Waarde 4 uit 3 andere.

Nu heb ik het volgende opgebouwt

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
Sub Test()
    Dim val1 As String
    Dim val2 As String
    Dim val3 As String
    Dim val4 As String
    
    Dim fullstring As String
        
    Range("I1").Select
    
    For x = 2 To 121
        'Hop from one cell to another to copy
        ActiveCell.Offset(1, 0).Select
        val1 = Selection.Copy
        ActiveCell.Offset(0, -4).Select
        val2 = ActiveCell.Copy
        ActiveCell.Offset(0, 1).Select
        val3 = ActiveCell.Copy
        ActiveCell.Offset(0, 1).Select
        val4 = ActiveCell.Copy

        ' Final string                
        fullstring = "INSERT INTO Tabel (waarde1, waarde2, waarde3, waarde4) VALUES ('product','5','val1','val2'-'val3'-'val4')"
             
        'Paste the fullstring
        ActiveCell.Offset(0, 4).Select
        ActiveCell.Value = fullstring

        ' Test to see if val1 has a value.
        ActiveCell.Offset(0, 1).Select
        ActiveCell.Value = val1

        ' return
        ActiveCell.Offset(0, -3).Select
               
        
    Next x
    
End Sub


het kan een beetje omslachtig zijn maar het zei zo, het moet gewoon even werken.
echter krijg ik in me fullstring alleen de waardes val1, val2-val3-val4.
dit klopt al niet

als ik nu een paste naar een andere cell maak krijg ik alleen de waarde true
hoe is dit makkelijk op te lossen.
ik kan op google al eventjes niks vinden (of ik google niet goed)

Acties:
  • 0 Henk 'm!

  • DanielG
  • Registratie: Oktober 2005
  • Laatst online: 08-09 15:36

DanielG

i = 0x5f3759df - (i>>1); ☠₧ℳ🀪❣

Visual Basic:
1
fullstring = "INSERT INTO Tabel (waarde1, waarde2, waarde3, waarde4) VALUES ('product','5','val1','val2'-'val3'-'val4')"


Deze regel gaat natuurlijk niet werken, VBA weet toch niet dat de tekst waarde1 geen variabele is en val1 wel een variabele.

Dit is hoe je strings aan elkaar kunt plakken
Visual Basic:
1
2
3
4
5
6
Dim val As String
Dim fullstring As String

val = "blabla"

fullstring  = "tekst tekst " & val & " tekst tekst"


De waarde van fullstring zal dan zijn: tekst tekst blabla tekst tekst

http://xyproblem.info/


Acties:
  • 0 Henk 'm!

  • tha_crazy
  • Registratie: Maart 2007
  • Laatst online: 20:15
DanielG schreef op donderdag 27 mei 2010 @ 13:44:
Visual Basic:
1
fullstring = "INSERT INTO Tabel (waarde1, waarde2, waarde3, waarde4) VALUES ('product','5','val1','val2'-'val3'-'val4')"


Deze regel gaat natuurlijk niet werken, VBA weet toch niet dat de tekst waarde1 geen variabele is en val1 wel een variabele.

Dit is hoe je strings aan elkaar kunt plakken
Visual Basic:
1
2
3
4
5
6
Dim val As String
Dim fullstring As String

val = "blabla"

fullstring  = "tekst tekst " & val & " tekst tekst"


De waarde van fullstring zal dan zijn: tekst tekst blabla tekst tekst
Yes dankje.
Mijn VBA kennis is zeer beperkt.
Had al geprobeert zoals in C# maar werkte niet.

maar blijkbaar werkt me copy niet helemaal lekker want de waarde van alle strings is true :S

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Dat gebeuren met .Select is niet bepaald handig.. ;)

How to: Refer to Cells by Using Index Numbers

Daarnaast moet je ' escapen als dat voorkomt.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • DanielG
  • Registratie: Oktober 2005
  • Laatst online: 08-09 15:36

DanielG

i = 0x5f3759df - (i>>1); ☠₧ℳ🀪❣

tha_crazy schreef op donderdag 27 mei 2010 @ 13:52:
maar blijkbaar werkt me copy niet helemaal lekker want de waarde van alle strings is true :S
Dat komt volgens mij omdat de "ActiveCell.Copy" niet werkt zoals jij denkt dat het werkt, zie http://msdn.microsoft.com...23844%28office.11%29.aspx voor wat de Copy functie wel doet.
pedorus schreef op donderdag 27 mei 2010 @ 14:02:
Daarnaast moet je ' escapen als dat voorkomt.
De single quote in een double quote (VBA string dus) kan gewoon.

[ Voor 64% gewijzigd door DanielG op 27-05-2010 14:16 . Reden: wat Janoz zegt ;) ]

http://xyproblem.info/


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 30-09 16:40

Janoz

Moderator Devschuur®

!litemod

DanielG schreef op donderdag 27 mei 2010 @ 14:06:
Neehoor, de single quote in een double quote (string dus) kan gewoon.
Niet in de gegenereerde query...

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • DanielG
  • Registratie: Oktober 2005
  • Laatst online: 08-09 15:36

DanielG

i = 0x5f3759df - (i>>1); ☠₧ℳ🀪❣

Janoz schreef op donderdag 27 mei 2010 @ 14:11:
[...]

Niet in de gegenereerde query...
Ok, voor de SQL statement moet het wel
Maar het leek net of pedorus het over de VBA string had

http://xyproblem.info/


Acties:
  • 0 Henk 'm!

  • tha_crazy
  • Registratie: Maart 2007
  • Laatst online: 20:15
DanielG schreef op donderdag 27 mei 2010 @ 14:06:
[...]


Dat komt volgens mij omdat de "ActiveCell.Copy" niet werkt zoals jij denkt dat het werkt, zie http://msdn.microsoft.com...23844%28office.11%29.aspx voor wat de Copy functie wel doet.


[...]


De single quote in een double quote (VBA string dus) kan gewoon.
ja kwam ik ook een beetje achter, doh 8)7 stom van me
maar hij werkt nu bijna.

output op het moment:
INSERT INTO Tabel (waarde1, waarde2, waarde3, waarde4) VALUES ('product','5',' EMBC01A','149896-4/12/2010-')

maar het laatste deel klopt niet
dat zou moeten zijn 707660-169-1

de huidige code
Visual Basic .NET:
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
Sub Test()
    Dim val1 As String
    Dim val2 As String
    Dim val3 As String
    Dim val4 As String
    
    Dim tempstring As String
    
    Dim fullstring As String
        
    Range("I1").Select
    
    For x = 2 To 121
        ActiveCell.Offset(1, 0).Select
        val1 = Selection.Value
        ActiveCell.Offset(0, -4).Select
        val2 = ActiveCell.Value
        ActiveCell.Offset(0, 1).Select
        val3 = ActiveCell.Value
        ActiveCell.Offset(0, 1).Select
        val4 = ActiveCell.Value
                
                
        tempstring = val2 & "-" & val3 & "-" & val4
        fullstring = "INSERT INTO Tabel (waarde1, waarde2, waarde3, waarde4) VALUES ('product','5',' EMBC01A','149896-4/12/2010-')"
                     
        
        ActiveCell.Offset(0, 4).Select
        ActiveCell.Value = fullstring
        
        ActiveCell.Offset(0, -2).Select
               
        
    Next x
    
    
End Sub


*edit*
ben trouwens eens de eerder genoemde cells reference gaan gebruiken maar dit werkt niet.
code:
1
2
3
4
        val1 = Worksheets("Sheet1").Cells(x, 5).Value
        val2 = Worksheets("Sheet1").Cells(x, 1).Value
        val3 = Worksheets("Sheet1").Cells(x, 2).Value
        val4 = Worksheets("Sheet1").Cells(x, 3).Value

[ Voor 8% gewijzigd door tha_crazy op 27-05-2010 14:48 ]


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
tha_crazy schreef op donderdag 27 mei 2010 @ 14:30:
*edit*
ben trouwens eens de eerder genoemde cells reference gaan gebruiken maar dit werkt niet.
code:
1
2
3
4
        val1 = Worksheets("Sheet1").Cells(x, 5).Value
        val2 = Worksheets("Sheet1").Cells(x, 1).Value
        val3 = Worksheets("Sheet1"").Cells(x, 2).Value
        val4 = Worksheets("Sheet1").Cells(x, 3).Value
Dit regel 3 is fout (" teveel). Daarnaast zou ik
Visual Basic:
1
2
3
dim sheet as Worksheet
set sheet = Worksheets("Sheet1")
val1 = sheet.Cells(x, 5).Value

gebruiken, Dat is een stuk handiger als je wat wil wijzigen. En 5 is niet kolom I.

Verder kun je dit trouwens toch ook gewoon met formules oplossen? Lijkt me een stuk makkelijker.. (Iets als ="INSERT... ('" & i2 & "',' & h1 & ... & ")" met op de plek van ... iets anders.)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • tha_crazy
  • Registratie: Maart 2007
  • Laatst online: 20:15
pedorus schreef op donderdag 27 mei 2010 @ 14:41:
[...]

Dit regel 3 is fout (" teveel). Daarnaast zou ik
Visual Basic:
1
2
3
dim sheet as Worksheet
set sheet = Worksheets("Sheet1")
val1 = sheet.Cells(x, 5).Value

gebruiken, Dat is een stuk handiger als je wat wil wijzigen. En 5 is niet kolom I.

Verder kun je dit trouwens toch ook gewoon met formules oplossen? Lijkt me een stuk makkelijker.. (Iets als ="INSERT... ('" & i2 & "',' & h1 & ... & ")" met op de plek van ... iets anders.)
hmm vreemd die staat niet in me code.
maar bij mij is het A B C D I J K ect.
me collega heeft wat colommen verwijderd ;)

naja, 120 formules aanpassen vind ik niet fijn

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
tha_crazy schreef op donderdag 27 mei 2010 @ 14:49:
[...]


hmm vreemd die staat niet in me code.
maar bij mij is het A B C D I J K ect.
me collega heeft wat colommen verwijderd ;)
Dat ze hidden zijn maakt voor .Cells niks uit.
naja, 120 formules aanpassen vind ik niet fijn
:D Ik denk dat je niet zoveel Excel-ervaring hebt. Je kan zo'n formule gewoon doortrekken met het kruisje rechtsonder (bijvoorbeeld dubbelklikken erop).

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • tha_crazy
  • Registratie: Maart 2007
  • Laatst online: 20:15
pedorus schreef op donderdag 27 mei 2010 @ 14:54:
[...]

Dat ze hidden zijn maakt voor .Cells niks uit.

[...]

:D Ik denk dat je niet zoveel Excel-ervaring hebt. Je kan zo'n formule gewoon doortrekken met het kruisje rechtsonder (bijvoorbeeld dubbelklikken erop).
nee ze zijn echt verwijderd, niet verborgen

en nee niet echt :$
ben meer van de databases en C# programming :P
Pagina: 1