Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
892to896
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
892to896
892to896
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Laufzeitfehler 1004

Laufzeitfehler 1004
08.08.2007 13:27:15
Philipp
Hallo!
Bin gerade dabei, dass ich mir Diagramme erstellen lasse.
Über eine listbox und 2 checkboxen kann man kriterien auswählen und dann per cmdbutton das diagramm erstellen.
Nur sagt er mir einen fehler in dieser zeile:

Range("A10:H152").Select


hier ist der ganze code:


Private Sub CommandButton1_Click()
If ListBox1.Value = "Mai 07" And CheckBox1.Value = True Then
Sheets("Mai 07").Select
Selection.AutoFilter Field:=5, Criteria1:="Kraftstoff"
Range("A10:H152").Select
Selection.Copy
Sheets(".").Select
Range("A1").Select
ActiveSheet.Paste
Sheets("Mai 07").Select
Selection.AutoFilter Field:=5
Application.CutCopyMode = False
Sheets("Diagramme").Select
Charts.Add
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SetSourceData Source:=Sheets(".").Range("B1:B19,H1:H19"), PlotBy _
:=xlColumns
ActiveChart.SeriesCollection(1).XValues = "='.'!R1C1:R19C1"
ActiveChart.SeriesCollection(1).Name = "=""Kraftstoff"""
ActiveChart.SeriesCollection(2).XValues = "='.'!R1C1:R19C1"
ActiveChart.SeriesCollection(2).Name = "=""Preis"""
ActiveChart.Location Where:=xlLocationAsObject, Name:="Diagramme"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "Kraftstoff Mai 07"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Pos."
.Axes(xlValue, xlPrimary).HasTitle = False
End With
ActiveChart.HasLegend = True
ActiveChart.Legend.Select
Selection.Position = xlBottom
ActiveChart.ApplyDataLabels Type:=xlDataLabelsShowNone, LegendKey:=False
End If
If ListBox1.Value = "Mai 07" And CheckBox1.Value = True And CheckBox2.Value = True Then
Sheets("Mai 07").Select
Selection.AutoFilter Field:=5, Criteria1:="Kraftstoff"
Range("A10:H152").Select
Selection.Copy
Sheets(".").Select
Range("A1").Select
ActiveSheet.Paste
Sheets("Mai 07").Select
Selection.AutoFilter Field:=5
Application.CutCopyMode = False
Sheets("Diagramme").Select
Charts.Add
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SetSourceData Source:=Sheets(".").Range("B1:B19,H1:H19"), PlotBy _
:=xlColumns
ActiveChart.SeriesCollection(1).XValues = "='.'!R1C1:R19C1"
ActiveChart.SeriesCollection(1).Name = "=""Kraftstoff"""
ActiveChart.SeriesCollection(2).XValues = "='.'!R1C1:R19C1"
ActiveChart.SeriesCollection(2).Name = "=""Preis"""
ActiveChart.Location Where:=xlLocationAsObject, Name:="Diagramme"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "Kraftstoff Mai 07"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Pos."
.Axes(xlValue, xlPrimary).HasTitle = False
End With
ActiveChart.HasLegend = True
ActiveChart.Legend.Select
Selection.Position = xlBottom
ActiveChart.ApplyDataLabels Type:=xlDataLabelsShowNone, LegendKey:=False
Sheets("Mai 07").Select
Selection.AutoFilter Field:=5, Criteria1:="DP1 - Dauerlauf"
Range("A15:H143").Select
Selection.Copy
Sheets(".").Select
Range("I1").Select
ActiveSheet.Paste
Sheets("Diagramme").Select
Range("E22").Select
Application.CutCopyMode = False
Charts.Add
ActiveChart.ChartType = xlLineMarkers
ActiveChart.SetSourceData Source:=Sheets(".").Range("J1:J9,P1:P9"), PlotBy _
:=xlColumns
ActiveChart.SeriesCollection(1).XValues = "='.'!R1C9:R9C9"
ActiveChart.SeriesCollection(1).Name = "=""Stunden"""
ActiveChart.SeriesCollection(2).XValues = "='.'!R1C9:R9C9"
ActiveChart.SeriesCollection(2).Name = "=""Kosten"""
ActiveChart.Location Where:=xlLocationAsObject, Name:="Diagramme"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "DP1 Mai 07"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Pos."
.Axes(xlValue, xlPrimary).HasTitle = False
End With
ActiveChart.HasLegend = True
ActiveChart.Legend.Select
Selection.Position = xlRight
ActiveChart.ApplyDataLabels Type:=xlDataLabelsShowValue, LegendKey:=False
ActiveChart.HasDataTable = False
End If
End Sub


Vielleicht kann mir ja auch wer Tips geben wie ich diese Anfrage besser machen könnte.
Jetzt muss man in der Listbox das Monat auswählen und über die Checkboxen welches Diagramm man will, und so wie ich jetzt angefangen habe, werden dass eine Menge If-Abfragen.
vielen dank im voraus
phil

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler 1004
08.08.2007 13:34:43
Hajo_Zi
Hallo Phi,
in VBA kann zu 99,9% auf select verzichtet werden.
Kleiner Hinweis. Ich hätte es laut Deinem Beitrag so gelesen das es um ein Diagramm geht. Das sollte schon im Betreff stehen. Es gibt im Forum auch Diagrammexperten. Die füllen sich von dem Betreff bestimmt nicht angesprochen.

Diagrammproblem
08.08.2007 13:37:41
Philipp
danke für die rasche antwort!
sprich, ich muss nur das select entfernen?
hab seit der ersten klasse kein vba mehr praktiziert, sprich vor 4 jahren das letzte mal *gg*
mfg
phil

AW: Laufzeitfehler 1004
08.08.2007 13:35:00
Ramses
Hallo
lagere das erstellen der Diagramme in eigentständige Makros in einem Modul aus, die du dann entsprechend aufrufen kannst
Private Sub Commandbutton1_Click()
if CheckBox1.Value = True And CheckBox2.Value = True then
Start_Makro_Mit_Zwei_Diagrammen
elseif CheckBox1.Value = True And CheckBox2.Value = False then
Start_Makro_Mit_dem_ersten_Diagramm
Elseif CheckBox1.Value = False And CheckBox2.Value = True then
Start_Makro_Mit_dem_zweiten_Diagramm
End if
Dann sparst du dir schon mal einen Haufen If-Abfragen, weil du bloss noch den Monat abfragen musst
Aus Gründen der Übersichtlichkeit würde ich dir folgende Schreibweise empfehlen
Sub demo()
    Charts.Add
    With ActiveChart
        .ChartType = xlLineMarkers
        .SetSourceData Source:=Sheets(".").Range("J1:J9,P1:P9"), PlotBy:=xlColumns
        With .SeriesCollection(1)
            .XValues = "='.'!R1C9:R9C9"
            .Name = "=""Stunden"""
        End With
        With .SeriesCollection(2)
            .XValues = "='.'!R1C9:R9C9"
            .Name = "=""Kosten"""
        End With
        .Location Where:=xlLocationAsObject, Name:="Diagramme"
        .HasTitle = True
        .ChartTitle.Characters.Text = "DP1 Mai 07"
        .Axes(xlCategory, xlPrimary).HasTitle = True
        .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Pos."
        .Axes(xlValue, xlPrimary).HasTitle = False
        .HasLegend = True
    End With
End Sub

Dann entstehen auch weniger Schreibfehler :-)
Gruss Rainer

Anzeige
AW: Laufzeitfehler 1004
08.08.2007 13:43:00
Philipp
Danke sehr, werde ich gleich ausprobieren.
Wäre es praktisch wenn ich dann einfach über eine Case-Abfrage kontrolliere welcher Monat ausgewählt wurde und dann dort die If-Abfrage für das gewünschte Diagramm setze?
phil

AW: Laufzeitfehler 1004
08.08.2007 13:55:00
Ramses
Hallo
Die Case-Abfrage kannst du machen, aber die Diagramm-Abfrage nicht. weil dies für jeden Monat wieder 3 mal gemacht werden muss.
Daher direkt auf ein Makro verweisen, wo du nur noch den Monat abfragen musst.
So hast du zwar 3 verschiedenen Makros, aber nur jeweils noch den Monat auszuwählen.
Das ist viel übersichtlicher
Gruss Rainer

Anzeige
AW: Laufzeitfehler 1004
08.08.2007 14:01:23
Philipp
ah, verstehe was du meinst.
müsste dann so ausschauen:

Private Sub CommandButton1_Click()
Dim monate As String
monate = ListBox1.Value
Select Case monate
Case Is = "Mai 07"
run abfrage
End If
end case


wobei diagramm wieder das vorgeschlagene Script von dir ist:


If CheckBox1.Value = True And CheckBox2.Value = True Then
MsgBox "2 Diagramme"
ElseIf CheckBox1.Value = True And CheckBox2.Value = False Then
MsgBox "1. Diagramm"
ElseIf CheckBox1.Value = False And CheckBox2.Value = True Then
MsgBox "2. Diagramm"
End If


und statt der MsgBox (die hab ich nur zum testen) kommt dann run diagramm

Anzeige
AW: Laufzeitfehler 1004
08.08.2007 14:36:04
Ramses
Hallo
Nein, du verstehst nicht.
Ich habe dir doch ein Beispiel Code für die Abfrage aus dem Commandbutton gemacht
Bei deiner Variante musst du im Makro für jeden Monat nochmals die Abfrage nach den Diagrammtypen machen. Das bläht den Code auf und zusätzlich werden Redundanzen (Doppelte Codesequenzen in den unzähligen If-Then Abfragen) verursacht
Gruss Rainer

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige