Gå til innhold

Anbefalte innlegg

Jeg har så smått begynnt på en funksjon som skal loope gjennom et helt regneark og konvertere valuta mellom to forskjellige kurser, men når jeg kaller den, så skjer det nøyaktig ingenting.

I Celle A1 skal status for hvilken valuta som benyttes stå som en switch. Noen som ser problemer ?

Sub RecalculateAll()
   
   Dim ws As Worksheet
   Dim wb As Workbook
   Dim valg As String
   Dim kurs As Double
   Dim cell As Range

   Set wb = ActiveWorkbook
   Set ws = ActiveSheet
   valg = wb.Worksheets("Sheet1").Range("a1")
   kurs = 0.8809
   
   Select Case valg
       Case valg = "Svensk"
           For Each ws In wb
               For Each cell In ws.UsedRange
                   If IsNumeric(Active.Cells.Value) _
                   Then Active.Cells.Value = Active.Cells.Value * kurs
               Next cell
           Next ws
           Worksheets("Main").Range("a1") = "Norsk"
   
       Case valg = "Norsk"
           For Each ws In wb
               For Each cell In ws.UsedRange
                   If IsNumeric(Active.Cells.Value) _
                   Then Active.Cells.Value = Active.Cells.Value / kurs
               Next cell
           Next ws
           Worksheets("Main").Range("a1") = "Svensk"
   End Select
   
End Sub

Lenke til kommentar
Videoannonse
Annonse

Det er flere ting her. Viktigst:

I VB editoren, velg Tools og velg "Require variable declaration". Dette setter

Option Explicit

øverst i alle nye moduler.

 

Gjør det også her, skriv Option Explicit aller øverst i modulen. Når du prøver å kjøre så får du informative feilmeldinger om hva som er galt hvor.

 

Hvilket er følgende ting, rettet her:

 

For Each ws In wb.Worksheets

 

If IsNumeric(cell.Value) _

Then cell.Value = cell.Value * kurs

 

Worksheets("Sheet1").Range("a1") = "Norsk"

 

If IsNumeric(cell.Value) _

Then cell.Value = cell.Value / kurs

 

Worksheets("Sheet1").Range("a1") = "Svensk"

 

HTH. Beste hilsen Harald

Lenke til kommentar

Takker. Gode råd er viktig for oss som kun lærer via Google.

I tillegg til ovennevnte fant jeg ut at i Select-loop heter det ikke "Case valg = xxx", men kun "Case xxx", eller så fikk den ingen treff :)

 

Eneste problemet nå er at den setter inn 0,00 i alle tomme celler, så jeg må få spesifisert det bedre. Finnes det noe tilsvarende "If isCurrency" som gjør at den bare endrer celler som er formatert som valuta tro...

Lenke til kommentar

Sorry, jeg overså Case-problemene.

 

Du kan spesifisere "bare tall, bare konstanter" allerede i range-definisjonen, så slipper du å loope alle cellene med tekst, formler, blanke, ...

 

For Each cell In ws.UsedRange.SpecialCells(xlCellTypeConstants, 1)

If cell.Value <> 0 Then cell.Value = cell.Value * kurs

Next

 

og så ser IF'en om det er noen vits i å gange/dele eller om det står null der.

 

Slik mystisk kode (xlCellTypeConstants, 1) får du syntaksen til ved å spille inn en makro mens du gjør utvalget i menyene Rediger - Gå til - Utvalg

 

Edit: Tomme celler er uavhengige bærere av spesifisert format, tekstfarge, fontstørrelse etc, mao ikke helt tomme, så det er ingen god ide å bare sjekke tallformatene når man skal vurdere innhold.

 

Edit 2: Du skriver ryddig, skikkelig kode til å være så selvlært som du påstår. Bra jobba!

 

HTH. Beste hilsen Harald

Endret av Harald Staff
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...