26. december 2003 - 16:47Der 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)
Der bliver investeret massivt i AI. Teknologien er mere tilgængelig end nogensinde, og ambitionerne er høje. Alligevel oplever mange virksomheder, at resultaterne udebliver.
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
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
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
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
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.....
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
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)
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.