For Each oWs In Workbooks("Bogbords arkiv.xls").Sheets If oWs.Name = "optælling " & Mdr & "-" & Ar Then The_answer = MsgBox("This sheet already exists." & vbCr _ & "Do you want to select new values?", vbYesNo) If The_answer = vbNo Then Exit Sub If The_answer = vbYes Then BookIsOpen = True GoTo GetTheName End If End If Next
Sub test2() Dim mdr As String, ar As String, Navn As String Dim wb As Workbook, wb2 As Workbook Dim ws As Worksheet Set wb = Workbooks("Bogbordet.xls") Set ws = wb.Worksheets("Optælling") Workbooks.Open Filename:="XXX\Dokumenter\Bogbords arkiv.xls" Set wb2 = ActiveWorkbook forfra: mdr = InputBox("Hvilken måned har du optalt?") ar = InputBox("Hvilket år?") Navn = "optælling " & mdr & "-" & ar ws.Copy After:=wb2.Sheets(3) Application.WindowState = xlMinimized If SheetExists(wb2, Navn) Then MsgBox "Arket findes allerede" GoTo forfra End If wb2.Sheets("optælling").Name = Navn ws.Activate Range("A197").Select End Sub
Private Function SheetExists(wbk As Workbook, sname) As Boolean Dim x As Object On Error Resume Next Set x = wbk.Sheets(sname) If Err = 0 Then SheetExists = True Else SheetExists = False End Function
Det første jeg lærte om programmering: "Du må aldrig, aldrig bruge "Go To" (med mindre du altså er nødt til det)..." Nej, det er ikke for at kritisere, jeg mener bare at programmet bliver nemmere at forstå, hvis man undgår det... Lidt programmeringspædagogik, bare glem det igen!
:-) godt indspark stefanfuglsang. Det kunne nu også relativ nemt klares med et loop, det gad jeg bare ikke.
Jeg vil give dig ret i at det nemt kan blive uoverskueligt med mange goto's, men sålænge det er så enkelt som her, skal man ikke gå over åen efter vand ....
Ok her er den med check for om filen er åben. Det andet problem tror jeg skyldes at der ikke var 3 ark i den du testede. Den fejl er også væk nu.
Sub test2() Dim mdr As String, ar As String, Navn As String Dim wb As Workbook, wb2 As Workbook Dim ws As Worksheet Dim stFil As String, stpath As String stpath = "XXX\Dokumenter\" stFil = "Bogbords arkiv.xls" Set wb = Workbooks("Bogbordet.xls") Set ws = wb.Worksheets("Optælling") If Not WorkbookIsOpen(stFil) Then Workbooks.Open Filename:=stpath & stFil Set wb2 = ActiveWorkbook forfra: mdr = InputBox("Hvilken måned har du optalt?") ar = InputBox("Hvilket år?") Navn = "optælling " & mdr & "-" & ar ws.Copy After:=wb2.Sheets.Count Application.WindowState = xlMinimized If SheetExists(wb2, Navn) Then MsgBox "Arket findes allerede" GoTo forfra End If wb2.Sheets("optælling").Name = Navn ws.Activate Range("A197").Select End Sub
Private Function SheetExists(wbk As Workbook, sname) As Boolean Dim x As Object On Error Resume Next Set x = wbk.Sheets(sname) If Err = 0 Then SheetExists = True Else SheetExists = False End Function Private Function WorkbookIsOpen(wbname) As Boolean Dim x As Workbook On Error Resume Next Set x = Workbooks(wbname) If Err = 0 Then WorkbookIsOpen = True _ Else WorkbookIsOpen = False End Function
Du skal BESTEMT ikke sige sorry - du er altid til meget stor hjælp, og med den nye rettelse virker det (næsten) perfekt, for:
Hvis jeg indtaster en dato & år som allerede findes siger den godt nok at arket allerede findes, men santidig indsætter den et ark som bare hedder optælling - hvordan kan det undgå's?? (jeg må tilstå at dette er lidt for indviklet til at jeg selv kan se fejlen!)
Sub test2() Dim mdr As String, ar As String, Navn As String Dim wb As Workbook, wb2 As Workbook Dim ws As Worksheet Dim stFil As String, stpath As String stpath = "XXX\Dokumenter\" stFil = "Bogbords arkiv.xls" Set wb = Workbooks("Bogbordet.xls") Set ws = wb.Worksheets("Optælling") If Not WorkbookIsOpen(stFil) Then Workbooks.Open Filename:=stpath & stFil Set wb2 = ActiveWorkbook forfra: mdr = InputBox("Hvilken måned har du optalt?") ar = InputBox("Hvilket år?") Navn = "optælling " & mdr & "-" & ar If SheetExists(wb2, Navn) Then MsgBox "Arket findes allerede" GoTo forfra End If Application.WindowState = xlMinimized ws.Copy After:=wb2.Sheets.Count wb2.Sheets("optælling").Name = Navn ws.Activate Range("A197").Select End Sub
Jeg går ud fra at linien: ws.Copy After:=wb2.Sheets.Count skulle hedde: ws.Copy After:=wb2.Sheets(wb2.Sheets.Count) Det virker i hvertfald efter hensigten nu - tak for dit utrolig store arbejde!!! Jeg trode det var et enkelt spørgsmål, så jeg er næsten flov over kun at byde 15 points - hvormange vil du have??
PS. Nu har der undervejs været et par fejl, så det slog mig, hvor kan man lære noget om fejl?? Hvis andre en dag skulle bruge det jeg laver ville det jo være fedt at de ikke hele tiden får evt. fejl poppet op...???
Nej, du skal ikke være flov over pointene, det burde også være let, men ting er ikke altid som de ser ud til..... :-)
Fejl-> man kan sagtens sætte fejlfangere på, men man kan ikke gætte sig til alt hvad en bruger kan lave af fejl. Grunden til at jeg ikke sætter en fejlfanger på her, er at det letter testning ikke at have den da man får markeret den linie hvor koden kører galt.
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.