• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

worksheet name in VB

Status
Niet open voor verdere reacties.

nobody11

Gebruiker
Lid geworden
20 dec 2007
Berichten
552
hey iedereen,

ik heb een bepaalde sub geschreven. Het resultaat van de berekeningen die in de sub worden gedaan komen als output in een bepaalde output sheet (deze sheet wordt aangemaakt).

De naam van die sheet kan door de gebruiker ingegeven worden (stel in cel A1), nu als die gebruiker de sub opnieuw laat lopen (zonder de naam te veranderen),
dan zal de code een error geven aangezien de worskheet die hij moet aanmaken reeds bestaat.
Hoe kan ik een soort controle inbouwen dat eerst nagaat of er een worskheet bestaat met de naam die de gebruiker opgeeft in cel A1.
ik heb al wat geprobeerd, maar kom niet verder dan:

Code:
Sub controlenaam()
        Dim wks As Worksheet

    For Each wks In ActiveWindow

 hier zit ik vast.. ik zou graag hebben dat als er al een ws bestaat met de naam die in A1 gegeven wordt , 
dat de naam die de gebruiker opgeeft, aangevuld wordt met bv een 1..
End Sub

hoe zou ik dit best aanpakken?
 
Voorbeeldcode van een functie om te zien of een sheet bestaat:

Code:
Function SheetExist(sName As String) As Boolean
Dim ws As Object

On Error Resume Next
Set ws = ThisWorkbook.Sheets(sName)
On Error GoTo 0

If ws Is Nothing Then
    SheetExist = False
Else
    SheetExist = True
End If

End Function

voorbeeldcode voor aanroep functie:

Code:
Sub test()
Dim sShtName As String

sShtName = "Grafiek1"
Debug.Print SheetExist(sShtName)

End Sub
 
Voorbeeldcode van een functie om te zien of een sheet bestaat:

Code:
Function SheetExist(sName As String) As Boolean
Dim ws As Object

On Error Resume Next
Set ws = ThisWorkbook.Sheets(sName)
On Error GoTo 0

If ws Is Nothing Then
    SheetExist = False
Else
    SheetExist = True
End If

End Function

voorbeeldcode voor aanroep functie:

Code:
Sub test()
Dim sShtName As String

sShtName = "Grafiek1"
Debug.Print SheetExist(sShtName)

End Sub
bedankt,ik heb een vraagje

voor wat dient onderstaande code.. en die verwijzing naar "goto 0", is dat iets typisch in VB? want ik zie nergens de verwjizing 0..
Code:
On Error Resume Next
Set ws = ThisWorkbook.Sheets(sName)
On Error GoTo 0
 
Eerst even een kleine aanpassing aan de code:

Code:
If ws Is Nothing Then
    SheetExist = False
Else
    SheetExist = True
End If

kan vervangen worden door :

Code:
SheetExist = Not (ws Is Nothing)

In het kort over die error handling:

On error resume next, geeft aan dat de code moet verder gaan met uitvoering wanneer er een fout naar boven komt (dus fout negeren).

On error goto 0, zet de standaard error handling van VBA terug aan, dus fout weergeven in een msgbox, en met de "standaard" Excel fout melding (niet met een custom omschrijving).

Meer info hierover op deze link:

http://www.cpearson.com/excel/ErrorHandling.htm
 
Nobody11,

Volgende code om te testen is misschien nog beter. Ze is korter, en maakt niet gebruik van een bijkomend object (voorheen ws - welke is beste terug op Nothing had gezet alvorens de functie te verlaten, maar dat even vergeten was).

Nieuwe code:

Code:
Function SheetExist(sName As String) As Boolean

On Error Resume Next
SheetExist = Len(ThisWorkbook.Sheets(sName).Name) > 0
On Error GoTo 0

End Function
 
on error goto 0 kan in deze funktie achterwege blijven.

Code:
Function bestaat(Naam as String) As Boolean
    On Error Resume Next
    bestaat = Sheets(Naam).Activate
End Function
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan