/ Forside / Teknologi / Udvikling / VB/Basic / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
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



Søg
Reklame
Statistik
Spørgsmål : 177557
Tips : 31968
Nyheder : 719565
Indlæg : 6408879
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste