Avatar billede rene_andersen Nybegynder
28. marts 2009 - 17:48 Der er 1 løsning

Anvendelse af Loop og/eller For… Next

Jeg er en VBA nybegynder der er ved at få øjnene op for hvor mange muligheder der ligger gemt i anvendelse af VBA i Microsoft Excel. Jeg har studeret en enkelt bog og ellers prøvet mig frem og føler også jeg har lært en del, men der er stadig meget jeg slet ikke har styr på.

Jeg har prøvet at skrive/optage nedenstående kode til at køre en opdatering af et SQL-udtræk fra en database. SQL'erne (én for hver måned) er placeret ved siden af hinanden i ét ark og disse skal så opdateres og deres værdier kopieres ind i et dataområde der danner udgangspunkt for en pivot-tabel.

Jeg har lavet en InputBox der beder brugeren om at angive indtil og med hvilken måned SQL'erne skal opdateres. Jeg kan så bare ikke helt hitte ud af hvorledes man anvender denne værdi i en løkke (eller andet) til at bestemme hvor mange data der skal opdateres. Jeg har også skrevet alle linjerne for de enkelte måneder, da jeg heller ikke helt kan gennemskue hvorvidt man kan skrive en simplere kode (vha. For… Next?).

Sub SQL_opdatering()
Dim iMåned, iRowCount As Integer

iMåned = Application.InputBox("Vælg den seneste måned der skal medtages:", "SQL opdatering", 1)
'Input skal bruges som stopklods for hvor mange måneder der skal opdateres
'Default er her sat til 1, men skulle helst være sidst indtastede værdi
'(hvis programmet kan finde ud af dette, og ikke kræver for mange ressourcer)

'Starter med at slette dataområdet for den nuværende pivot-tabel
Sheets("Pivot SQL").Select
Range("data_area").Select
Selection.ClearContents

'Opdaterer og kopier værdier fra SQL-udtrækket til data-området
'Januar:
Sheets("SQL").Select
Range("SQL_januar").Select
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
Range("SQL_januar").Select
Selection.Copy
Sheets("Pivot SQL").Select
Range("W2").Activate 'Første celle i dataområdet (række 1=overskrifter)
Selection.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False

iRowCount = Range("W2").CurrentRegion.Rows.Count + 1 'Finder første tomme række til februars input

'Februar
Sheets("SQL").Select
Range("SQL_februar").Select
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
Range("SQL_februar").Select
Selection.Copy
Sheets("Pivot SQL").Select
Cells(iRowCount, 23).Activate 'indsætter februars data lige under januars
Selection.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False

iRowCount = Range("W3").CurrentRegion.Rows.Count + 1 'Finder første tomme række til marts' input

'Marts
Sheets("SQL").Select
Range("SQL_marts").Select
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
Range("SQL_marts").Select
Selection.Copy
Sheets("Pivot SQL").Select
Cells(iRowCount, 23).Activate 'indsætter marts' data lige under februars
Selection.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False

'osv. for april - december

'Opdaterer pivot-tabellen
Range("SQL_pivot").Select
ActiveSheet.PivotTables("SQL_pivot").PivotCache.Refresh

End Sub
Avatar billede rene_andersen Nybegynder
28. marts 2009 - 18:04 #1
Skulle have været under Regneark/Excel..
Så fjerner den herfra
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester