Markus: VBA *grrr

Hallo, habe sonst nur php programmiert und kam eig. ganz gut klar aber dieses vba macht mir zu schaffen.... ich mag das net...
Folgendes quelltext:

With chtChart
            .Name = "Tool Sales2"
            .ChartType = xlXYScatterLines
            'Link to the source data range.
            .SetSourceData Source:=Sheets("Daten").Range("B12:B20"), _
                PlotBy:=xlColumns
            .HasTitle = True
            .ChartTitle.Text = "=Sheet1!R1C2"
            .Axes(xlCategory, xlPrimary).HasTitle = True
            .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Month"
            .Axes(xlValue, xlPrimary).HasTitle = True
            .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Sales"
End With
so nun möchte ich gerne anstatt B20, eine variable einsetzen wie macht man das in vba, in PHP kein problem "B12:B".$var aber wie in vba?
Weiter gehts wie erreiche ich das, das diagramm immer an eine best position auf ein bestimmtes tabellenblatt geschrieben wird und wenn schon vorhanden auch überschrieben???

MFG Markus

  1. Ok verknüpft wird mit & aber die restlichen fragestellungen bleiben.*GG*
    MFG Markus

  2. Hi Markus,

    so nun möchte ich gerne anstatt B20, eine variable einsetzen wie macht man das in vba, in PHP kein problem "B12:B".$var aber wie in vba?

    na auch so:

    .SetSourceData Source:=Sheets("Daten").Range("B12:B" & intZeile), PlotBy:=xlColumns

    Weiter gehts wie erreiche ich das, das diagramm immer an eine best position auf ein bestimmtes tabellenblatt geschrieben wird und wenn schon vorhanden auch überschrieben???

    Bei solchen Geschichten macht es sich gut, wenn man das Ganze einfach als Makro aufzeichnet - da sieht man oft die geeigneten Methoden (abgesehen von Select und Activate).

    Zum Verschieben kannst Du z. B. IncrementLeft und IncrementTop verwenden.

    Viele Grüße

    Jörg

    1. Hallo Jörg,

      mmh mit den makros ist das so  ne sache, bin ja schon fast fertig, ich muss nur noch erreichen das, das diagramm auf dem von mir gewünschten tabellenblatt erzeugt wird und halt überschrieben wenn es schon da ist: hast du viel. ne idee hier mal der quelltext
      Private Sub make_chart_Click()
          Dim chart_name As String
          Dim anzahl As Long
          Dim intSpalte As Integer
          Dim lngZ As Long
          Dim lngZeile As Long
             If (CheckBox1.Value = True) Then
              chart_name = "Nitrat"
          ElseIf (CheckBox2.Value = True) Then
              chart_name = "Nitrit"
          ElseIf (CheckBox3.Value = True) Then
              chart_name = "Gesamthärte"
          ElseIf (CheckBox4.Value = True) Then
              chart_name = "Carbonhärte"
          ElseIf (CheckBox5.Value = True) Then
              chart_name = "pH_Wert"
          End If
          If (chart_name = "") Then
          Else
              Dim chtChart As Chart
              Set chtChart = Charts.Add

      With Worksheets("Daten")

      lngZ = .Cells(.Rows.Count, 1).End(xlUp).Row
                    If lngZ > lngZeile Then lngZeile = lngZ

      End With
                  MsgBox (lngZ)

      With chtChart
                  .Name = chart_name
                  .ChartType = xlXYScatterLines
                  .SetSourceData Source:=Sheets("Daten").Range("B12:B" & lngZeile), _
                      PlotBy:=xlColumns
                  .HasTitle = True
                  .ChartTitle.Text = "=Sheet1!R1C2"
                  .Axes(xlCategory, xlPrimary).HasTitle = True
                  .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Month"
                  .Axes(xlValue, xlPrimary).HasTitle = True
                  .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Sales"
                  End With
          End If
      End Sub

      MFG Markus

      1. Hi Markus,

        Dim chtChart As Chart
                Set chtChart = Charts.Add

        With Worksheets("Daten")

        lngZ = .Cells(.Rows.Count, 1).End(xlUp).Row
                      If lngZ > lngZeile Then lngZeile = lngZ

        End With
                    MsgBox (lngZ)

        With chtChart
                    .Name = chart_name
                    .ChartType = xlXYScatterLines
                    .SetSourceData Source:=Sheets("Daten").Range("B12:B" & lngZeile), _
                        PlotBy:=xlColumns
                    .HasTitle = True
                    .ChartTitle.Text = "=Sheet1!R1C2"
                    .Axes(xlCategory, xlPrimary).HasTitle = True
                    .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Month"
                    .Axes(xlValue, xlPrimary).HasTitle = True
                    .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Sales"
                    End With

        damit wird ja ein neues Diagrammblatt erzeugt. Das heißt, wenn Du ein gleichnamiges bestehendes Blatt überschreiben möchtest, musst Du das alte Blatt löschen. Das kannst Du z. B. so:

        For Each objDia In Sheets
            If objDia.Name = chart_name Then
                Application.DisplayAlerts = False
                objDia.Delete
                Application.DisplayAlerts = True
            End If
        Next

        Wenn Du von außen auf die Mappe zugreifst, musst Du nur noch die Objekte vervollständigen.

        Viele Grüße

        Jörg

        1. Dankeschön hast mir sehr geholfen.
          MFG Markus