Avatar billede steensommer Praktikant
26. december 2003 - 16:47 Der er 21 kommentarer og
1 løsning

Sheet Exist funktion

Jeg har oprettet en userform med en kommandoknap tilsluttet der skal Checke om et regneark eksisterer i en projektmappe. Regnearket tildeles et navn vha en Inputbox (IBox) - dette er en dato (ex. 12-12). Hvis arket ikke eksisterer skal et nyt ark oprettes (kopieres). Hvis det eksisterer skal arket blot aktiveres. Det lyder jo alt sammen meget godt men det fungerer ikke - koden er vist blevet lidt for snørklet for mig - mon der skulle være en venlig sjæl der kan give en hånd :0)

vh Steen
Avatar billede steensommer Praktikant
26. december 2003 - 16:47 #1
..og så lige koden:

Function SheetExists(IBox As String) As Boolean
' returnerer TRUE dersom arket finnes i den aktive arbeidsboken
    SheetExists = False
    'On Error GoTo NoSuchSheet
    If Len(Sheets(IBox).Name) > 0 Then
        SheetExists = True
        Exit Function
    End If
NoSuchSheet:
End Function


Private Sub CommandButton2_Click()
Unload Me
Dim IBox As String
Dim sPath As String
sPath = "\\hjertesrv\faelles\Index\dokumenter\Booking\PCI og KAG\"
IBox = InputBox("Indtast bookingdato")
If IBox <> "" Then
Workbooks.Open sPath & ("PCI og KAG.xls")

Application.ScreenUpdating = False

If Not SheetExists(IBox) Then
    Dim Msg, Style, Title, Response, MyString
    Msg = "Bookingdatoen:" & " " & IBox & " " & "eksisterer ikke! Skal der oprettes en ny? "
    Style = vbYesNo + vbDefaultButton2    ' Define buttons.
    Title = "Meddelelsesbox"    ' Define title.
    Response = MsgBox(Msg, Style, Title)
    If Response = vbYes Then
   
    ActiveSheet.Copy Before:=ActiveSheet
    With ActiveSheet
        .Range("F2").Value = IBox
        .Name = IBox
        .Range("B5,B7,B9,B11,B13,B15,B17,B19,B21,B23,B25,B27,B29,B31,B33,B35").ClearContents
        .Range("D5:D36").ClearContents
    End With
        If Sheets("Sheet1").Visible = True Then
        Sheets("Sheet1").Visible = False
        End If
    Else:
    GoTo Slut
    End If

Else:
Sheets(IBox).Activate

End If
Else:
MsgBox ("Indtast en dato")
End If
Exit Sub
Slut:
End Sub
Avatar billede kabbak Professor
26. december 2003 - 17:48 #2
Private Sub CommandButton2_Click()
Unload Me
Dim IBox As String, X As Boolean
Dim sPath As String
X = False
sPath = "\\hjertesrv\faelles\Index\dokumenter\Booking\PCI og KAG\"
IBox = InputBox("Indtast bookingdato")
If IBox <> "" Then
Workbooks.Open sPath & ("PCI og KAG.xls")

Application.ScreenUpdating = False
'***************************************
For Each Ws In Worksheets ' tjekker alle ark
  If Ws.Name = IBox Then  ' hvis navnet findes
  Worksheets(IBox).Activate ' aktiveres
  X = True                  ' true = arket er fundet
  End If
Next
If X = False Then ' hvis ikke fundet
'**********************************************************
    Dim Msg, Style, Title, Response, MyString
    Msg = "Bookingdatoen:" & " " & IBox & " " & "eksisterer ikke! Skal der oprettes en ny? "
    Style = vbYesNo + vbDefaultButton2    ' Define buttons.
    Title = "Meddelelsesbox"    ' Define title.
    Response = MsgBox(Msg, Style, Title)
    If Response = vbYes Then
   
    ActiveSheet.Copy Before:=ActiveSheet
    With ActiveSheet
        .Range("F2").Value = IBox
        .Name = IBox
        .Range("B5,B7,B9,B11,B13,B15,B17,B19,B21,B23,B25,B27,B29,B31,B33,B35").ClearContents
        .Range("D5:D36").ClearContents
    End With
        If Sheets("Sheet1").Visible = True Then
        Sheets("Sheet1").Visible = False
        End If
    Else:
    GoTo Slut
    End If


End If
Else:
MsgBox ("Indtast en dato")
End If
Exit Sub
Slut:
End Sub


du skal ikke bruge funktionen
Function SheetExists(IBox As String) As Boolean
Avatar billede steensommer Praktikant
26. december 2003 - 17:56 #3
Det fungerer rigtig godt. Men det er lidt mærkeligt at det andet ikke fungerer - før jeg begyndte at ændre for meget virkede det godt nok :0( - men pyt nu virker det.
kabbak: Et lille tillægsspørgsmål som intet har med ovennævnte at gøre (bare sig hvis jeg skal oprette et nyt spørgsmål): Kender du til vba der udfra dato kan returnere ugenr og ugedag. Jeg har fundet flere men ingen fungerer på min engelske variant af XP og det andet problem er at softwaren efterfølgende skal fungere i en dansk variant
Avatar billede steensommer Praktikant
26. december 2003 - 17:59 #4
Hov er det muligt at ændre koden så man ikke ser projektmappen PCI og KAG.xls inden det nye ark indsættes?
Avatar billede bak Forsker
26. december 2003 - 18:32 #5
Ugenr og ugedag:

Function Week(InputDate As Date)
    Week = DatePart("ww", InputDate, vbMonday, vbFirstFourDays)
End Function

Function DayOfWeek(InputDate As Date)
Dim vDage
vDage = Array("Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag", "Søndag")
DayOfWeek = vDage(Weekday(InputDate, vbMonday) - 1)
End Function


ps. din SheetExist virker ikke når du har inaktiveret On error Goto linien

Denne her plejer jeg at bruge
Private Function SheetExists(sname) As Boolean
'  Returns TRUE if sheet exists in the active workbook
    Dim x As Object
    On Error Resume Next
    Set x = ActiveWorkbook.Sheets(sname)
    If Err = 0 Then SheetExists = True Else SheetExists = False
End Function
Avatar billede kabbak Professor
26. december 2003 - 19:15 #6
( Hov er det muligt at ændre koden så man ikke ser projektmappen PCI og KAG.xls inden det nye ark indsættes?)

Det tror jeg ikke, en inputbox, kan vist nok ikke vises hvis, excel er minimeret.

Det kan være at Bak har en anden mening.
Avatar billede steensommer Praktikant
26. december 2003 - 20:15 #7
-->bak Hvorledes bruges ovenstående funktioner - har du forslag til VBA
Avatar billede kabbak Professor
26. december 2003 - 20:21 #8
kald fra VBA

Uge = week(Dato)
Dag = DayOfWeek(Dato)
Avatar billede kabbak Professor
26. december 2003 - 20:23 #9
Dato  er en variabel der indeholder datoen
Avatar billede steensommer Praktikant
26. december 2003 - 20:35 #10
Jeg kan fint lave en vba der laver ovenstående men jeg ville egentlig gerne om ugenr fremkom i Range("F3") når dato blev indsat i F2. Hvordan gøres det?
Og iøvrigt tak til jer begge for hjælpen igen igen igen.....
Avatar billede kabbak Professor
26. december 2003 - 20:37 #11
I F3 = hvis(F2<>"";week(F2);"")
Avatar billede kabbak Professor
26. december 2003 - 20:41 #12
eller fra din kode

  .Range("F2").Value = IBox
  .Range("F3").Value = DayOfWeek(Ibox)
Avatar billede kabbak Professor
26. december 2003 - 20:42 #13
.Range("F3").Value = Week(Ibox)

selvfølgelig
Avatar billede steensommer Praktikant
26. december 2003 - 20:43 #14
Det var bare super - så har jeg jo heller ikke problemet med Dansk/engelsk :0)  Tak igen
Avatar billede kabbak Professor
26. december 2003 - 20:44 #15
selv tak ;-))
Avatar billede steensommer Praktikant
26. december 2003 - 20:53 #16
Hov der er fejl følgende sted -- hva har jeg nu gjort forkert:

    ActiveSheet.Copy Before:=ActiveSheet
    With ActiveSheet
        .Range("F2").Value = IBox
        .Range("F3").Value = Week(IBox)
        .Range("E2").Value = DayOfWeek(IBox)
        .Name = IBox
        .Range("B5,B7,B9,B11,B13,B15,B17,B19,B21,B23,B25,B27,B29,B31,B33,B35").ClearContents
        .Range("D5:D36").ClearContents
    End With
Avatar billede steensommer Praktikant
26. december 2003 - 20:54 #17
Udfor .Range("F3").Value = Week(IBox)  IBox highlightes: Følgende: Compile error. ByRef argument type mismatch
Avatar billede steensommer Praktikant
26. december 2003 - 21:50 #18
Nå IBox skulle dim'es som Date :0)
Avatar billede steensommer Praktikant
26. december 2003 - 22:14 #19
Jeg har ændret lidt pga ovenstående men den fejler ved: Worksheet(Ibox).Activate hvorfor jeg har skrevet: On error goto Slut - men den selekter derved ikke korrekt
Avatar billede kabbak Professor
26. december 2003 - 22:39 #20
du skulle have ændret
Function DayOfWeek(InputDate As Date)
til
Function DayOfWeek(InputDate As String)
og
Function Week(InputDate As Date)
til
Function Week(InputDate As String)

så havde det virket med det samme
Avatar billede steensommer Praktikant
26. december 2003 - 23:00 #21
Du har fuldstænfig ret - tak igen
Avatar billede kabbak Professor
26. december 2003 - 23:02 #22
selv tak
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