Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

String in Variablen-/Konstantenbezeichner umwandln

Forumthread: String in Variablen-/Konstantenbezeichner umwandln

String in Variablen-/Konstantenbezeichner umwandln
24.01.2005 14:43:28
Tom
Hallo nochmal,
wie kann ich einen String in einen Konstantenbezeichner umwandeln?
Bsp.:

Dim ct = "xlColumnStacked"
objChart.chartType = ct

hier schimpft er natürlich weil ct keine zahl ist.
bei php ging das glaube ich mit "eval()"...
das ziel meines makros ist trölfzig diagramme zu erzeugen, wobei die jeweiligen diagramme in configdateien definiert sind. und darin speichere ich mir halt z.b. auch den charttypen. ihn als zahl zu speichern würde zu unleserlichen configdateien führen, die strings mit ner select-anweisung abzufangen wäre wieder zu undynamisch, dann könnte ich mir gleich eigene konstanten definieren, und ich weiß ja jetz auch nich, was für diagrammtypen später alles noch hinzukommen sollen.
da muss es doch irgendwas geben??
besten dank im vorraus
Tom
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: String in Variablen-/Konstantenbezeichner umwa
24.01.2005 16:30:23
Tom
war ja nich anders zu erwarten...
also meine erkenntnisse der letzten 4 stunden: "evaluate" funktioniert nich für konstanten und bis auf einen anderen hier, der auch keine antwort bekam, gibts auch niemanden der so eine funktionalität bislang benötigt hat. also fazit: ich werde, wie nun zum trölften mal bei diesem *** vba, den trölffachen aufwand in kauf nehmen um eine funktionalität zu bewirken, die in anderen progsprachen selbstverständlich oder intuitiv erkennbar ist...
ps: korrektur zum obigen code - es heißt natürlich >dim ct: ct= "xlbla.."<
Anzeige
AW: String in Variablen-/Konstantenbezeichner umwa
24.01.2005 17:51:47
Josef Ehrensberger
Hallo Tom!
Klar geht das!

Dim ct As XlChartType
ct = xlColumnStacked
objChart.ChartType = ct


Gruß Sepp
P.S.: Rückmeldung nicht vergessen!
AW: String in Variablen-/Konstantenbezeichner umwa
24.01.2005 18:46:42
Tom
Hallo Sepp,
Danke für deine Antwort, aber ich möchte ja einen String in eine Konstante umwandeln, und

objChart.ChartType = "xlColumnStacked"

nimmt er nicht, weil aus "xlColumnStacked" erst xlColumnStacked werden muß.
Deine Anregung hab ich folgendermaßen eingebunden, leider ohne Erfolg:

Set oChart = Charts.Add
With oChart
  .Move after:=Sheets(Sheets.Count)
  .SetSourceData Source:=oAssObj.preChartRange
  Dim xlCh As XlChartType
  xlCh = oAssObj.chartType ' vom Typ String und liefert z.B. "xlColumnStacked" zurück
  .chartType = xlCh

  '.plotBy = oAssObj.plotBy
  .name = oAssObj.name_short
End With

Gruß Tom
Anzeige
AW: String in Variablen-/Konstantenbezeichner umwa
24.01.2005 19:04:38
Josef Ehrensberger
Hallo Tom!
Ich verstehe nicht wo das Problem liegt!

Sub test()
Dim ct As XlChartType
Dim chrt1 As Chart
Dim chrt2 As Chart
Set chrt1 = Sheets(1).ChartObjects("Diagramm 1").Chart
Set chrt2 = Sheets(1).ChartObjects("Diagramm 2").Chart
ct = chrt1.ChartType
chrt2.ChartType = ct
End Sub


Gruß Sepp
P.S.: Rückmeldung nicht vergessen!
Anzeige
AW: String in Variablen-/Konstantenbezeichner umwa
24.01.2005 19:39:45
Tom
hallo Sepp,
ich glaub mein Beispielcode war zugegebenermaßen etwasverwirrend: oAssObj ist kein chart, sondern ein reines Datenobjekt,
Der Sachverhalt ist: ich lege ein neues Chart an und lege anschließend fest, von welchem Typ es ist. Das weiß aber nicht der VBA-Quellcode sondern die Datei "charts.xml", in der die Diagrammmerkmale definiert (<charttype>xlColumnStacked</charttype>) sind. oAssObj kapselt die KonfigDaten und hat eine GetMethode, die den ChartTypen im StringFormat wiedergibt.
Problem: wie kriege ich aus dem Charttypen "xlColumnStacked" im Stringformat die Excel-Konstante xlColumnStacked im XlChartType-Format, die den Wert 52 hat???
Gruß Tom
Anzeige
AW: String in Variablen-/Konstantenbezeichner umwa
24.01.2005 19:58:35
andre
Hallo Tom,
da musst Du Dir wohl oder übel eine Konvertierungsmatrix aufbauen.
Grüße, Andre
AW: String in Variablen-/Konstantenbezeichner umwa
24.01.2005 20:41:42
Tom
Na die hab ich quasi auch erstmal pro forma zusammengeschustert, muß ja trotzdem weiter vorankommen... Aber die Hoffnung stirbt zuletzt ...
: /
Gruß,
Tom
AW: String in Variablen-/Konstantenbezeichner umwa
24.01.2005 23:40:03
Josef Ehrensberger
Hallo Tom!
Hab' da auch was gezimmert!
Vielleicht hilt's dir.


      
Private Function getChartType(strType As StringAs XlChartType
 strType = Replace(strType, 
"xl""")
 
   
Select Case strType
      
Case "ColumnClustered"
      getChartType = &H33
      
Case "3DColumnClustered"
      getChartType = &H36
      
Case "ColumnStacked"
      getChartType = &H34
      
Case "3DColumnStacked"
      getChartType = &H37
      
Case "ColumnStacked100"
      getChartType = &H35
      
Case "3DColumnStacked100"
      getChartType = &H38
      
Case "3DColumn"
      getChartType = &HFFFFEFFC
      
Case "BarClustered"
      getChartType = &H39
      
Case "3DBarClustered"
      getChartType = &H3C
      
Case "BarStacked"
      getChartType = &H3A
      
Case "3DBarStacked"
      getChartType = &H3D
      
Case "BarStacked100"
      getChartType = &H3B
      
Case "3DBarStacked100"
      getChartType = &H3E
      
Case "Line"
      getChartType = &H4
      
Case "LineMarkers"
      getChartType = &H41
      
Case "LineStacked"
      getChartType = &H3F
      
Case "LineMarkersStacked"
      getChartType = &H42
      
Case "LineStacked100"
      getChartType = &H40
      
Case "LineMarkersStacked100"
      getChartType = &H43
      
Case "3DLine"
      getChartType = &HFFFFEFFB
      
Case "Pie"
      getChartType = &H5
      
Case "PieExploded"
      getChartType = &H45
      
Case "3DPie"
      getChartType = &HFFFFEFFA
      
Case "3DPieExploded"
      getChartType = &H46
      
Case "PieOfPie"
      getChartType = &H44
      
Case "BarOfPie"
      getChartType = &H47
      
Case "XYScatter"
      getChartType = &HFFFFEFB7
      
Case "XYScatterSmooth"
      getChartType = &H48
      
Case "XYScatterSmoothNoMarkers"
      getChartType = &H49
      
Case "XYScatterLines"
      getChartType = &H4A
      
Case "XYScatterLinesNoMarkers"
      getChartType = &H4B
      
Case "Bubble"
      getChartType = &HF
      
Case "Bubble3DEffect"
      getChartType = &H57
      
Case "Area"
      getChartType = &H1
      
Case "3DArea"
      getChartType = &HFFFFEFFE
      
Case "AreaStacked"
      getChartType = &H4C
      
Case "3DAreaStacked"
      getChartType = &H4E
      
Case "AreaStacked100"
      getChartType = &H4D
      
Case "3DAreaStacked100"
      getChartType = &H4F
      
Case "Doughnut"
      getChartType = &HFFFFEFE8
      
Case "DoughnutExploded"
      getChartType = &H50
      
Case "Radar"
      getChartType = &HFFFFEFC9
      
Case "RadarMarkers"
      getChartType = &H51
      
Case "RadarFilled"
      getChartType = &H52
      
Case "Surface"
      getChartType = &H53
      
Case "SurfaceTopView"
      getChartType = &H55
      
Case "SurfaceWireframe"
      getChartType = &H54
      
Case "SurfaceTopViewWireframe"
      getChartType = &H56
      
Case "StockHLC"
      getChartType = &H58
      
Case "StockVHLC"
      getChartType = &H5A
      
Case "StockOHLC"
      getChartType = &H59
      
Case "StockVOHLC"
      getChartType = &H5B
      
Case "CylinderColClustered"
      getChartType = &H5C
      
Case "CylinderBarClustered"
      getChartType = &H5F
      
Case "CylinderColStacked"
      getChartType = &H5D
      
Case "CylinderBarStacked"
      getChartType = &H60
      
Case "CylinderColStacked100"
      getChartType = &H5E
      
Case "CylinderBarStacked100"
      getChartType = &H61
      
Case "CylinderCol"
      getChartType = &H62
      
Case "ConeColClustered"
      getChartType = &H63
      
Case "ConeBarClustered"
      getChartType = &H66
      
Case "ConeColStacked"
      getChartType = &H64
      
Case "ConeBarStacked"
      getChartType = &H67
      
Case "ConeColStacked100"
      getChartType = &H65
      
Case "ConeBarStacked100"
      getChartType = &H68
      
Case "ConeCol"
      getChartType = &H69
      
Case "PyramidColClustered"
      getChartType = &H6A
      
Case "PyramidBarClustered"
      getChartType = &H6D
      
Case "PyramidColStacked"
      getChartType = &H6B
      
Case "PyramidBarStacked"
      getChartType = &H6E
      
Case "PyramidColStacked100"
      getChartType = &H6C
      
Case "PyramidBarStacked100"
      getChartType = &H6F
      
Case "PyramidCol"
      getChartType = &H70
      
Case Else
      getChartType = 0
   
End Select
   
End Function
   
Sub test()
Dim ct As XlChartType
ct = getChartType(
"xlColumnStacked")
End Sub 

     Code eingefügt mit Syntaxhighlighter 3.0


Gruß Sepp
P.S.: Rückmeldung nicht vergessen!
Anzeige
AW: String in Variablen-/Konstantenbezeichner umwa
25.01.2005 11:11:29
Tom
Hallo Sepp!
He Danke : ), find' ich ja Wahnsinn, daß du dir so nen Aufwand gemacht hast, genau so nen Selectblock hab' ich mir gestern noch mühevoll zusammengeschustert. Ich dachte halt es geht auch geschickter, da ich immer mal wieder darauf stoße, eine Konstante unter dem Bezeichner zu speichern, sei es bei xlPlotBy, xlLineStyle oder eben xlChartType - wird am Ende auch wieder ne gigantische Funktion...
Nervt halt, da ich mir schon bei den BEx-Variabeln eine Matrix basteln mußte, um Dimensionsbezeichner in SAP-interne IDs umzuwandeln...
Also nochmal vielen Dank für deine Unterstützung : )
Gruß,
Tom
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

String in Variablen-/Konstantenbezeichner umwandeln


Schritt-für-Schritt-Anleitung

  1. Definiere eine Funktion: Erstelle eine VBA-Funktion, die einen String-Wert akzeptiert und den entsprechenden Excel-Konstantenbezeichner zurückgibt. Hier ist ein Beispiel:

    Private Function getChartType(strType As String) As XlChartType
        strType = Replace(strType, "xl", "")
    
        Select Case strType
            Case "ColumnStacked"
                getChartType = xlColumnStacked
            Case "Line"
                getChartType = xlLine
            ' Füge hier weitere Fälle hinzu
            Case Else
                getChartType = 0 ' Unbekannter Typ
        End Select
    End Function
  2. Verwende die Funktion: In deinem Makro kannst du nun diese Funktion aufrufen, um den Charttyp festzulegen:

    Sub test()
        Dim ct As XlChartType
        ct = getChartType("xlColumnStacked")
        objChart.ChartType = ct
    End Sub

Häufige Fehler und Lösungen

  • Fehler: Typkonflikt
    Wenn du einen String-Wert direkt einem XlChartType zuweisen möchtest, tritt ein Typkonflikt auf. Stelle sicher, dass du die oben beschriebene Funktion verwendest, um den String in die entsprechende Konstante umzuwandeln.

  • Fehler: Unbekannter Typ
    Wenn du einen unbekannten Typ übergibst, gibt die Funktion 0 zurück. Achte darauf, die möglichen Typen in der Select Case-Anweisung zu erweitern, um Fehler zu vermeiden.


Alternative Methoden

  • Verwendung von Dictionaries: Eine weitere Möglichkeit, Strings in Konstanten umzuwandeln, ist die Verwendung eines Dictionary-Objekts. Dies kann die Zuordnung übersichtlicher gestalten:

    Dim chartTypeDict As Object
    Set chartTypeDict = CreateObject("Scripting.Dictionary")
    
    chartTypeDict.Add "xlColumnStacked", xlColumnStacked
    chartTypeDict.Add "xlLine", xlLine
    ' Füge hier weitere Typen hinzu
    
    Dim ct As XlChartType
    ct = chartTypeDict("xlColumnStacked")

Praktische Beispiele

Hier sind einige praktische Beispiele, wie du die Funktion verwenden kannst:

  1. Diagrammtyp aus einer Konfigurationsdatei laden:

    Dim chartTypeString As String
    chartTypeString = "xlColumnStacked" ' Beispielwert
    objChart.ChartType = getChartType(chartTypeString)
  2. Mehrere Diagramme dynamisch erstellen:

    Dim types As Variant
    types = Array("xlColumnStacked", "xlLine", "xlPie")
    
    Dim i As Integer
    For i = LBound(types) To UBound(types)
        Dim newChart As Chart
        Set newChart = Charts.Add
        newChart.ChartType = getChartType(types(i))
    Next i

Tipps für Profis

  • Verwende Enumerationen: Statt Hardcodierung der Charttypen empfiehlt es sich, Enumerationen zu verwenden, um den Code lesbarer zu machen.

  • Optimierung der Funktion: Wenn du regelmäßig neue Diagrammtypen hinzufügst, überlege, wie du die Zuordnung effizienter gestalten kannst, z.B. durch eine externe Datei oder Datenbank.

  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung in deiner Funktion, um unerwartete Eingaben abzufangen und eine bessere Benutzererfahrung zu gewährleisten.


FAQ: Häufige Fragen

1. Kann ich die Funktion auch für andere Konstanten verwenden?
Ja, du kannst die gleiche Logik für andere Konstanten in VBA verwenden, indem du die entsprechenden Fälle in der Select Case-Anweisung hinzufügst.

2. Wie kann ich die Funktion erweitern?
Du kannst einfach weitere Case-Anweisungen hinzufügen, um neue Diagrammtypen zu unterstützen. Achte darauf, dass die Typen korrekt sind und dass du sie in deinem VBA-Projekt definiert hast.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige