Office: autoform mit einer funktion verbinden

Helfe beim Thema autoform mit einer funktion verbinden in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; super klasse!!!!!!!!!! das hilft mir sehr weiter :))))))) .... VIELEN DANK Michael... gruß sascha Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von snopydo, 14. Februar 2009.

  1. snopydo Erfahrener User

    autoform mit einer funktion verbinden


    super klasse!!!!!!!!!!

    das hilft mir sehr weiter :))))))) ....

    VIELEN DANK Michael...


    gruß sascha
     
  2. miriki Erfahrener User
    Prima, das freut mich.

    Gruß, Michael
     
  3. snopydo Erfahrener User
    hallo michael,...hab da doch noch eine kleine (hoffentlich) frage :)

    was muss beachtet werden, wenn die werte zur änderung der farbe auf dem arbeitsblatt nicht direkt eingegeben werden, sondern wenn ich mir den wert mittels einer wenn funktion hole (wennfunktion in D2...und bei werteingabe =D2)...?

    gruß, sascha
     
  4. miriki Erfahrener User

    autoform mit einer funktion verbinden

    Damit meinst Du den Wert, von dem abhängig die Farbe bestimmt wird? Also das, was in "v" nachher im VBA-Source landet?

    Da braucht man eigentlich gor nix beachten. VBA ist es egal, ob der Wert eine "Konstante" (manuell eingegeben) oder eine "Variable" (Ergebnis einer Funktion) ist. Mit ".Value" wird das aus der Zelle ausgelesen, was zur Zeit gerade als Wert drinsteht.

    Beinhaltet die Zelle eine Formel, kannst Du darauf alternativ mit der Eigenschaft ".Formula" (oder auch ".FormulaLocal") zugreifen.

    Allerdings solltest Du bei der Formel, die eigentlich einen numerischen Wert ausgibt, darauf achten, daß im "sonst"-Zweig kein String erzeugt wird, also z.B. "" für eine "leere" Zelle. VBA würde sonst meckern, wenn in eine numerische Variable versucht wird, einen String einzulesen.

    Aber für solche Fälle ist es allgemein stilvoller, eine saubere Fehler-Abfang-Routine im VBA zu haben. Denn auch manuell eingegebene Werte können ja ein Format haben, das Du nicht erwartest. Unschön, wenn dann eine "Debug"-Fehlermeldung auf dem Bildschirm erscheint.

    Für das Abfangen von Fehlern kann man prima "ON ERROR GOTO xxx" zusammen mit "RESUME xxx" oder ggf. auch ein "ON ERROR RESUME NEXT" mit "ON ERROR GOTO 0" benutzen. Wenn man dann im Fehler-Zweig eine kleine Messagebox mit Hinweis ausgibt, sieht das gleich alles viel professioneller aus.

    Gruß, Michael
     
  5. snopydo Erfahrener User
    hallo michael,

    hab nochmal alles durchprobiert zwecks "Formular" "FormularLocal" aber irgendwie will das nicht so recht klappen,...

    kannst du da vielleicht mal drüberschauen, über das kleine progi von mir?
    (habs mal mit angehangen)
    lieben gruß sascha
     
  6. miriki Erfahrener User
    Hihi... Jo, stimmt, aber das soll man auch erstmal wissen... ;-)

    Wenn der Wert einer Zelle sich durch eine Formel ändert, wird das "Change"-Ereignis nicht ausgelöst. Das kommt nur, wenn manuell irgendwo was verändert wird.

    Wenn man das Neuberechnen von Formeln abfangen will, muß man sich alternativ in das "Calc"-Ereignis einhängen.

    Und bei einer Checkbox, die aus der Steuerelement-Toolbox stammt, hat man den noch etwas eleganteren Weg, sich in das "Click"-Ereignis der Checkbox einzuhängen. Dann wird nicht bei jeder Änderung (oder Neuberechnung) im Blatt die Routine aufgerufen, sondern wirklich nur dann, wenn es notwendig ist, eben weil der Wert der Checkbox sich durch einen Klick ändert.

    Wähle im VBA-Editor oben links mal "Checkbox1" (statt "Worksheet") und oben rechts dann ggf. "Click" (ist eh Standard, glaube ich) aus. Verschieb dann mal Deinen Code (alles zwischen "private sub" und "end sub") aus dem Worksheet-Change in das Checkbox-Click und es sollte wieder laufen.

    Gruß, Michael
     
  7. miriki Erfahrener User
    Hmpf, jetzt ist mir der eine Satz wieder verlustig gegangen:

    Da Deine Checkbox aber nicht aus der Steuerlement-Toolbox stammt, gibt es dafür auch kein Checkbox-Click und demnach mußt Du stattdessen Worksheet-Calc als Ereignis nehmen.

    Gruß, Michael
     
  8. snopydo Erfahrener User

    autoform mit einer funktion verbinden

    meinst du das so?

    oder fehlt da noch was?...klappt noch nich so richitg :)

    gruß

    Private Sub Worksheet_Calc(ByVal Target As Range)

    Dim s As Worksheet
    Dim v, w As Double
    Dim c, d As Long

    Set s = ActiveSheet

    v = s.Cells(5, 4).Value


    Select Case v
    Case Is = "0"
    c = RGB(255, 0, 0)
    Case Is = "1"
    c = RGB(255, 255, 0)
    End Select

    s.Shapes("IDS12").Line.ForeColor.RGB = c

    End Sub
     
  9. snopydo Erfahrener User
    HABS DOCH HINBEKOMMEN,

    VIELEN DANK!!!!!!! :)))))))))))))))))))))
     
  10. snopydo Erfahrener User
    hallo michael, da bin ich noch mal :)...

    kann man eingentlich, z.B. wenn mehrere Shapes unabhängig voneinander bearbeitet werden sollen den code:

    Code:
    Private Sub Worksheet_Calculate()
        
        Dim s As Worksheet
        Dim a, b, c,  As Double
        Dim a1, b1, c1, As Long
    
        Set s = ActiveSheet
    
        a = s.Cells(2, 3).Value
        b = s.Cells(3, 3).Value
        c = s.Cells(4, 3).Value
        
        Select Case a
            Case Is = "0"
                a1 = RGB(255, 0, 0)
            Case Is = "1"
                a1 = RGB(0, 135, 0)
        End Select
            Select Case b
            Case Is = "0"
                b1 = RGB(255, 0, 0)
            Case Is = "1"
                b1 = RGB(0, 135, 0)
        End Select
            Select Case c
            Case Is = "0"
                c1 = RGB(255, 0, 0)
            Case Is = "1"
                c1 = RGB(0, 135, 0)
        End Select
    
        s.Shapes("IDS1").Line.ForeColor.RGB = a1
        s.Shapes("IDS2").Line.ForeColor.RGB = b1
        s.Shapes("IDS3").Line.ForeColor.RGB = c1
    
    End Sub
    
    irgendwie nach der Art vereinfachen: :)

    Code:
    Private Sub Worksheet_Calculate()
        
        Dim s As Worksheet
        Dim a, b, c,  As Double
        Dim a1, b1, c1, As Long
    
        Set s = ActiveSheet
    
        a = s.Cells(2, 3).Value
        b = s.Cells(3, 3).Value
        c = s.Cells(4, 3).Value
        
        Select Case a, b, c
            Case Is = "0"
                a1, b1, c1 = RGB(255, 0, 0)
            Case Is = "1"
                a1, b1, c1 = RGB(0, 135, 0)
        End Select
    
    
        s.Shapes("AA").Line.ForeColor.RGB = a1
        s.Shapes("BB").Line.ForeColor.RGB = b1
        s.Shapes("CC").Line.ForeColor.RGB = c1
    
    End Sub
    
    lieben gruß, sascha
     
  11. miriki Erfahrener User
    Hmmm... Nicht ganz. Aber eine "For-Next" Schleife wäre hier vielleicht die Wahl der Stunde.

    Du könntest also sowas in der Art haben:
    Code:
    dim s as worksheet 
    dim z as long
    dim y as long
    dim x as long
    dim v as double
    dim c as long
    
    set s = activesheet 
    
    For z = 1 to 3
      y = z + 1 : x = 3
      v = s.cells(y, x).Value
      select case v
        case 1
          c = rgb(255, 0, 0)
        case 2
          c = rgb(0, 135, 0)
      end select
      s.shapes(n).line.forecolor.rgb = c
    next z
    Hier wird jetzt in Abhängigkeit von z die Zelle bestimmt, aus der der Wert gelesen wird. Der Rest läuft wie gehabt.

    Und sollten die Werte nicht direkt unter- oder nebeneinander stehen, sondern wild quer über das Blatt verstreut sein, außerdem die Shapes nicht sauber "IDSx" heißen, dann gäbe es noch die Alternative zu oben:
    Code:
    dim n as srtring
    [...]
    For z = 1 to 3
      select case z
        case 1
          y = 2 : x = 3
          n = "IDS1"
        case 2
          y = 7 : x = 5
          n = "DSI2"
        case 3
          y = 11 : x = 13
          n = "SID3"
      end select
      [...]
      s.shapes(n).line.forecolor.rgb = c
      [...]
    Hier würde der Wert für den ersten Shape in C2, der 2. in E7 und der 3. in M11 stehen.

    Weitere Möglichkeiten wären über zwei Arrays mit den y- und x-Koordinaten, aus welchen Zellen die Werte stammen oder sogar noch etwas hübscher vielleicht eine TYPE-Deklaration mit x- und y-Werten und einem Array mit diesem Typ.

    Gruß, Michael
     
  12. snopydo Erfahrener User
    guten morgen michael,...

    dankeschön...das sieht es klasse aus,...da werd ich mich mal durchkämpfen :)...


    lieben gruß und schon mal ein schönes wochende,

    sascha
     
  13. snopydo Erfahrener User

    autoform mit einer funktion verbinden

    hallo michael,...

    hab mich jetzt mal durchgewurschtelt :))...der erste quellcode kommt auf jeden fall in frage,...da alle werte untereinander stehen...

    das mit der schleife klappt soweit ganz gut :)),...aber immer noch son kleines problem,...dass wenn ich die shapes getrennt voneinander steuern möchte (das erste grün, das zweite rot, das dritte grün), das klappt nicht so richtig...

    weil soweit ich jetzt beurteilen kann hängt das mit

    s.shapes(n).line.forecolor.rgb = c zusammen? welches shape bearbeitet wird...und wenn da überall "=c" steht, werden die ja alle auf einmal mit dem selben wert belegt?

    könnte mann den Bereich:

    Select Case v
    Case Is = "1"
    c = RGB(255, 0, 0)
    Case Is = "2"
    c = RGB(255, 135, 0)

    vereinfachen, in den man mehrere variablen deklariert?

    Select Case v
    Case Is = "1"
    c, c1, c2 = RGB(255, 0, 0)
    Case Is = "2"
    c, c1, c2 = RGB(255, 135, 0)

    s.Shapes("n").Line.ForeColor.RGB = c
    s.Shapes("n1").Line.ForeColor.RGB = c1
    s.Shapes("n2").Line.ForeColor.RGB = c2

    lieben gruß, sascha
     
  14. miriki Erfahrener User
    Je nachdem, was man unter "vereinfachen" versteht... ;-)

    Ja, klar, das würde gehen. Das geht auch im Prinzip so lange gut, wie die Anzahl der Shapes und der damit verbundenen Variablen überschaubar bleibt. bei 2 bis 3 würde ich da aber langsam die Grenze ziehen. Wird mehr nötig, würde ich mir überlegen, ob am grundsätzlichen Design nicht was schief ist.

    Die Frage, die sich dann stellt: Gibt es wirklich die Notwendigkeit, daß der Wert "1" für den einen Shape die eine Farbe, für einen anderen Shape aber eine ganz andere Farbe bewirkt? Warum ist die gleiche Zahl nicht auch immer die gleiche Farbe?

    Eine andere Möglichkeit, die Sache zumindest etwas leichter erweiterbar zu halten und nach wie vor nur eine Variable "c" zu benutzen: Ineinander verschachtelte CASE-Strukturen:

    Code:
    select case v
      case 1 'wert "1"
        select case z
          case 1 '--> shape 1 wert "1"
            c = rgb(255,0,0)
          case 2 '--> shape 2 wert "1"
            ...
        end select
      case 2 'wert "2"
        case 1
          ...
    end select
    Sicherlich auch nicht unbedingt schön, nicht wirklich übersichtlich und auch nicht ganz so leicht zu erweitern, aber andererseits wenigstens etwas "strukturierter".

    Oder ein ganz anderer Ansatz: Eine "Übersetzungstabelle", in der in einem Array für jeden Wert die zugehörige Farbe passend zu dem Shape steht. Aber das ist dann wirklich schon nicht mehr unbedingt so ganz übersichtlich.

    Gruß, Michael
     
  15. snopydo Erfahrener User
    servus michael...

    --> da hast du sicherlich recht :)

    ...werd das dann so lassen wie du es mir am anfang gezeigt hast...ist zwar etwas aufwendiger zu erstellen wenns viele sind,...aber für mich glaub besser zu verstehen :)...

    HAB NOCHMAL VIELEN DANK FÜR DEINE HILFE!!! hast mir sehr weitergeholfen... echt klasse

    lieben gruß sascha
     
Thema:

autoform mit einer funktion verbinden

Die Seite wird geladen...
  1. autoform mit einer funktion verbinden - Similar Threads - autoform funktion verbinden

  2. AutoForm formatieren

    in Microsoft Outlook Tutorials
    AutoForm formatieren: AutoForm formatieren Word 2013 Outlook 2013 Word 2010 Outlook 2010 Word 2007 Outlook 2007 Mehr... Weniger...
  3. AutoForm formatieren

    in Microsoft Word Tutorials
    AutoForm formatieren: AutoForm formatieren Word 2013 Outlook 2013 Word 2010 Outlook 2010 Word 2007 Outlook 2007 Mehr... Weniger...
  4. VBA Autoform einfärben

    in Microsoft Excel Hilfe
    VBA Autoform einfärben: Hallo zusammen, ich brauche dringend eure Hilfe. Habe schon überall nach einer Lösung gesucht, aber komme nicht zum richtigen Ergebnis. Ich habe zwei verschiedene Arbeitsblätter in meiner...
  5. Autoform Recheck in Excel mit bestimmten Farben einfärben

    in Microsoft Excel Hilfe
    Autoform Recheck in Excel mit bestimmten Farben einfärben: Hallo zusammen, ich habe ich Excel eine Autoform "Rechteck 1". Dieses möchte ich automatisch einfärben, wenn in der Zelle A5 ein bestimmter Wert steht. In diesem Fall steht da "F7" drin. Das...
  6. autoform mit einer Funtion verbinden II

    in Microsoft Excel Hilfe
    autoform mit einer Funtion verbinden II: Hallo snopydo, hallo miriki, hallo alle anderen! Ich bin neu hier. Dieser Beitrag hier ist genau das was ich suche. Leider reicht mein wissen nicht, um ihn in Programmierung umzusetzen. Auch ween...
  7. Ziehpunkte von manchen Autoformen verschwunden

    in Microsoft Word Hilfe
    Ziehpunkte von manchen Autoformen verschwunden: Hallo! Bei manchen meiner Autoformen (vor allem bei den Flussdiagramm-Formen) sind die gelben Ziehpunkte verschwunden. Ich brauche diese Formen für meine Diplomarbeit und kann sie jetzt nur...
  8. autoform automatisch einen textinhalt zuweisen

    in Microsoft Excel Hilfe
    autoform automatisch einen textinhalt zuweisen: einen schönen guten tag an alle,... ist es irgendwie möglich einer autoform (z.b. einem rechteck) automatisch einen "textinhalt" zu geben, vielleicht über eine formel oder so? also das in...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden