RulleRimfrost Skrevet 22. mars 2007 Del Skrevet 22. mars 2007 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
Harald Staff Skrevet 22. mars 2007 Del Skrevet 22. mars 2007 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
RulleRimfrost Skrevet 22. mars 2007 Forfatter Del Skrevet 22. mars 2007 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
Harald Staff Skrevet 22. mars 2007 Del Skrevet 22. mars 2007 (endret) 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 22. mars 2007 av Harald Staff Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå