Anvendelse af Loop og/eller For… Next
Jeg kom ved en fejl til at oprette dette indlæg under Job/opgaver, så prøver lige igen..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("W2").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