Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[excel 2002] Runtime error, wat zie ik over het hoofd

Pagina: 1
Acties:

  • MrAngry
  • Registratie: December 2001
  • Laatst online: 14:27
Even nog een vraagje op de vrijdagmiddag want ik zit hier een beetje leeg naar het scherm te staren zonder dat ik iets op schiet.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Private Sub searchoperatorinrange()
With OperatorSheet
  
    Set LastCell = .Cells(.Rows.Count, "G").End(xlUp)
    Set Firstcell = .Cells(WnName.Worksheets("instellingen").Range("B6"), "G")
    ' test of deze constructie werkt: .Range(Firstcell, LastCell).Copy
      
  End With
  
For Each wSheet In WnName.Worksheets
    OperatorNm = ActiveSheet.Name
    Set wBook = Workbooks(PP064name)
    
    [b]For Each Ocell In wBook.OperatorSheet.Range(Firstcell, LastCell)[/b]
        If Ocell.Value = OperatorNm Then
            'If Range("E" & Ocell.Row).Value > WnName.Worksheet(OperatorNm).Cells(WnName.Worksheet(OperatorNm).Rows.Count, "E").End(xlDown) Then
             '   Rows(Ocell.Row).Copy
              '  WnName.Worksheet(OperatorNm).Cells(WnName.Worksheet(OperatorNm).Rows.Count, "E").End(xlDown).Offset(1, 0).Paste
            'Else
            'End If
            
        ' Checkdate
        Else
        End If
    Next
Next
End Sub


In die dikgedrukte lijn krijg ik een run-time error '438'. Object doesn't support this property or method.

Ik probeer een macrotje te schrijven die in een bepaald workbook met ruwe data een range doorloopt, kijkt of er een naam matched met degene waarin ik op dat moment geinteresseerd ben en dan (eventueel na een check of de data nieuw is) data gaat kopieren naar m'n huidige workbook. Ik zit dus in 2 workbooks te kloten (wBook en Wnname). Het gaat dus al mis bij het doorlopen van de range. Bovenstaand subje is uiteraard niet alle code, hopelijk wel genoeg. Wie weet waar die error vandaan komt?

Er is maar één goed systeem en dat is een geluidsysteem - Sef


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

operatorsheet is geen eigenschap van van een workbookobject maar een lid van de collectie sheets:
code:
1
 wBook.Sheets!OperatorSheet


en als je nu voortaan je variabelen netjes declareert krijg je de foutmelding al bij het inkloppen. :)

[ Voor 27% gewijzigd door Lustucru op 15-01-2010 15:48 ]

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • MrAngry
  • Registratie: December 2001
  • Laatst online: 14:27
Lustucru schreef op vrijdag 15 januari 2010 @ 15:47:
operatorsheet is geen eigenschap van van een workbookobject maar een lid van de collectie sheets:
code:
1
 wBook.Sheets!OperatorSheet


en als je nu voortaan je variabelen netjes declareert krijg je de foutmelding al bij het inkloppen. :)
Bedankt voor je reactie.
Operatorsheet is gedeclareerd als een worksheet object, maar dan kan ik hem dus niet inzetten zoals ik dat nu gedaan heb?
code:
1
2
Dim OperatorSheet As Worksheet
Set OperatorSheet = Workbooks(PP064name).Worksheets(WnName.Worksheets("instellingen").Range("B4").Value)

In jouw oplossing krijg ik trouwens een subscript out of range error (ik neem aan dat, dat komt door de !). In ieder geval zit er vooruitgang in :)

Er is maar één goed systeem en dat is een geluidsysteem - Sef


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Nope: het probleem dat je de fout pas bij runtime krijgt is dat je wbook niet als workbook hebt gedeclareerd. ;)

Ik kijk nu pas naar de eerste regels en zie dat operatorsheet een objVariabele is. Dan slaat dat wbook.operatorsheet.range gewoon nergens op. Ik weet niet wat je wilt bereiken, maar om te verwijzen naar een cel op operatorsheet is alleen operatorsheet.range etc genoeg.

nofi, maar volgens mij is je code een volslagen zootje :P Wat moet die code eigenlijk doen?

[ Voor 10% gewijzigd door Lustucru op 15-01-2010 17:18 ]

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • MrAngry
  • Registratie: December 2001
  • Laatst online: 14:27
No offence taken, ik voel me geen expert en leer graag.

wbook is ook keurig als workbook gedeclareerd (alleen niet in het subje wat ik gepost hebt, maar in m'n module). Ik heb om het simpel te houden slechts een deel van de code gepost.

Wat we hebben is workbook a, daar staat een lijst in met product batches, de bijbehorende operators en het aantal bacteriën dat tijdens productie is gevonden op de verschillende operators. Ik mag/wil niet in die data kloten.
Het doel is om ipv het aantal bacterien per product batch, het aantal bacterien per operator tegen de datum uit te zetten. Dus ik heb een workbook b, met voor elke operator een sheet. Wat ik wil is dat als je dat workbook opent hij voor elke worksheet nagaat of er voor de betreffende operator nieuwe data in workbook a staat en die data kopieerd en grafieken update.

De betreffende sub die ik heb gepost definieerd de range in workbook a waarin gezocht moet worden naar de operators en zoekt vervolgens voor elke cell in die range of de naam die erin staat overeenkomt met de sheet die op datmoment actief is in workbook b.

edit: tijd om te stoppen met werken :9

[ Voor 3% gewijzigd door MrAngry op 15-01-2010 17:35 ]

Er is maar één goed systeem en dat is een geluidsysteem - Sef


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

In dat geval kun je dus dat wbook. weglaten en doet hij het. Helderder is imo
Visual Basic:
1
2
3
4
5
6
7
8
9
10
dim bron as range
dim operatorSheet as sheet
dim naamCel as range

Set bron = [bepaal je range]

For each operatorSheet in OperatorWorkbook.sheets
        operatornaam = operatorSheet.name
        For each naamCel in bron
                  etc.

[ Voor 5% gewijzigd door Lustucru op 15-01-2010 21:45 ]

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • MrAngry
  • Registratie: December 2001
  • Laatst online: 14:27
Dankje, het werkt nu. Begrijp ik het goed dat het dus geen zin heeft (en zelfs tot fouten leidt) om naar objecten in andere objecten te verwijzen met objectVar1.objectVar2.range, maar dat je ze gelijk in elkaar definieerd met set? Dus dim objectvar2 als worksheet en set objectvar2 = workbook.worksheet?

Er is maar één goed systeem en dat is een geluidsysteem - Sef

Pagina: 1