|
| Excel-makro: referere til indhold af celle~ Fra : Niels Henrik Egebjer~ |
Dato : 04-02-03 13:20 |
|
Hej NG!
Jeg arbejder med en makro i Excel som skal markere et dataareal og lave en
graf. Markeringen af data sker i følgende linie:
******************************************************************
ActiveChart.SetSourceData Source:=Sheets("Data").Range("B6:B9,D6:D9,H6:H9"),
_
PlotBy:=xlColumns
******************************************************************
Da antal linier med data varierer, arealet i stedet defineres som
("B6:B(x),D6:D(x),H6:H(x)").
Jeg har rækkenummeret stående i en celle K4 på ark Sheet1 i samme
projektmappe. Problemet er at jeg ikke ved hvordan jeg refererer til den fra
ovenstående makro.
Håber nogle kan hjælpe.
mvh
Niels Henrik Egebjerg
| |
preben nielsen (04-02-2003)
| Kommentar Fra : preben nielsen |
Dato : 04-02-03 17:30 |
|
"Niels Henrik Egebjerg" <nhe@mail.dk> skrev i en meddelelse
news:3e3fafce$0$185$edfadb0f@dread15.news.tele.dk...
> Hej NG!
>
> Jeg arbejder med en makro i Excel som skal markere et dataareal
og lave en
> graf. Markeringen af data sker i følgende linie:
>
>
******************************************************************
> ActiveChart.SetSourceData
Source:=Sheets("Data").Range("B6:B9,D6:D9,H6:H9"),
> _
> PlotBy:=xlColumns
>
******************************************************************
>
> Da antal linier med data varierer, arealet i stedet defineres
som
> ("B6:B(x),D6:D(x),H6:H(x)").
>
> Jeg har rækkenummeret stående i en celle K4 på ark Sheet1 i
samme
> projektmappe. Problemet er at jeg ikke ved hvordan jeg refererer
til den fra
> ovenstående makro.
F.eks. som Sheets("Sheet1").Range("K4").value
Men hvorfor navngiver du ikke bare dine kolonner ?
--
/\ preben nielsen
\/\ prel@post.tele.dk
| |
Niels Henrik Egebjer~ (04-02-2003)
| Kommentar Fra : Niels Henrik Egebjer~ |
Dato : 04-02-03 20:18 |
|
"preben nielsen" <prel@post.tele.dk> skrev i en meddelelse
news:3e3fea88$0$170$edfadb0f@dread16.news.tele.dk...
> F.eks. som Sheets("Sheet1").Range("K4").value
Ja, men hvordan får jeg det ind i sammenhængen? Jeg kan jo ikke skrive
Source:=Sheets("Data").Range("B6:B"&
Source:=Sheets("Data").Range("K4").value&:B9,D6:D9,H6:H9"),D6:D9,H6:H9")
> Men hvorfor navngiver du ikke bare dine kolonner ?
Jo det er sikkert en god idé, men udmiddelbart er mit kendskab til VB for
lille (endnu da..). Jeg indspiller derfor en makro i Excel og prøver
herefter at rette den til. Det som helt konkret er opgaven er følgende:
- fra en AS400-applikation får jeg smit nogle linier ind i Excel. Jeg ved på
forhånd ikke hvor mange, jeg ved bare at jeg starter med linie 6. Yderligere
kan jeg overføre en "tæller" til et felt i Excel som fortæller hvor mange
linier der er overført, hermed kan jeg i et andet felt beregne hvilken række
der er den sidste. Jeg vil nu gerne generere en graf ud fra dette
data-areal. Derfor skal arealet være
Source:=Sheets("Data").Range("B6:B9,D6:D9,H6:H9"),... Hvis der er tale om 4
linier. ("B6:b12,d6:d12,.... hvis der er tale om 7 linier osv... jeg har
tallet stående i en celle, men problemet er altså hvordan jeg skriver
ovenstående med reference til den celle.
Et konkret eksempel ville være kanon!
På forhånd tak....
| |
Niels Henrik Egebjer~ (05-02-2003)
| Kommentar Fra : Niels Henrik Egebjer~ |
Dato : 05-02-03 06:18 |
|
Her er den nuværende Makro hvis det kan være til nogen hjælp!
Sub Ton()
Range("B6:B19,D6:D19,H6:H19").Select
Range("H6").Activate
Charts.Add
ActiveChart.ChartType = xl3DColumn
ActiveChart.SetSourceData
Source:=Sheets("Data").Range("B6:B19,D6:D19,H6:H19" _
), PlotBy:=xlColumns
ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="TON"
With ActiveChart.Axes(xlCategory)
.HasMajorGridlines = False
.HasMinorGridlines = False
End With
With ActiveChart.Axes(xlSeries)
.HasMajorGridlines = False
.HasMinorGridlines = False
End With
With ActiveChart.Axes(xlValue)
.HasMajorGridlines = True
.HasMinorGridlines = False
End With
ActiveChart.WallsAndGridlines2D = False
End Sub
| |
preben nielsen (05-02-2003)
| Kommentar Fra : preben nielsen |
Dato : 05-02-03 17:22 |
|
"Niels Henrik Egebjerg" <nhe@mail.dk> skrev i en meddelelse
news:3e409e6e$0$149$edfadb0f@dread15.news.tele.dk...
> Her er den nuværende Makro hvis det kan være til nogen hjælp!
>
>
> Sub Ton()
' Ok, her kommer discountløsningen
dim sPos1 as String
dim sPos2 as String
dim sAdr as String
dim wks as Worksheet
dim rge as Range
set wks = Worksheets("Sheet1") ' Så skal vi ikke
gentage dette navn senere
' Byg din adresse - mest overskuelige måde - synes jeg
sAdr = "Bx1:Bx2,Dx1:Dx2,Hx1:Hx2"
sPos1 = "6"
sPos2 = CStr(wks.Range("K4").Value)
sAdr = Replace(sAdr,"x1",sPos1)
sAdr = Replace(sAdr,"x2",sPos2)
> Range("B6:B19,D6:D19,H6:H19").Select
Bliver til:
wks.Range(sAdr).Select ' Men hvorfor gør vi det
???? Er det bare noget du har optaget med recorderen ??
> Range("H6").Activate
> Charts.Add
> ActiveChart.ChartType = xl3DColumn
> ActiveChart.SetSourceData
Source:=Sheets("Data").Range("B6:B19,D6:D19,H6:H19"),
PlotBy:=xlColumns
Bliver til
ActiveChart.SetSourceData Source:=wks.Range(sAdr),
PlotBy:=xlColumns
> ActiveChart.Location Where:=xlLocationAsNewSheet,
Name:="TON"
> With ActiveChart.Axes(xlCategory)
> .HasMajorGridlines = False
> .HasMinorGridlines = False
> End With
> With ActiveChart.Axes(xlSeries)
> .HasMajorGridlines = False
> .HasMinorGridlines = False
> End With
> With ActiveChart.Axes(xlValue)
> .HasMajorGridlines = True
> .HasMinorGridlines = False
> End With
> ActiveChart.WallsAndGridlines2D = False
> End Sub
--
/\ preben nielsen
\/\ prel@post.tele.dk
| |
Niels Henrik Egebjer~ (05-02-2003)
| Kommentar Fra : Niels Henrik Egebjer~ |
Dato : 05-02-03 21:58 |
|
Hej Preben!
Jeg er meget glad for din hjælp og kan se idéen i din løsning. Jeg prøver
desperat at få den til at fungere, og jeg har på fornemmelsen der bare skal
flyttes et par kommaer. Jeg får fire linier med fejl i compileren (de som er
markeret med ** først i linien. fejlen står i "beskrivelse").
Jeg håber du vil kommentere den også!
På forhånd tak!
mvh
Niels Henrik
==========
Sub Ton()
Dim sPos1 As String
Dim sPos2 As String
Dim sAdr As String
Dim wks As Worksheet
Dim rge As Range
Set wks = Worksheets("Sheet1") ' Så skal vi ikke
sAdr = "Bx1:Bx2,Dx1:Dx2,Hx1:Hx2"
sPos1 = "6"
sPos2 = CStr(wks.Range("K4").Value)
sAdr = Replace(sAdr, "x1", sPos1)
sAdr = Replace(sAdr, "x2", sPos2)
wks.Range(sAdr).Select ' Men hvorfor gør vi det
Range("H6").Activate
Charts.Add
ActiveChart.ChartType = xl3DColumn
ActiveChart.SetSourceData
(**"Compile-error: expected expression")Source:=wks.Range(sAdr),
(**"Compile-error: expected expression")PlotBy:=xlColumns
(**"Compile-error: expected named parameter")ActiveChart.Location
Where:=xlLocationAsNewSheet,
(**"Compile-error: expected expression")Name:="TON"
With ActiveChart.Axes(xlCategory)
.HasMajorGridlines = False
.HasMinorGridlines = False
End With
With ActiveChart.Axes(xlSeries)
.HasMajorGridlines = False
.HasMinorGridlines = False
End With
With ActiveChart.Axes(xlValue)
.HasMajorGridlines = True
.HasMinorGridlines = False
End With
ActiveChart.WallsAndGridlines2D = False
End Sub
| |
Niels Henrik Egebjer~ (06-02-2003)
| Kommentar Fra : Niels Henrik Egebjer~ |
Dato : 06-02-03 06:38 |
|
Hej igen!
Ja, så kører det. Du har ret i at den første markering var overflødig, og at
den netop stammede fra en indspilning.
Jeg takker mange gange for din hjælp.
mvh
Niels Henrik Egebjerg
| |
|
|