07. februar 2005 - 12:34Der er
17 kommentarer og 1 løsning
VBA-kode for Range, ved å benytte Cells og variabler
Har et regneark med måledata, disse data danner grunnlag for diagrammer.
Skal ved help av variabler prøve å anngi områdene som skal benyttes. Slik at jeg kan benytte VBA til å angi sourcedata for hvert enkelt diagramm.
I kolonne A står Datotid. ( dette er x-aksen )
I rad nr. 6 står kolonneoverskrifter, disse benyttes til labels
Rad nr. 7 skal IKKE være med i datagrunnlaget(kun for kontroll)
Datagrunnlaget ligger fra Rad 8 og ned til siste rad. I Celle "A6" står det et tall ( prosjektnummer ) KAN DET VÆRE INNHOLDET I DENNE CELLEN SOM SKAPER PROBLEMER?
Prøver å angi et Range til et diagramm skal ha....
DatoTid ( kolonne A) og data fra kolonne 4 og 5 Hvordan kan jeg angi området med variabler, slik at jeg får med kolonneoverskriften i rad 6?
Har prøvd med med denne koden:
With ActiveChart .SetSourceData Source:=Sheets(vScrcSht(n)(1)). _ Range(Cells(lRwOffst, 1), Cells(lRwOffst, 1), _ Cells(lRwOffst + 2, 1), Cells(lgLR, 1), _ Cells(lRwOffst, a), Cells(lRwOffst, b), _ Cells(lRwOffst + 2, a), Cells(lgLR, b)), _ PlotBy:=xlColumns With .Axes(xlCategory) .MinimumScale = lgDyNr(n) .MaximumScale = lgDyNr(n + 2) End With End With
Får feilmeldingen. Run-time error '1004' method 'cells' of object '_Global' failed
Det kan se ut til at variablene har korekte verdier, men at det er noe galt med angivelse av range.
Det vil være godt nok svar, hvis jeg kan få VBA koden, for dette området: =Drift1!$A$6;Drift1!$A$8:$A$400;Drift1!$H$6:$N$6;Drift1!$H$8:$N$400 Jeg tror løsningen må benytte Cells(), slik at jeg kan putte inn mine variabler.
bak antall rader og kolonner og hvilke kolonner varierer fra gang til gang. Jeg blir nødt til å angi sourceData ved hjelp av variabler. Tror jeg må benytte union(Range(Cells(.. men er ikke sikker
Det er jeg godt klar over, oyejo, men byg strengen chrng op ved hjælp af variablerne istedet for at bruge variablerne direkte i SetSourceData. Det vil gøre det nemmere at overskue og debugge om du har fået lavet strengen rigtigt.
Dim lRWoffst As Long Dim aw As Worksheet Set aw = ActiveSheet lRWoffst = 6 a = 4 b = 5 lgLr = 23 st = aw.Cells(lRWoffst, 1).Address st = st & "," & Range(aw.Cells(lRWoffst + 2, 1), aw.Cells(lgLr, 1)).Address st = st & "," & Range(aw.Cells(lRWoffst, a), aw.Cells(lRWoffst, b)).Address st = st & "," & Range(aw.Cells(lRWoffst + 2, a), aw.Cells(lgLr, b)).Address Debug.Print st With ActiveChart .SetSourceData Source:=Range(st), PlotBy:=xlColumns .HasTitle = True .ChartTitle.Text = "=Sheet2!" & Range("A6").Address(ReferenceStyle:=xlR1C1)
' With .Axes(xlCategory) ' .MinimumScale = lgDyNr(n) ' .MaximumScale = lgDyNr(n + 2) ' End With End With
bak, takker så mye så langt. jeg trenger ettermiddagen til å finne ut av dette, tror det skal gå bra. mulig jeg ikke får tid til å svare før i morgen tidlig. oyejo
bak, takker og bukker ( lurer på hvor mangen ganger du har hjulpet meg nå :-)
Denne koden virker som den skal: For n = 1 To 2 lgLR = UBound(vTime(n)) + lRwOffst b = 1 For i = 1 To UBound(vChrtFlw(n), 1) a = b + 1 b = a - 1 + vChrtFlw(n)(i) Set aw = Workbooks(sTmpXls).Worksheets(vScrcSht(n)(1)) st = vScrcSht(n)(1) & "!" & aw.Cells(lRwOffst, 1).Address st = st & "," & vScrcSht(n)(1) & "!" & Range(aw.Cells(lRwOffst + 2, 1), aw.Cells(lgLR, 1)).Address st = st & "," & vScrcSht(n)(1) & "!" & Range(aw.Cells(lRwOffst, a), aw.Cells(lRwOffst, b)).Address st = st & "," & vScrcSht(n)(1) & "!" & Range(aw.Cells(lRwOffst + 2, a), aw.Cells(lgLR, b)).Address
MsgBox st ' With Workbooks(sTmpXls).Charts(vChrtSht(n)(i)) .SetSourceData Source:=Range(st), PlotBy:=xlColumns With .Axes(xlCategory) .MinimumScale = lgDyNr(n) .MaximumScale = lgDyNr(n + 2) End With End With Next Next
men.. denne koden virker også! det ble ikke nødvendig med aw ( tror jeg ) kan se ut som om address kun tar range og ikke sheet. Send et svar så kommer velfortjente points!
For n = 1 To 2 lgLR = UBound(vTime(n)) + lRwOffst b = 1 For i = 1 To UBound(vChrtFlw(n), 1) a = b + 1 b = a - 1 + vChrtFlw(n)(i) With Workbooks(sTmpXls).Worksheets(vScrcSht(n)(1)) Set UnionRange = Union( _ Range(.Cells(lRwOffst, 1), .Cells(lRwOffst, 1)), _ Range(.Cells(lRwOffst + 2, 1), .Cells(lgLR, 1)), _ Range(.Cells(lRwOffst, a), .Cells(lRwOffst, b)), _ Range(.Cells(lRwOffst + 2, a), .Cells(lgLR, b))) End With
With Workbooks(sTmpXls).Charts(vChrtSht(n)(i)) .SetSourceData Source:=UnionRange With .Axes(xlCategory) .MinimumScale = lgDyNr(n) .MaximumScale = lgDyNr(n + 2) End With End With Next Next
den over ble feil, men den virker også, ;-) her kommer den jeg kommer til å benytte. For n = 1 To 2 lgLR = UBound(vTime(n)) + lRwOffst b = 1 For i = 1 To UBound(vChrtFlw(n), 1) a = b + 1 b = a - 1 + vChrtFlw(n)(i) st = vScrcSht(n)(1) & "!" & Cells(lRwOffst, 1).Address st = st & "," & vScrcSht(n)(1) & "!" & Range(Cells(lRwOffst + 2, 1), Cells(lgLR, 1)).Address st = st & "," & vScrcSht(n)(1) & "!" & Range(Cells(lRwOffst, a), Cells(lRwOffst, b)).Address st = st & "," & vScrcSht(n)(1) & "!" & Range(Cells(lRwOffst + 2, a), Cells(lgLR, b)).Address
MsgBox st ' With Workbooks(sTmpXls).Charts(vChrtSht(n)(i)) .SetSourceData Source:=Range(st), PlotBy:=xlColumns With .Axes(xlCategory) .MinimumScale = lgDyNr(n) .MaximumScale = lgDyNr(n + 2) End With End With Next Next
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.