WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 07.07.2004, 09:52   #21
Chrisi99
Inventar
 
Benutzerbild von Chrisi99
 
Registriert seit: 22.12.2002
Alter: 39
Beiträge: 2.644

Mein Computer

Chrisi99 eine Nachricht über ICQ schicken
Standard

danke wbendl für die umfangreiche hilfe bisher!!

eine Frage hab ich jetzt noch

mit der SQL-Anweisung wird ein Bestimmter Zellenbereich (Ax:Zy) mit Monatsumsätzen gefüllt. Über den Chartwizard
Code:
Charts.Add
    ActiveChart.ChartType = xlLine
    ActiveChart.SetSourceData Source:=Sheets("Tabelle1").Range("A1:B17"), PlotBy:=xlColumns
    ActiveChart.Location Where:=xlLocationAsObject, Name:="Tabelle1"
    With ActiveChart
        .HasTitle = True
        .ChartTitle.Characters.Text = "Monatsübersicht"
        .Axes(xlCategory, xlPrimary).HasTitle = False
        .Axes(xlValue, xlPrimary).HasTitle = False
    End With
wird dann aus diesem Bereich ein Diagramm erstellt.
Die Anzahl der Verkäufer kann sich aber ändern (wenn nach Kostestelle abgefragt wird). deshalb würde ich gerne den Tabellenbereich dynamisch (automatisch) vergrößern können.
füe die Letzte Zeile gibt es ja die Funktion
Code:
Range("A65536").End(xlUp).Offset(1, 0).Select
lr = ActiveWindow.RangeSelection.Address
und die letzte Spalte wird bei der Ausgabe durch eine Zählschleife auf der numerischen Variable "ss" festgelegt.

wie kann ich das jetzt in meine
Range("A1:B17")
einbauen?

es müsste dann ca so aussehen: Range("A1:ss[umgewandelt in Buchstaben]lr[umgewandelt in zahl]")
leider bekomm ich das nicht hin, und es scheint auch keine vorgefertigte Lösung zu geben (zumindest hab ich in google nichts entdeckt....

mfg
____________________________________
Der Unterschied zwischen Theorie und Praxis ist, das es in der Theorie keinen Unterschied zwischen Theorie und Praxis gibt, in der Praxis aber schon.

Wer schreibt, der bleibt!
Chrisi99 ist offline   Mit Zitat antworten
Alt 07.07.2004, 11:04   #22
wbendl
Master
 
Registriert seit: 22.03.2000
Alter: 66
Beiträge: 550


Standard

Eine Zelle oder einen Bereich kann man auch nur mit Zahlen definieren. Damit kann man numerische Variable direkt einsetzen.

Beispiel:
Range(Cells(Zeile1, Spalte1), Cells(Zeile2, Spalte2))

mfg

WB
wbendl ist offline   Mit Zitat antworten
Alt 07.07.2004, 11:38   #23
Chrisi99
Inventar
 
Benutzerbild von Chrisi99
 
Registriert seit: 22.12.2002
Alter: 39
Beiträge: 2.644

Mein Computer

Chrisi99 eine Nachricht über ICQ schicken
Standard

Zitat:
Original geschrieben von wbendl
Eine Zelle oder einen Bereich kann man auch nur mit Zahlen definieren. Damit kann man numerische Variable direkt einsetzen.

Beispiel:
Range(Cells(Zeile1, Spalte1), Cells(Zeile2, Spalte2))

mfg

WB
so hab ich es auch schon versucht, leider kam da gleich eine neue lustige Fehlermeldung

ohne die "Cells(,)" geht es aber....

noch etwas ist mir eingefalle.
kann ich am ende einer Monatsabrechnung (aus der access-db) eine =SUMME(A1:A13) anhängen, und das für jedes monat extra (also in die Schleife einbauen die mir die Monatsbeträge ausspuckt)

mfg
____________________________________
Der Unterschied zwischen Theorie und Praxis ist, das es in der Theorie keinen Unterschied zwischen Theorie und Praxis gibt, in der Praxis aber schon.

Wer schreibt, der bleibt!
Chrisi99 ist offline   Mit Zitat antworten
Alt 07.07.2004, 12:00   #24
wbendl
Master
 
Registriert seit: 22.03.2000
Alter: 66
Beiträge: 550


Standard

Zu Cells:
Eventuell muß die Tabelle angegeben oder ausgewählt werden.
Ich hab diese Methode jedenfalls früher verwendet.

Zur Summe:
Wie die Formel in eine Zelle kommt, kannst du dir mit dem Makro-Recorder ansehen.
Du könntest die Summe aber auch über SQL aus der DB holen.

Es wäre übrigens möglich, die ganze Tabelle über eine SQL-Anweisung zu erstellen. Schau dir mal in Access eine Kreuztabellen-Abfrage an.

Ich hab einmal ein Tool für die Berechnung einer Gesamtwertung aus mehreren Radrennen gebastelt. Die Version mit der DB war ca. um den Faktor 100 schneller als die Version mit Excel und VBA.

mfg

WB
wbendl ist offline   Mit Zitat antworten
Alt 07.07.2004, 13:27   #25
renew
Inventar
 
Registriert seit: 22.10.2000
Alter: 41
Beiträge: 5.552


Standard

Zitat:
Original geschrieben von wbendl
Eine Zelle oder einen Bereich kann man auch nur mit Zahlen definieren. Damit kann man numerische Variable direkt einsetzen.

Beispiel:
Range(Cells(Zeile1, Spalte1), Cells(Zeile2, Spalte2))

mfg

WB
Dass geht!?

Cool, und ich hab mir, das letzte mal wie ich sowas gebraucht hab, extra eine Funktion gebastelt die von "A" weg mit ASCII Werte rechnen konnte und dann wieder auf die Buchstaben umgewandelt hat....
renew ist offline   Mit Zitat antworten
Alt 07.07.2004, 14:21   #26
Chrisi99
Inventar
 
Benutzerbild von Chrisi99
 
Registriert seit: 22.12.2002
Alter: 39
Beiträge: 2.644

Mein Computer

Chrisi99 eine Nachricht über ICQ schicken
Standard

Zitat:
Original geschrieben von wbendl
Zu Cells:
Eventuell muß die Tabelle angegeben oder ausgewählt werden.
Ich hab diese Methode jedenfalls früher verwendet.


WB
es kommt der Fehler:

"Die Methode 'Cells' für das Objekt '_Global' ist fehlgeschlagen"

wie meinst du das aktivieren/Auswählen der Tabelle?

Sheets("Tabelle1").Activate
?

mfg
____________________________________
Der Unterschied zwischen Theorie und Praxis ist, das es in der Theorie keinen Unterschied zwischen Theorie und Praxis gibt, in der Praxis aber schon.

Wer schreibt, der bleibt!
Chrisi99 ist offline   Mit Zitat antworten
Alt 07.07.2004, 20:45   #27
wbendl
Master
 
Registriert seit: 22.03.2000
Alter: 66
Beiträge: 550


Standard

Poste mal den ganzen Code. Dann probier ich das selber.

Übrigens welche Version von Excel verwendest du?

mfg

WB
wbendl ist offline   Mit Zitat antworten
Alt 07.07.2004, 20:58   #28
Chrisi99
Inventar
 
Benutzerbild von Chrisi99
 
Registriert seit: 22.12.2002
Alter: 39
Beiträge: 2.644

Mein Computer

Chrisi99 eine Nachricht über ICQ schicken
Standard

achtung lange Codewurst

Office 2002

Code:
Option Base 1
Global db As Database, rc As Recordset, rc1 As Recordset, rec As Recordset, rc2 As Recordset
Global aktuellesnodes As Variant
Global ss As Integer

Sub sql_umsatz()
Dim var As String
Dim w1 As Worksheet
Set w1 = Worksheets("monatsumsatz")
w1.Range("E3:K30").ClearContents
a = ActiveCell.Row
NR = ActiveSheet.Cells(a, 29).Value
Set db = DBEngine.Workspaces(0).OpenDatabase("J:\PROJEKT\PIS\test\test.mdb")
sql1 = "SELECT Mitarbeiter.PNR, Umsatz.NAME, Umsatz.VNAME,_"
Umsatz.[Umsatz/Jänner], Umsatz.[Umsatz/Februar], Umsatz.[Umsatz/März],_
Umsatz.[Umsatz/April], Umsatz.[Umsatz/Mai], Umsatz.[Umsatz/Juni],_
Umsatz.[Umsatz/Juli], Umsatz.[Umsatz/August], Umsatz.[Umsatz/September],_
Umsatz.[Umsatz/Oktober], Umsatz.[Umsatz/Novmeber], Umsatz.[Umsatz/Dezember]_
FROM Mitarbeiter INNER JOIN Umsatz ON Mitarbeiter.PNR=Umsatz.PNR"

Set rc1 = db.OpenRecordset(sql1)

On Error Resume Next
rc1.MoveFirst
ss = 2
i = rc1.RecordCount
w1.Select
While Not rc1.EOF
For anz = 1 To i
w1.Cells(3, ss).Value = rc1!PNR
w1.Cells(4, ss).Value = rc1!Name
w1.Cells(5, ss).Value = rc1!VNAME
w1.Cells(6, ss).Value = rc1!KST
w1.Cells(7, ss).Value = rc1![Umsatz/Jänner]
w1.Cells(8, ss).Value = rc1![Umsatz/Februar]
w1.Cells(9, ss).Value = rc1![Umsatz/März]
w1.Cells(10, ss).Value = rc1![Umsatz/April]
w1.Cells(11, ss).Value = rc1![Umsatz/Mai]
w1.Cells(12, ss).Value = rc1![Umsatz/Juni]
w1.Cells(13, ss).Value = rc1![Umsatz/Juli]
w1.Cells(14, ss).Value = rc1![Umsatz/August]
w1.Cells(15, ss).Value = rc1![Umsatz/September]
w1.Cells(16, ss).Value = rc1![Umsatz/Oktober]
w1.Cells(17, ss).Value = rc1![Umsatz/Novmeber]
w1.Cells(18, ss).Value = rc1![Umsatz/Dezember]
ss = ss + 1 'Zählvariable für die Schleife
rc1.MoveNext
Next anz
Wend
Call Chart
End Sub
Sub Chart()
'gibt die Tabelle aus
Dim lr As String
Dim lc As String


 Range("A65536").End(xlUp).Offset(1, 0).Select
 
 lr = ActiveWindow.RangeSelection.Address
 lc = ss
 
    'Range("A5:D18").Select
    Charts.Add
    ActiveChart.ChartType = xlLine
    ActiveChart.SetSourceData Source:=Sheets("monatsumsatz").Range("A7:B17"), PlotBy:=xlColumns 'Diese Zeile sollte automatisch
    'an das ende angepasst werden, wenn man zb nur die Daten von Januar bis März ausgeben lässt
    ActiveChart.Location Where:=xlLocationAsObject, Name:="monatsumsatz"
    With ActiveChart
        .HasTitle = True
        .ChartTitle.Characters.Text = "Monatsübersicht"
        .Axes(xlCategory, xlPrimary).HasTitle = False
        .Axes(xlValue, xlPrimary).HasTitle = False
    End With
End Sub
ps: kann man diese "Verweise" einmal über zB eine Globale Definition einbinden?? das nervt schon sehr das immer wieder anzuwählen!


mfg und Danke für die Hilfe (1000 mal)
____________________________________
Der Unterschied zwischen Theorie und Praxis ist, das es in der Theorie keinen Unterschied zwischen Theorie und Praxis gibt, in der Praxis aber schon.

Wer schreibt, der bleibt!
Chrisi99 ist offline   Mit Zitat antworten
Alt 07.07.2004, 22:05   #29
wbendl
Master
 
Registriert seit: 22.03.2000
Alter: 66
Beiträge: 550


Standard

Hab ich mich doch richtig erinnert. Die Tabelle muß vorher ausgewählt werden. (Würde ich als Bug bezeichnen)

Name des Diagramm-Blattes zur späteren Verwendung speichern:
dia = ActiveChart.Name

Tabellen-Blatt auswählen:
Sheets("Tabelle1").Select

Dann sollte es so funktionieren:
Diagramm-Blatt mit Namen ansprechen.
Sheets(dia).SetSourceData Source:=Range(Cells(7, 1), Cells(17, 2)), PlotBy:=xlColumns

Blätter mit Namen ansprechen ist immer gut. Wer weiß mitten im Code schon, was jetzt ActiveSheet ist?

Mit Probieren ist leider nichts. Also alle Angaben ungeprüft.

Was meinst du bezüglich der Verweise?

Noch ein paar Tips, für die Zukunft:
Globale Deklarationen sollte man so sparsam wie möglich verwenden. Bei dir sind wahrscheinlich keine notwendig. Um Variable mehreren Prozeduren zur Verfügung zu stellen, verwendet man Parameter.

Das Schlüsselwort Global sollte man auch nicht verwenden. Es genügt Dim im Deklarations-Abschnitt.

Außerdem möchte ich dir nochmal ADO ans Herz legen. Da würde ich dann eventuell die Connection Modulweit deklarieren.

mfg

WB
wbendl ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:20 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag