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

[VBA] Cel wordt niet gevonden bij zoekopdracht

Pagina: 1
Acties:

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
Een offspin van \[PoSh/VBA] Macro injecteren in Excel vanuit Powershell overigens.

De volgende code maakt een grafiek op basis van gegevens op een ander tabblad. Via een range-object 'Finder' wordt gezocht naar de cel met de juiste waarde en het rijnummer wordt teruggegeven zodat de grafiek aangemaakt kan worden.

Visual Basic .NET:
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Sub AddGraph()
    'By YellowOnline
    '
    'Declarations
    Dim Finder As Range
    Dim ChartSurface As Range
    Dim ChartObject As ChartObject
    Dim strGraphName As String
   
    'Creating the chart
    strGraphName = "='Packages Graph'" & "!" & "$B$1"
    arrGraphLabels = "='Packages Data'" & "!" & "$E$1:$P$1"
          
    With Sheets("Packages Data").Range("A:A")
            Set Finder = .Find(What:=strGraphName, After:=.Cells(.Cells.Count), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
            If Not Finder Is Nothing Then
                Application.Goto Finder
            Else
                MsgBox "Software not found"
            End If
    End With
        
    strRow = CStr(ActiveCell.Row)
    Sheets("Packages Graph").Activate
    arrGraphValues = "='Packages Data'" & "!" & "$E$" + strRow + ":" + "$P$" + strRow
    
    ActiveSheet.Shapes.AddChart.Select
    ActiveChart.ChartType = xlLineMarkers
    ActiveChart.SeriesCollection.NewSeries
    ActiveChart.SeriesCollection(1).Name = strGraphName
    ActiveChart.SeriesCollection(1).Values = arrGraphValues
    ActiveChart.SeriesCollection(1).XValues = arrGraphLabels
        
    'Deleting the automatic Legend
    ActiveChart.Legend.Select
    Selection.Delete
    
    'Setting size
    Set ChartSurface = ActiveSheet.Range("C4:C30")
    Set ChartObject = ActiveChart.Parent
    ChartObject.Height = ChartSurface.Height
    ChartObject.Width = ChartSurface.Width
    ChartObject.Top = ChartSurface.Top
    ChartObject.Left = ChartSurface.Left
End Sub


Het probleem draait rond strGraphName. Deze variabele wordt goed ingevuld aangezien ActiveChart.SeriesCollection(1).Name = strGraphName doet wat het moet doen (nl. strGraphName tonen). Desalniettemin krijg ik een Software not found error terug wanneer ik de code uitvoer.

Het meest bizarre:
Stel, in Packages Graph!$B$1 zit bijvoorbeeld "MS Office 2010".
Met strGraphName = "='Packages Graph'" & "!" & "$B$1" krijg ik terug dat strGraphName = "MS Office 2010" zoals verwacht. Maar wanneer ik het in de Finder steek krijg ik die 'not found'.

Hier komt ie: als ik expliciet strGraphName = "MS Office 2010" in de code zou zetten, dan werkt het wel. Daar schiet ik natuurlijk niets mee op, aangezien het dan niet dynamisch meer is, maar het toont dat de Finder wel werkt.

Spelen met quotes, met trimming (wat zinloos is aangezien de waarde uit een dropdown box komt),... het biedt allemaal geen soelaas.

Als iemand weet wat er aan de hand is dan hoor ik het graag.

  • psvjw
  • Registratie: Oktober 2010
  • Laatst online: 27-08 15:54
Wat mij opvalt:

- De variabele 'arrGraphLabels' staat niet gedeclareerd
- Je zoekt in kolom A:A terwijl je labels in kolom E:P staan...

Maar ik ben geen ervaren VBA'er :/

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

doe maar eens een
code:
1
 debug.print strGraphName
Deze variabele wordt goed ingevuld aangezien ActiveChart.SeriesCollection(1).Name = strGraphName doet wat het moet doen (nl. strGraphName tonen).
De conclusie volgt niet uit het feit. '=Mijn nickname' en 'Lustucru' zijn echt twee verschillende strings, al kunnen ze, mits in een of andere parser gevoerd, best tot dezelfde output leiden.

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


  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
psvjw schreef op vrijdag 13 juli 2012 @ 11:33:
Wat mij opvalt:

- De variabele 'arrGraphLabels' staat niet gedeclareerd
- Je zoekt in kolom A:A terwijl je labels in kolom E:P staan...

Maar ik ben geen ervaren VBA'er :/
Wbt. de kolommen maakt dit het duidelijker:
Afbeeldingslocatie: http://tweakers.net/ext/f/w4JMjYcNKlWqybqoKZfyOBS0/full.jpg

Wbt. arrGraphLabels heb je gelijk. Expliciete declaratie is niet nodig in VBA, maar ik zal het doen omwille van de good practice :) Vermoedelijk is dat een Range object - in PoSh weet ik dat soort dingen meteen maar VBA is nieuw (sinds gisteren) voor me.
Lustucru schreef op vrijdag 13 juli 2012 @ 12:08:
doe maar eens een
code:
1
 debug.print strGraphName


[...]

De conclusie volgt niet uit het feit. '=Mijn nickname' en 'Lustucru' zijn echt twee verschillende strings, al kunnen ze, mits in een of andere parser gevoerd, best tot dezelfde output leiden.
+1

Ik heb over het Immediate Window geleerd en over Debug.Print :)

Via die laatste zie ik dat de waarde van de variable de verwijzing naar de cel is ("='Packages Graph'!$B$1") is en niet de waarde van die cel zelf. Ik ga op zoek naar hoe de werkelijke waarde te krijgen nu. Alvast bedankt voor deze debugging hulp - daar ga ik nog veel plezier (nou ja) aan beleven :)


Edit:
Gevonden!

Visual Basic .NET:
1
strGraphName = Worksheets("Packages Graph").Cells(1, "$B").Value


Nogmaals dank aan Lustucru om me op het goeie pad te zetten!

[ Voor 5% gewijzigd door YellowOnline op 13-07-2012 13:50 ]