Sheets niet geinitailiseerd

Status
Niet open voor verdere reacties.

reinier1991

Nieuwe gebruiker
Lid geworden
25 jan 2013
Berichten
2
Goedendag,

Voor een project ben ik bezig met het schrijven van VBA code. Hiervoor wil ik van de ene sheet naar de andere sheet schrijven (input/output)
Voor de veiligheid wil ik weten wat de naam van de volgende sheet is, zodat ik zeker weet dat ik de juiste sheet selecteer.

Hiervoor gebruik ik:
Code:
AssignedSheetName = Sheets((ThisWorkbook.ActiveSheet.Index) + 1).Name

Als ik mijn Excel sluit en opstart, krijg ik de foutmelding:
Code:
Fout 5 tijdens uitvoering:
Ongeldige procedure-aanroep of ongeldig argument

Ik kan met geen enkele mogelijkheid Sheets(<INDEX>) aanroepen zonder die foutmelding.
Als ik echter daarna op "Beëindigen" klik en opnieuw de knop indruk, werkt dit vlekkeloos.

Moet ik hiervoor nog een initialisatie aanroepen of iets voordat ik ThisWorkbook.Sheets of ThisWorkbook.Worksheets() aan kan roepen??

Alvast bedankt voor de reactie!
Reinier
 
schrijf van het ene naar het andere werkblad:

Code:
Sub M_snb()
  sheets("Blad2").range("F5:G10")=sheets("Blad1").range("F5:G10").Value
End Sub
 
Misschien krijg je de foutmelding indien/doordat het laatste tabblad actief is, want je roept vervolgens de naam aan van het volgende blad ActiveSheet.index + 1, en die bestaat natuurlijk niet.

Het is trouwens handig om in code niet de tabbladnaam te gebruiken die je op de tabs ziet staan, want die kunnen door de gebruiker van naam veranderd worden, maar de naam die je in de VBA-verkenner ziet staan; daar staat iets als Blad1 (Blad1) of Blad2 (Een tabblad). Tussen haakjes staat de naam die je op de tabs ziet. Je hoeft dan ook niet meer
Code:
Sheets("Een tabblad").Range....
te gebruiken maar
Code:
Blad2.Range("...
Zie ook http://www.wiseowl.co.uk/blog/s112/microsoft-excel-vba-worksheet-sheet-name-codename.htm
 
@daan
Het is trouwens handig om in code niet de tabbladnaam te gebruiken die je op de tabs ziet staan, want die kunnen door de gebruiker van naam veranderd worden,

De gebruiker kan even zo vrolijk de codenaam van een blad wijzigen.
 
Goedendag,

hartelijk dank voor de snelle reacties! Ik denk dat het toch handiger is mijn volledige project te beschrijven:
Stapsgewijs:
- aanroep van macro via een Click
- macro zoekt alle bestanden die noodzakelijk zijn en de daarbij gerelateerde sheetnames, (huidige en volgende sheet [volgende sheet bestaat!])
- de huidige sheet wordt gekopieerd naar een temp_input.xls
- er wordt een Java .jar aangeroepen via de shell en die gebruikt temp_input.xls om een temp_output.xls te maken
- als Java klaar is, wordt dit teruggekoppeld naar de VBA code
- VBA leest de output van temp_output.xls en kopieert deze naar de "volgende sheet".

het is hierom dus noodzakelijk de naam of de index van "volgende sheet" te weten...
Hiervoor had ik de functie gebruikt zoals boven beschreven.
het probleem trad echter dus op dat bij de eerste run (direct na het 'vers' openen van Excel) zowel de Sheets(<index>) als Worksheets(<index>) de genoemde foutmelding gaf. Het lijkt dus alsof ik eerst een 'check' moet doen of deze wel bestaan.

Mijn code werkt wel met de codenamen zoals door daan108 genoemd (dank!), maar dat is dus ook 'variabel'.

Verder ben ik benieuwd wat hier het probleem kan zijn en of iemand hier dus al eerder tegen aan is gelopen.
Hoe kan ik zorgen dat de functie Sheets ingeladen is?

Alvast bedankt!

P.S.
Mocht de beschrijving nog niet duidelijk zijn - wat ik me best kan voorstellen - vraag gerust.
 
Ik begrijp het probleem nog niet helemaal, maar heb je hier iets aan?
Code:
Dim WS as Worksheet
Set WS = Sheets.Add
You don't have to know where is it located, what's it's name, you just refer to it as WS.
van:
http://www.mrexcel.com/td0097.html

Of dit, telt aantal tabs in het bestand
Code:
Function AantalSheets() As Integer
    Application.Volatile
    AantalSheets = Application.Sheets.Count
End Function

Of dit, om het nummer van een tab te bepalen of de naam van tab gegeven het nummer. Van J. Walkenbach.
Code:
Private Function WorksheetIndex(x As Worksheet) As Integer
'   Returns the Worksheets (not Sheets) Index
    Dim Wks As Worksheet, WksNum As Integer
    WksNum = 1
    For Each Wks In x.Parent.Worksheets
        If x.Name = Wks.Name Then
            WorksheetIndex = WksNum
            Exit Function
        End If
        WksNum = WksNum + 1
    Next Wks
End Function

Function SheetNummer(x As String) As Integer
    Dim Wks As Worksheet, WksNum As Integer
    WksNum = 1
    For Each Wks In Application.Sheets
        If x = Wks.Name Then
            SheetNummer = WksNum
            Exit Function
        End If
        WksNum = WksNum + 1
    Next Wks
End Function
Function SheetIndex(ref As Variant) As Integer
    Dim Wks As Worksheet, WksNum As Integer
    WksNum = 1
        x = ref.Parent.Name
        For Each Wks In Application.Sheets
            If x = Wks.Name Then
                SheetIndex = WksNum
                Exit Function
            End If
            WksNum = WksNum + 1
        Next Wks
End Function
 
Schrijf alles in VBA in in Java.
Gebruik een Excel-werkruimte om alle gekoppelde bestanden tegelijkertijd te openen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan