• 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.

Code naar celnaam verwijzen

Status
Niet open voor verdere reacties.

danny147

Terugkerende gebruiker
Lid geworden
29 apr 2007
Berichten
4.744
Beste,

In cel A14 van activesheet staat RM-1_RE-1 en heeft als celnaam "Keuze"
Een ander sheet heeft dan weer een andere naam in cel A14, RM-2_RE-2
Met de volgende code wordt deze telkens verwezen naar "Keuze"

Code:
Range("Keuze") = ActiveSheet.Range("A14")

Nu wil ik deze splitsen zodat hij kijkt naar RM-1 en RE-1


Mijn code loopt fout op volgende regels:

Code:
arr = Split("Keuze", "_")

Daarna op

Code:
.AutoFilter 9, arr(0), 2, arr(1)

Waarschijnlijk is de naamverwijzing van keuze niet goed ?
 
Wat dacht je van:

Code:
arr = Split(Keuze.Value, "_")
ipv.
Code:
arr = Split("Keuze", "_")

Tijs.
 
@TimShel: Is er fundamenteel verschil met mijn posting #2? Anders gesteld: Is mijn posting #2 niet goed (en zo ja, waarom dan)?

Bedankt,

Tijs.
 
Jouw oplossing gaat niet werken. Heb je het getest?
 
Ok, het is me duidelijk: Ik raakte in de war door de (voor mij tenminste) 'vage' eerste VBA regel van danny147, waardoor ik het idee kreeg dat Keuze óf een benoemde celreeks was óf gewoon een variabele van het type Range.
Ik constateer dan nu dat het (blijkbaar) een variabele van het type String is.

Tijs.
 
Beste,

Beide getest maar code werkt niet :confused:

Code:
arr = Split("Keuze", "_")

Bij arr heeft hij = leeg
Bij [Keuze] heeft hij =""

Code:
.AutoFilter 9, arr(0), 2, arr(1)

Hier geeft hij weer: Het script valt buiten het bereik

Hier een deel van de code:

Code:
Sub invoeren_gegevens_WPL()
Dim arr, arr2, sn, i As Long, ii As Long, j As Long, x As Long, n As Long, c As Range, c00, c01, c02, twb As Worksheet
Dim lDatum As Date
Dim Keuze As String
Range("Keuze") = ActiveSheet.Range("A14")
'Workbooks.Open Filename:="file:\\sidmar.be\dfs\Dienst\GROEP\LAD\LPK\Planning\Systeem\Output.xlsx" 'gegevens werk
Workbooks.Open ThisWorkbook.Path & "\Output Danny.xlsx"
 With ActiveWorkbook
  Set twb = ThisWorkbook.ActiveSheet
  arr = Split([Keuze], "_") 'twb.name
   With Workbooks("Output Danny.xlsx").Sheets("Rawdata")
    With .Cells(1).CurrentRegion
     For x = 0 To 1
     If .Parent.AutoFilterMode Then .Parent.AutoFilterMode = False
        .AutoFilter 1, ">=" & CLng(twb.Cells(1, 4)), 1, "<=" & CLng(twb.Cells(1, 4))
        .AutoFilter 15, IIf(x = 0, "GT-SP-WKSE-15", "GT-SP-WKSM-15")
        .AutoFilter 9, arr(0), 2, arr(1)
                sn = .Cells(1).CurrentRegion
                     ReDim arr2(1 To UBound(sn), 1 To UBound(sn, 2))
                       For ii = 2 To UBound(sn)
                        If Not .Rows(ii).Hidden Then
                           n = n + 1
                         For j = 1 To UBound(sn, 2)
                          arr2(n, 1) = sn(ii, 3)
                          arr2(n, 2) = sn(ii, 4)
                          arr2(n, 3) = sn(ii, 6)
                          arr2(n, 4) = sn(ii, 11)
                          arr2(n, 9) = sn(ii, 9)
                          arr2(n, 10) = sn(ii, 8)
                          arr2(n, 12) = sn(ii, 13)
                          arr2(n, 13) = sn(ii, 14)
                          arr2(n, 14) = sn(ii, 2)
                        Next j
                        End If
                       Next ii
                      If n > 0 Then
                   twb.Range("A1000").End(xlUp).Offset(1).Resize(n, 14) = arr2
                   n = 0
                  Erase arr2
                End If
       Next x
    End With
   End With
.Close 0
End With
End Sub
 
(Wat mij betreft) probeer je het zo (niet alle code doorgenomen):

Vervang
Code:
Dim Keuze As String
Range("Keuze") = ActiveSheet.Range("A14")
Door
Code:
Dim Keuze As String
Keuze = ActiveSheet.Range("A14").Value

[Zie dat ik eerder ook al niet begreep waar dat Range(..... ) stuk voor bedoeld was. Leverde me bijna een aanvaring op met Timshel. Zie posting #6.]

Tijs.
 
Nog een snippet, puur voor test/referentie (geen onderdeel van jouw code), voor het geval je een foutmelding krijgt op de waardetoekenning van variabele arr, die jij als Long declareert maar ik als String (array). Uiteraard staat bij mij in A14 (conform je voorbeeld): RM-1_RE-1

Code:
Sub test()
  Dim Keuze As String
  Dim arr() As String
  Keuze = ActiveSheet.Range("A14").Value
  arr = Split([Keuze], "_")
  Debug.Print arr(0)
  Debug.Print arr(1)
End Sub

Levert braaf
RM-1
RE-1
als uitvoer op in het debug venster.

Tijs.
 
Laatst bewerkt:
Beste,

Nu vraagt hij het volgende bij arr

Code:
.AutoFilter 9, [COLOR=#FF0000]arr[/COLOR](0), 2, arr(1)

Er wordt een matrix verwacht
 
Hoe is arr nu gedeclareerd en hoe heeft die nu zijn waarde? Zonder code weten we niets...

Tijs.
 
Beste,

Heb bestandjes toegevoegd

Zet beide in dezelfde map.
Gebruik dan de knop Werkplekken bovenaan in het lint
Orders kan men ook opvragen maar eerst de werkplekken
Aanwezigheden gaat niet lukken omdat ik het tabblad verwijderd heb

Tets maar naar hartenlust :)
 

Bijlagen

Code:
Dim arr
Dim Keuze
    Keuze = ActiveSheet.Range("A14")
'Workbooks.Open Filename:="file:\\sidmar.be\dfs\Dienst\GROEP\LAD\LPK\Planning\Systeem\Output.xlsx" 'gegevens werk
Workbooks.Open ThisWorkbook.Path & "\Output Danny.xlsx"
 With ActiveWorkbook
  Set twb = ThisWorkbook.ActiveSheet
  arr = Split(Keuze, "_")

Of:
Code:
Dim arr
Dim Keuze As Range
    Set Keuze = ActiveSheet.Range("A14")
'Workbooks.Open Filename:="file:\\sidmar.be\dfs\Dienst\GROEP\LAD\LPK\Planning\Systeem\Output.xlsx" 'gegevens werk
Workbooks.Open ThisWorkbook.Path & "\Output Danny.xlsx"
 With ActiveWorkbook
  Set twb = ThisWorkbook.ActiveSheet
  arr = Split(Keuze, "_")
 
Beste HSV,

Je kent het bestandje ondertussen wel hé
We zitten niet stil en alles is voor verbetering vatbaar.
Wordt nog steeds gebruikt met soms wat aanpassingen.
Nu willen ze alle dagen in één werkblad steken en dit probeer ik dan voor elkaar te krijgen

Wat je nu weer gedaan hebt zit hem in de details --> Fantastisch gewoon :thumb:

Ga hem nog niet afsluiten en kijken waar het verder fout loopt
 
Beste,

Met de naam wil ik ietsje verder gaan nl. RM-1_RE-1_RM-DG_RE-DG (= Keuze)
Krijg nu een foutmelding bij regel autofilter 9, arr....
Geeft aan : onjuist aantal argumenten of ongeldige eigenschappentoewijzing
Als ik de code opvolg dat geeft hij netjes aan dat arr(0) = RM-1, arr(1) = RE-1, arr(2) = RM-DG en arr(3) = RE-DG
Kunnen jullie dit eens bekijken ?

Code:
Sub invoeren_gegevens_WPL()
Dim sn, i As Long, ii As Long, j As Long, x As Long, n As Long, c As Range, c00, c01, c02, twb As Worksheet
Dim arr
Dim Keuze
Keuze = ActiveSheet.Range("A14")

        'Workbooks.Open Filename:="file:\\sidmar.be\dfs\Dienst\GROEP\LAD\LPK\Planning\Systeem\Laatste versie\Danny\Output.xlsx" 'gegevens werk
        Workbooks.Open ThisWorkbook.Path & "\Output Danny.xlsx" 'gegevens Danny E-schijf
        With ActiveWorkbook
        Set twb = ThisWorkbook.ActiveSheet
        arr = Split(Keuze, "_")
        With Workbooks("Output Danny.xlsx").Sheets("Rawdata")
        With .Cells(1).CurrentRegion
        For x = 0 To 1
        If .Parent.AutoFilterMode Then .Parent.AutoFilterMode = False
            .AutoFilter 1, ">=" & CLng(twb.Cells(1, 4)), 1, "<=" & CLng(twb.Cells(1, 4))
            .AutoFilter 15, IIf(x = 0, "GT-SP-WKSE-15", "GT-SP-WKSM-15")
            .AutoFilter 9, arr(0), 2, arr(1), 3, arr(2), 4, arr(3)
                        sn = .Cells(1).CurrentRegion
                        ReDim arr2(1 To UBound(sn), 1 To UBound(sn, 2), 1 To UBound(sn, 3), 1 To UBound(sn, 4))
                        For ii = 4 To UBound(sn)
                        If Not .Rows(ii).Hidden Then
                            n = n + 1
                        For j = 1 To UBound(sn, 4)
                          arr2(n, 1) = sn(ii, 3)
                          arr2(n, 2) = sn(ii, 4)
                          arr2(n, 3) = sn(ii, 6)
                          arr2(n, 4) = sn(ii, 11)
                          arr2(n, 9) = sn(ii, 9)
                          arr2(n, 10) = sn(ii, 8)
                          arr2(n, 12) = sn(ii, 13)
                          arr2(n, 13) = sn(ii, 14)
                          arr2(n, 14) = sn(ii, 2)
                        Next j
                        End If
                        Next ii
                        If n > 0 Then
                            twb.Range("c1000").End(xlUp).Offset(1, -2).Resize(n, 14) = arr2
                        n = 0
                        Erase arr2
                        End If
        Next x
        End With
        End With
            .Close 0
        End With
End Sub
 
Als ik deze pagina (en ook de info van snb) mag geloven is het maximum aantal criteria per autofilter 2, en jij probeert er 4.
Dus je zult moeten gaan splitsen:
Code:
            .AutoFilter 9, arr(0), 2, arr(1)
            .AutoFilter 3, arr(2), 4, arr(3)

PS: Jouw code past in geen enkele van de voorbeelden in de link dus ik snap die niet, maar ik neem aan dat die werkt (met 2 criteria) en dat je (nu) bedoelt om (o.a.) te filteren op kolom/'veld' 9 o.b.v. arr(0) en op kolom/'veld' 2 o.b.v. arr(1) en op kolom/'veld' 3 o.b.v. arr(2) en op kolom/'veld' 4 o.b.v. arr(3)

Tijs.
 
Laatst bewerkt:
Die melding over arr op autofilter 9 kan ik niet helemaal verklaren maar mogelijk wordt deze veroorzaakt door de volgende regel

Code:
.AutoFilter 3, arr(2), [COLOR="#FF0000"]4[/COLOR], arr(3)

.AutoFilter( Field , Criteria1 , Operator , Criteria2 , VisibleDropDown )

waarde 4 als de operator staat voor xlBottom10Items en bij een top 10 (of bottom 10) kun je geen 2e criterium opgeven.

de code zal er dus zo uit moeten zien
Code:
.AutoFilter 3, arr(2), 4
 
Laatst bewerkt:
Oeps mijn vorige antwoord snijd geen hout richting een oplossing omdat ik voortborduurde op het antwoord van dnties en niet de orginele coderegel had gekeken. (iets met de wet van de toegepaste luiheid, hoewel de toelichting op de code wel klopt, maar niet relevant voor de oplossing )

Code:
.AutoFilter 9, arr(0), 2, arr(1), 3, arr(2), 4, arr(3)

maar ik weet niet zeker wat jij met 2, 3, en 4, in de code probeerde te bereiken maar ik vermoed dat je 4 individuele waarden uit je array op kolom 9 (field 9) wilt filteren dan doe dat door die 4 waarden weer in een array te zetten.

dan wordt het volgens mij
Code:
.AutoFilter 9, Array(arr(0), arr(1), arr(2), arr(3))
 
Laatst bewerkt:
@roeljongman: Zo zie je maar dat het afkorten van code (zoals danny147 doet) ook kan leiden tot interpretatieproblemen bij anderen. Zowel bij jou als bij mij, alvast, om mee te beginnen.

Overigens denk ook ik nu (ook o.b.v. de link die ik zelf presenteerde) dat het hier gaat puur om het filteren op kolom/veld 9 en dus dat mijn interpretatie over filteren van meerdere kolommen/velden geen hout snijdt.

Wél heeft danny147 dan hier een probleem, omdat, zie "Filter on More Than Two “Or” Criteria Using Array" dat daar maar 1 criteriasoort aan gegeven kan worden, dus niet een mix van xlBottom10Items, xlTop10Items, xlOr. Lijkt mij dus dat hij alsnog zal moeten gaan splitsen, en mogelijk kan wat hij wil dan niet eens (vooropgesteld dat 2,3 en 4 inderdaad XlAutoFilterOperators zijn).

Tijs.
 
Beste helpers ;)

Dat van roeljongman werkt met

Code:
.AutoFilter 9, Array(arr(0), arr(1), arr(2), arr(3))

dwz dat hij hier geen foutmelding op weer geeft.
Nu geeft hij deze foutmelding op de volgende regel --> Het subscript valt buiten het bereik

Code:
ReDim arr2(1 To UBound(sn), 1 To UBound(sn, 2), 1 To UBound(sn, 3), 1 To UBound(sn, 4))

Regel per regel geraken we er wel hé
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan