Avatar billede h_s Forsker
27. juli 2007 - 13:41 Der er 14 kommentarer og
1 løsning

Makro - Hvorfor virker den ikke

Jeg har denne makro:

Set Version = ActiveWorkbook.Sheets("Beregninger").Range("C27")
If Version < 1 Or Version = "" Then
    Version = 1
Else
    Version = 2
End If

Den bør sætte 1 ind i ActiveWorkbook.Sheets("Beregninger").Range("C27") hvis værdien i samme celle er under 1 eller tom ellers indsætte 2.

Hvis jeg ændre Version til ActiveWorkbook.Sheets("Beregninger").Range("C27") virker den.

Hvad er der galt?
Avatar billede jkrons Professor
27. juli 2007 - 13:57 #1
Du tildeler en værdi til Version, men du skriver aldrig denne værditilbage til regnearket. Prøv at tilføje

Sheets("Beregninger").Range("c27") = version

efter din End If.
Avatar billede jkrons Professor
27. juli 2007 - 14:00 #2
Du kan også klare det hele med

    If Sheets("Beregninger").Range("c27") < 1 Then
        Sheets("Beregninger").Range("c27") = 1
    Else
        Sheets("Beregninger").Range("c27") = 2
    End If
Avatar billede h_s Forsker
27. juli 2007 - 14:31 #3
Det var for at undgå at skrive Sheets("Beregninger").Range("c27") så mange gange
Vil det sige at hvis jeg ændre min makro til nedenstående, så virker den?:

Set ActiveWorkbook.Sheets("Beregninger").Range("C27") = Version <---- ændret
If Version < 1 Or Version = "" Then
    Version = 1
Else
    Version = 2
End If
27. juli 2007 - 14:45 #4
Jeg ville gøre noget alla dette her:

    With ActiveWorkbook.Sheets("Beregninger").Range("C27")
        If .Value < 1 Or .Value = "" Then
            .Value = 1
        Else
            .Value = 2
        End If
    End With
Avatar billede h_s Forsker
27. juli 2007 - 14:57 #5
Flemmingdahl> det er ok, men har jeg så ikke problemer med ELSE IF?

Jeg får sandsynligvis nok flere værdi-muligheder i cellen, så der kan komme til at stå:

With ActiveWorkbook.Sheets("Beregninger").Range("C27")
        If .Value < 1 Or .Value = "" Then
            .Value = 1
        Else if .. et eller andet..
            .Value = 2
        Else if .. et eller andet..
        Else
            .. et eller andet..
        End If
    End With
27. juli 2007 - 15:54 #6
Nej for    .Value vil jo altid være den værdi der er i cellen...

    With ActiveWorkbook.Sheets("Beregninger").Range("C27")
        If .Value < 1 Or .Value = "" Then
            .Value = 1
        Else if .Value ="Peter" Then
            .Value = "Søren"
        Else if .Value = 3 Then
            .Value = 4
        Else
            .. et eller andet..
        End If
    End With


eller

    With ActiveWorkbook.Sheets("Beregninger").Range("C27")
        Select Case .Value
            Case Is < 1 Or ""
                .Value = 1
            Case Is = 1
                .Value = 2
            Case Is = 2
                .Value = 3
            Case Else
                .Value = 9
        End Select
    End With
Avatar billede h_s Forsker
27. juli 2007 - 16:13 #7
Jeg har nu prøvet din Select Case.

Den har jeg før fravalgt, fordi jeg havde problemer med at kalde en anden procedure i en case. Kan man det?

Jeg får en fejl i Case Is < 1 Or "" - Type mismatch (Error 13)

Min procedure ser således ud:
Public Sub Opdatering()
    With Workbooks("Stamdata").Sheets("Beregninger").Range("C27")
        Select Case .Value
            Case Is <= 1 Or ""
                .Value = 1
            Case Is = 2
                .Value = 2
            Case Else
                Call NyMakro
        End Select
    End With
End Sub

Hvad er der galt?
Avatar billede olehen Nybegynder
27. juli 2007 - 16:38 #8
Det kan jeg godt fortælle dig..
Skriv Null i stedet for "" det vil løse dit problem..

Så den rigtige kode er:

Public Sub opdatering()
With ActiveWorkbook.Sheets("Beregninger").Range("C27")
        Select Case .Value
            Case Is < 1 Or Null
                .Value = 1
            Case Is = 1
                .Value = 2
            Case Is = 2
                .Value = 3
            Case Else
                .Value = 9
        End Select
    End With
End Sub
27. juli 2007 - 22:02 #9
Du kan sagtens kalde en anden procedure i en case...

Select Case "et eller andet"
  Case Is "ET"
    SuperMakro
  Case Is "ANDET"
    MicroMacro(Med, Parametre)
End Select
Avatar billede h_s Forsker
01. august 2007 - 15:44 #10
Det kan jeg godt se, men jeg synes stadig ikke jeg har fået svar på mit spørgsmål:

Hvordan laver jeg cellen ActiveWorkbook.Sheets("Beregninger").Range("C27") så jeg kan bruge et navn i stedet?
01. august 2007 - 16:36 #11
Dim rBeregn as Range
Set rBeregn = Sheets("Beregninger").Range("C27")

Den længere
Dim wbActive As Workbook
Dim wsBeregn As Worksheet
Dim rBeregn As Range
Set wbActive = ActiveWorkbook
Set wsBeregn = wbActive.Sheets("Beregninger")
Set rBeregn = wsBeregn.Range("C27")


Select Case rBeregn.Value
....
End Select

If rBeregn.Value = 1 Then
...
Endif
04. august 2007 - 23:18 #12
Er du klar til at lukke dette spørgsmål eller?
Avatar billede h_s Forsker
07. august 2007 - 21:03 #13
Flemmingdahl> Du bliver altså nødt til at være mere specefik, for jeg får stadig fejl: Prøv lige og se her:

Public Sub OpdateringAfVersion()
'Denne procedure skal styre versionerne
'Der ses efter hvilken version, der hentes over fra
'Beregninger. Celle C27 i skatteregnearket

'Besked sidst i processen om at der nu er opdateret
    Dim OpdtSkat As Variant
    OpdtSkat = Worksheets("Beregninger").Range("C28")
    Dim OpdtStam As Variant
    OpdtStam = Worksheets("Beregninger").Range("C23")
    Dim VersionSkat As Variant
    VersionSkat = Worksheets("Beregninger").Range("C27")
    Dim VersionStam As Variant
    VersionStam = Worksheets("Beregninger").Range("C22")
    Dim sLangTekst As String
    Dim Opdateringsår As Variant
    Opdateringsår = Worksheets("Beregninger").Range("C28")
   
   
If OpdtSkat = OpdtStam And VersionSkat = VersionStam Then

Application.ScreenUpdating = False
'Besked Om at der ingen opdateringer er
    sLangTekst = "Der er ingen opdateringer til rådighed!" & vbNewLine
    sLangTekst = sLangTekst & "" & vbNewLine
    sLangTekst = sLangTekst & "Skattebergningen er opdateret til og med år " & Opdateringsår & "!" & vbNewLine
    sLangTekst = sLangTekst & "" & vbNewLine
    sLangTekst = sLangTekst & "Mener du der bør være nye satser eller andre    " & vbNewLine
    sLangTekst = sLangTekst & "ændringer, så kontakt den systemansvarlige!" & vbNewLine
    IngenOpdatering = MsgBox(sLangTekst, vbOKOnly + vbInformation, "Ingen opdatering")
   
Else


'Forklaring mangler!
    If VersionStam <= 1 Or "" Then
            Call Version2
    Else
            'Case Else
                Call OpdateringAfStamdata
End If

End If
End Sub
08. august 2007 - 19:29 #14
Så må vi jo se om den gamle revisorunderviser kan hente noget pædagogik frem igen :-)

For at din if sætning skal virke skal der stå:
If VersionStam <= 1 Or VersionStam = "" Then

Denne her virker hos mig
Public Sub OpdateringAfVersion()
'Denne procedure skal styre versionerne
'Der ses efter hvilken version, der hentes over fra
'Beregninger. Celle C27 i skatteregnearket

'Besked sidst i processen om at der nu er opdateret
    Dim OpdtSkat As Variant
    Dim OpdtStam As Variant
    Dim VersionSkat As Variant
    Dim VersionStam As Variant
    Dim Opdateringsår As Variant
       
    Application.ScreenUpdating = False
   
    OpdtSkat = Worksheets("Beregninger").Range("C28").Value
    OpdtStam = Worksheets("Beregninger").Range("C23").Value
    VersionSkat = Worksheets("Beregninger").Range("C27").Value
    VersionStam = Worksheets("Beregninger").Range("C22").Value
    Opdateringsår = Worksheets("Beregninger").Range("C28").Value
   
    If OpdtSkat = OpdtStam And VersionSkat = VersionStam Then
     
        'Besked Om at der ingen opdateringer er
        MsgBox "Der er ingen opdateringer til rådighed!" & _
            vbNewLine & vbNewLine & _
            "Skattebergningen er opdateret til og med år" & Opdateringsår & "!" & _
            vbNewLine & vbNewLine & _
            "Mener du der bør være nye satser eller andre" & vbNewLine & _
            "ændringer, så kontakt den systemansvarlige!", _
            vbOKOnly + vbInformation, "Ingen opdatering"
       
    Else
   
    'Forklaring mangler!
        If VersionStam <= 1 Or VersionStam = "" Then
            Call Version2
        Else
            'Case Else
            Call OpdateringAfStamdata
        End If
   
    End If
   
    Application.ScreenUpdating = True
End Sub
Avatar billede h_s Forsker
09. august 2007 - 14:30 #15
Det virker - Tak for det!
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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