Avatar billede boro23 Forsker
26. juni 2013 - 11:09 Der er 11 kommentarer og
1 løsning

VBA kode

Hej Eksperter

Jeg har en fil med et standard ark, som bliver kopieret og omdøbt. Men det sker ofte at brugere glemmer at kopiere standard arket og laver ændringer i arket.

Er det muligt at lave en vba kode der gør, at der ikke kan ændres i arket før det er omdøbt? Standard arket hedder "std. ark"
Avatar billede jens48 Ekspert
26. juni 2013 - 11:30 #1
Er det ikke lettere at sørge for at std.ark er gemt som Read Only
Avatar billede finb Ekspert
26. juni 2013 - 11:54 #2
Skrivebeskyt arket,
så bruger er nødt til at omdøbe arket før brug/gem
Avatar billede boro23 Forsker
26. juni 2013 - 12:45 #3
Jeg kan desværre ikke bruge Jeres forslag, da der er en del andre ting der er tilknyttet filen.
Avatar billede store-morten Ekspert
26. juni 2013 - 14:26 #4
Er det et Ark navn?
Avatar billede boro23 Forsker
26. juni 2013 - 14:43 #5
Ja, arket i filen hedder std. ark
Avatar billede store-morten Ekspert
26. juni 2013 - 14:46 #6
Så prøv denne, lagt på Arket:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Svar As String
Dim CorrectAnswer As Boolean
If ActiveSheet.Name = "std. ark" Then
    Do
    Svar = InputBox("Ændre navnet:  (std. ark) til:", "Du skal ændre Ark navnet:")
        If Svar = "" Then
            CorrectAnswer = False
            MsgBox "Det var skidt - men vi prøver bare igen!"
        Else
            CorrectAnswer = True
            Sheets("std. ark").Name = Svar
            Exit Do
        End If
    Loop
End If
End Sub
Avatar billede boro23 Forsker
27. juni 2013 - 07:04 #7
Hej store-morten

Jeg har vist ikke forklaret mig godt nok:

Bruger skal tage en kopi af std. ark og omdøbe det, arbejde videre på de oplysninger der er i std. ark. Det gør de fleste brugere korrekt, men det sker at std. ark bliver omdøbt, udfyldt og gemt og det vil jeg gerne undgå.

Min tanke var en vba kode, der gør at man ikke kan ændre noget i std. ark før det er kopieret og omdøbt.

Smart detalje med msgbox i koden.
Avatar billede store-morten Ekspert
27. juni 2013 - 23:16 #8
Prøv at tilføje disse, lagt på "Denne_projektmappe"

Og lad os se om jeg har ramt rigtigt ;-)

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Sheets(1).Name = "std. ark" Then
    MsgBox ActiveWorkbook.Name & vbCrLf _
    & vbCrLf & _
    " kan ikke gemmes !!!"
    Cancel = True
    End If
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Sheets(1).Name = "std. ark" Then
    Dim Svar As Integer
    Svar = MsgBox("Filen kan ikke gemmes," & vbCrLf _
    & vbCrLf & _
    "vil du lukke uden at gemme?", vbYesNo, "Advarsel")
    If Svar = vbYes Then
    ElseIf Svar = vbNo Then
    Cancel = True
    End If
End If
End Sub
Avatar billede boro23 Forsker
28. juni 2013 - 07:17 #9
Hej igen

Naej, det er ikke helt rigtigt, for nu kan jeg ikke gemme filen.
Jeg glemte nok at fortælle at std. ark og den omdøbte kopi  ligger i samme fil.

Jeg prøver med en ny forklaring, når jeg åbner filen findes der kun std. ark, bruger kopier std. arket og omdøber det og udfylder det, og sender det videre til næste bruger, som så også tager en kopi af std. arket osv.. Når jeg så får filen retur ligger der 12 forskellige ark + std. ark i filen.

Fejlen opstår når en bruger kommer til at omdøbe selve std. arket og overskriver stamdata, det jeg søger er en form for ark beskyttelse af std. ark, så der ikke kan ændres i den. Når den så bliver kopieret og omdøbt, er beskyttelsen fjernet og bruger kan indsætte sine data, gemme og sende fil videre til næste bruger.

Ha' lidt tålmodighed med mig, nogen gange kan det være svært at formulere et spørgsmål. Håber du lyst til at komme med et nyt bud.
Avatar billede store-morten Ekspert
28. juni 2013 - 19:24 #10
Vi prøve igen ;-)

Lagt på Arket "std. ark" :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If ActiveSheet.Name = "std. ark" Then Call Opret_Kopi
End Sub


Og i et Modul:
Sub Opret_Kopi()
Dim Svar1 As String
Dim Svar2 As String
Dim CorrectAnswer As Boolean
Dim Ark_Navn As String

If ActiveSheet.Name = "std. ark" Then

    Svar1 = MsgBox("Du kan nu oprette en kopi, af 'std. ark'" & vbCrLf _
    & vbCrLf & _
    "Vil du oprette en kopi?", vbYesNo, "Advarsel")
    If Svar1 = vbYes Then
    Sheets("std. ark").Copy After:=Sheets(1)
   
        Do
            Svar2 = InputBox("Ændre navnet:  (std. ark) til:", "Du skal ændre Ark navnet:")
            If Svar2 = "" Then
                CorrectAnswer = False
                MsgBox "Det var skidt - men vi prøver bare igen!"
            Else
                CorrectAnswer = True
                    Ark_Navn = Svar2
                    If (Sheet_Exists(Ark_Navn) = False) Then
                    ActiveSheet.Name = Svar2
                    Exit Do
                    End If
                CorrectAnswer = False
                MsgBox "Arket:" & vbCrLf _
                & vbCrLf & _
                " - " & Svar2 & " - " & vbCrLf _
                & vbCrLf & _
                "findes allerede - men vi prøver bare igen!"
            End If
        Loop
   
    ElseIf Svar1 = vbNo Then
    Cancel = True
    End If
End If
End Sub

Function Sheet_Exists(WorkSheet_Name As String) As Boolean
    Dim Work_sheet As Worksheet
    Sheet_Exists = False
    For Each Work_sheet In ThisWorkbook.Worksheets
        If Work_sheet.Name = WorkSheet_Name Then
            Sheet_Exists = True
        End If
    Next
End Function
Avatar billede boro23 Forsker
01. juli 2013 - 06:21 #11
Hej store-morten

Ved du hvad? du er en ren troldmand, det viker bedre end forventet. 1000 tak for hjælpen, smider du et svar.
Avatar billede store-morten Ekspert
01. juli 2013 - 10:43 #12
Velbekomme. :-)
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