Avatar billede swamboo Seniormester
24. november 2003 - 22:17 Der er 17 kommentarer og
1 løsning

Tjek om der er et ark der hedder OSV. VBA

Jeg har gang i følgende schript:

Dim mdr As String
Dim ar As String

mdr = InputBox("Hvilken måned har du optalt?")
ar = InputBox("Hvilket år?")
    Workbooks.Open Filename:= _
        "XXX\Dokumenter\Bogbords arkiv.xls"
    Windows("Bogbordet.xls").Activate
    Sheets("optælling").Select
    Sheets("optælling").Copy After:=Workbooks("Bogbords arkiv.xls").Sheets(3)
    Application.WindowState = xlMinimized
    Sheets("optælling").Select
    Sheets("optælling").Name = "optælling " & mdr & "-" & ar
    Windows("Bogbordet.xls").Activate
    Sheets("optælling").Select
    Range("A197").Select

Hvordan tester jeg om der allerede er et ark der hedder sådan, og hvis der er laver en ny forespørgsel??
Avatar billede swamboo Seniormester
24. november 2003 - 22:18 #1
PS. hvis der er en lettere måde at gøre ovenstående på så hører jeg naturligvis gerne om det også...
Avatar billede agatheb Nybegynder
25. november 2003 - 08:32 #2
Prøv at indsætte følgende. (NB du skal måske rette lidt på rækkefølgen.

Option Explicit

Sub test()


Dim Mdr As String, Ar As String, BookIsOpen As Boolean, The_answer As Variant, oWs as Object

BookIsOpen = False

GetTheName:

' Get the user to give a month and year value.                                                  '

Mdr = InputBox("Hvilken måned har du optalt?")
Ar = InputBox("Hvilket år?")
   
' If not open yet, open the book.                                                              '

If BookIsOpen = False Then
    Workbooks.Open FileName:= _
        "XXX\Dokumenter\Bogbords arkiv.xls"
    Windows("Bogbordet.xls").Activate
    Sheets("optælling").Select
    Sheets("optælling").Copy After:=Workbooks("Bogbords arkiv.xls").Sheets(3)
    Application.WindowState = xlMinimized
    Sheets("optælling").Select
End If
   
' Name the sheet.                                                                              '

Sheets("optælling").Name = "optælling " & Mdr & "-" & Ar
Windows("Bogbordet.xls").Activate
Sheets("optælling").Select
Range("A197").Select

' Check if the sheet already exists.                                                            '

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

DoContinue:

End Sub
Avatar billede swamboo Seniormester
25. november 2003 - 22:09 #3
Jeg kan ikke få den til at virke.
Men jeg er også lidt usikker. Option Explicit - skal den også placeres som et modul, eller??

Den kan ikke finde ud af om "Bogbords Arkiv" er åben eller ej

Jeg får fejl i linierne lige under: ' name the sheet

Men det kan jo være jeg fejler i placeringen af koden.
Avatar billede bak Forsker
25. november 2003 - 22:51 #4
Prøv lige denne makro

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
Avatar billede stefanfuglsang Juniormester
26. november 2003 - 11:49 #5
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!
Avatar billede bak Forsker
26. november 2003 - 12:13 #6
:-) 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 ....
Avatar billede swamboo Seniormester
26. november 2003 - 23:08 #7
>>Bak:
I denne linie:
    ws.Copy After:=wb2.Sheets(3)
får jeg subscript out of range...
Avatar billede swamboo Seniormester
26. november 2003 - 23:09 #8
Forøvrigt - er det svært at lave det sådan at den selv tjekker om den skal åbne "Bogbord arkiv", eller om det er åbent??
Avatar billede agatheb Nybegynder
27. november 2003 - 07:27 #9
Dim oWb as Object, WbIsOpen as Boolean
WbIsOpen = False

For Each oWb In Workbooks
    If oWb.Name = "Bogbord arkiv Then
        WbIsOpen = True
    End If
Next oWb
Avatar billede bak Forsker
27. november 2003 - 08:35 #10
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
Avatar billede swamboo Seniormester
27. november 2003 - 18:41 #11
Får stadig følgende fejl:
Method 'copy' of object'_worksheet' failed
i denne line:
    ws.Copy After:=wb2.Sheets.Count
Avatar billede bak Forsker
27. november 2003 - 19:11 #12
Sorry swamboo
linien skal se sådan ud

ws.Copy After:=WB2.Sheets(WB2.Sheets.Count)
Avatar billede swamboo Seniormester
27. november 2003 - 22:40 #13
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!)
Avatar billede bak Forsker
28. november 2003 - 09:00 #14
Vi skal lige have flyttet et par linier :-)

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
Avatar billede swamboo Seniormester
28. november 2003 - 21:40 #15
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...???
Avatar billede bak Forsker
28. november 2003 - 21:50 #16
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.
Avatar billede swamboo Seniormester
01. december 2003 - 23:18 #17
>>> Bak - er der råd til et tillægs spørgsmål??
Avatar billede swamboo Seniormester
01. december 2003 - 23:22 #18
Undskyld - det var under den forkerte tråd...

SORRY!!!!
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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