Office: Makro korrektur

Helfe beim Thema Makro korrektur in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo Liebe Excelfans, in den Vergangenen Tagen wurde mir wirklich Ueberragend geholfen und ich konnte ein tolles Projekt dank der Forumshilfe (ganz... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von N123456789, 13. Juni 2012.

  1. N123456789 Erfahrener User

    Makro korrektur


    Hallo Liebe Excelfans,

    in den Vergangenen Tagen wurde mir wirklich Ueberragend geholfen und ich konnte ein tolles Projekt dank der Forumshilfe (ganz besonderen Dank an Achim) fertigstellen.
    Nun habe ich noch ein klitze, kleines Problem zu loesen um ein komplettes Tool zu haben.

    Ist es moeglich zu meinem bisherigen Projekt eine Trackverfolgung zu machen

    Code:
     Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)Dim S As StringDim t As StringIf Target.Column = 3 Then t = MsgBox("ActiveCell.Value", vbOKCancel, Summary)If (t = vbOK) Then  S = InputBox("Gibt es ein Status Update?", "Status Update")    If (S = "") Then 'es wurde nicht "abbruch" oder [x] angeklickt'Hier soll stehen: (Datum Heute: s)                    ActiveWorkbook.ActiveSheet.ActiveCell.Value = "t &_(todays date:) & No Change!"        Else              ActiveWorkbook.ActiveSheet.ActiveCell.Value = "t &_(todays date:) & S"                               End If            End IfEnd Sub</PRE>
    
    
    
    geht sowas? Verstehe noch nicht den activecell.value so zu manipulieren dass er die existierenden Eingaben beibehaelt u. einen weiteren dazufuegt. Ansonsten bin ich gerade sehr in Programmierlaune. Deshalb bin ich schon uebergluecklich den code soweit aufgebaut zu haben dass tatsaechlich nach dem doppelklick das Inputfenster erscheint :)

    Liebe Gruesse und ich freue mich auf die Vorschlaege und das Ausprobieren :)
    Nico
     
    N123456789, 13. Juni 2012
    #1
  2. fette Elfe Erfahrener User
    Hallo Nico,

    wenn ich das jetzt richtig verstanden habe, möchtest Du bei Doppelklick den Zellwert in einer MsgBox anzeigen, bei "OK" eine InputBox öffnen, und bei einem Eintrag in diese der Zelle folgenden neuen Wert geben:
    alter Zellwert & aktuelles Datum & Eintrag in InputBox

    Wenn kein Eintrag in die InputBox erfolgt, soll es so aussehen:
    alter Zellwert & aktuelles Datum & "No Change!"


    Dein Code geht prinzipiell schon in die richtige Richtung, aber einige Einzelheiten musste ich ändern:
    Code:
    Option Explicit
    
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim S As String
    Dim t As String
    
        If Target.Column = 3 Then t = MsgBox(Target.Value, vbOKCancel, "Summary")
        If (t = vbOK) Then S = InputBox("Gibt es ein Status Update?", "Status Update")
        If (S = "") Then 'es wurde nicht "abbruch" oder [x] angeklickt  'Hier soll stehen: (Datum Heute: s)
            Target.Value = Target.Value & " " & Date & " " & " No Change!"
        Else
            Target.Value = Target.Value & " " & Date & " " & S
        End If
        
    End Sub
    1. War ein "End If" zuviel
    2. brauchst Du die ellenlange Referenz "ActiveWorkbook.ActiveSheet.ActiveCell.Value" nicht, Du befindest Dich doch in einem Ereignismodul eines Blattes, also kannst Du "Me" oder in dem Fall ja sogar "Target" benutzen.
    3. hast Du die Variable "t" erst zur Auswertung des MsgBox-Klicks benutzt, und dann wolltest Du damit scheinbar den Zellwert aus der MsgBox lesen und an den neuen String übergeben. Das wird so nix, denn "t" ist in dem Fall = 1 (vbOK ist der Wert, und nicht der Zellwert), und zum anderen hast Du doch den Zellwert noch = "Target.Value".
    4. sonstige Kleinigkeiten

    übrigens: fängst Du generell mit der Programmiererei gerade erst an, oder kommst Du von einer anderen Programmiersprache? Weil ansonsten frage ich mich wo Du einen Teil der Syntax bzw. einen Teil Deines Stiles her hast.


    Erstmal sollte der Code jetzt tun was Du möchtest.
    Ich hoffe geholfen zu haben.
     
    fette Elfe, 14. Juni 2012
    #2
  3. N123456789 Erfahrener User
    Hallo Achim,

    erst einmal wieder vielen Dank. Ja der Code macht alles was er machen soll. Hier ist meine Finale adaption. Ein Problem gibt es noch. Ich habe es noch nicht geschafft den Button "cancel" der inputbox zum abbruch zu definieren.
    Bei der msgbox ist es mir mit vbCancel gelungen. Leider spricht die Inputbox aber nicht darauf an. Irgendwelche Ideen?

    Code:
    
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim S As String
    Dim t As String
    
        If Target.Column = 4 Then t = MsgBox(Target.Value, vbOKCancel, "Summary")
        If (t = vbOK) Then S = InputBox("Gibt es ein Status Update?", "Status Update")
        If (t = vbCancel) Then Exit Sub
        
    
        If (S = "" And Target.Value = "") Then 'es wurde nicht "abbruch" oder [x] angeklickt  'Hier soll stehen: (Datum Heute: s)
            Target.Value = Target.Value & " " & Date & ": " & " No Change!"
            ElseIf (S = "" And Target.Value <> "") Then
            Target.Value = Target.Value & vbLf & " " & Date & ": " & " No Change!"
                
                Else
                Target.Value = Target.Value & vbLf & " " & Date & ": " & S
          
         End If
      
        
    End Sub
    
    
    Das ist einer meiner ersten eigenstaendigen adaptionen. Wie ich mich freue auch wenn es eleganter geht. Ein unbeschreibliches gefuehl soetwas selber zu schaffen mit ein wenig korrektur. Danke fuer deine Hilfe zur Selbsthilfe :). Ich glaube langsam traegt es fruchte

    Grundsaetzlich bin ich Wirtschaftsingenieur und habe mit der Programmierung nichts am Hut. Da aber Excel viel tolles kann wenn man sich denn auskennt habe ich mich entschlossen VBA zumindest als Basic skill zu entwickeln. Die letzten Monate habe ich damit verbracht in Foren Codezeilen zu lesen. Ich hab von 0 angefangen und hab mich ohne tutorial einfach mal reingestuerzt. Angefangen hat dann alles mit dem Macro recorder. Jedoch kommt man auch hier ganz schnell an limits. Dann habe ich angefangen bestehende funktionierende Makros zusammen zu setzen. ging auch einigermassen. Jetzt bin ich in der Phase mir vorhandene Bausteine herzunehmen u. mit meinem bisherigen wissen zu adaptieren. Ob ich den finalen Schritt, selbst zu schreiben, jemals hinbekomme ist noch offen. Jedoch freue ich mich schon dass von mein code nicht mehr voellig neu gemacht wird. Sondern man kann von dem was ich biete weitermachen. Vor 6 Monaten undenkbar :). Ich mache babysteps dafuer konstant. :)

    Achim, once again herzlichen Dank fuer deine Muehe.
     
    Zuletzt bearbeitet: 14. Juni 2012
    N123456789, 14. Juni 2012
    #3
  4. fette Elfe Erfahrener User

    Makro korrektur

    Hallo Nico,

    wenn Du folgende Zeilen auf diese Art schreibst:
    Code:
    If Target.Column = 4 Then t = MsgBox(Target.Value, vbOKCancel, "Summary")
    [B][COLOR=#ff0000]If (t = vbOK) Then[/COLOR][/B]
    wird immer "t" immer geprüft, auch wenn das aktuelle Target nicht in Spalte 4 liegt.
    Das ist nicht nur unnötig, sondern kann auch zu Fehlern führen, in diesem Fall Laufzeitfehler 13.
    Ist ja auch klar, weil "t" nur einen Wert erhält, wenn das Target in Spalte 4 liegt und deshalb die MsgBox aufgerufen wird.
    Sowas kann man vermeiden indem man den Code Verschachtelt (siehe mein Code ganz unten), oder mit:
    Code:
    If Target.Column = 4 Then
        t = MsgBox(Target.Value, vbOKCancel, "Summary")
    else
        Exit Sub
    end if
    Wobei das "Exit Sub hier nur Sinn macht, wenn noch eine Menge Code folgt, die dann nicht durchlaufen werden muss.


    Zu Deinem "Button-Problem":
    Die Variable "t" wird mit dem Rückgabewert der MsgBox gefüllt. Dieser Rückgabewert ergibt sich aus dem Wert des gedrückten Knopfes: 1 = vbOK und 2 = vbCancel.
    Macht Sinn, denn mit einer MsgBox kann man Bestätigungen bzw. Entscheidungen abfragen, dafür muss man auslesen können welchen Knopf der User drückt.
    Die Variable "S" wird aber mit dem Rückgabewert der Inputbox gefüllt, und der ist kein Knopf sondern der eingegebene Wert, also ein String.
    Macht auch Sinn, denn mit einer InputBox möchte man dem User eine Eingabe ermöglichen. Welchen Knopf er drückt ist wurscht, wichtig ist nur ob die Eingabe = "" oder <> "" ist.
    Den Knopf einer Inputbox kann man nicht abfragen (soweit ich weiß).
    Etwas anders ist die "Application.InputBox", aber die benötigst Du hier wohl nicht.
    Wenns Dich interessiert, im Netz gibts da so einiges zu lesen.


    Generell kann ich Dir nur raten, vermeide das Code durchlaufen wird, wenn es unnötig ist.
    Strukturiere bzw. verschachtele Deine Code entsprechend.
    Und gewöhne Dir am besten auch das Einrücken an, dann wird der Code besser lesbar. Vor allem kann man dann viel besser sehen, wo das "End If" zu einem "If" steht, bis wohin ein "With" geht usw.


    Zu der Geschichte mit dem Zellwert und der Inputbox:
    Bei Deiner Herangehensweise hast Du 4 verschiedene Möglichkeiten, die Dein Code aber garnicht alle abdeckt.
    Target = "" und S = ""
    Target = "" und S <> ""
    Target <> "" und S = ""
    Target <> "" und S <> ""
    Jede dieser Möglichkeiten kann nun einzeln per Code abgefragt werden, aber dies ist umständlich und fehleranfällig (wenn man eine vergisst z.Bsp.).
    In Deinem Fall bietet es sich in meinen Augen an die Bedingungen aufzuteilen, denn ein Zeilenumbruch als Abgrenzung zum alten Zellwert wird ja nur benötigt, wenn vorher auch schon etwas in der Zelle stand, ansonsten hätte man eine unnötige Leerzeile als Zellwertanfang:
    Code:
    Option Explicit
    
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim S As String
    Dim t As String
    
        If Target.Column = 4 Then
            t = MsgBox(Target.Value, vbOKCancel, "Summary")
            If (t = vbOK) Then
                S = InputBox("Gibt es ein Status Update?", "Status Update")
                If Not Target.Value = "" Then Target.Value = Target.Value & vbLf
                If S = "" Then
                    Target.Value = Target.Value & Date & " : " & "No Change!"
                Else
                    Target.Value = Target.Value & Date & " : " & S
                End If
            End If
        End If
        
    End Sub


    Ich hoffe geholfen zu haben.
     
    fette Elfe, 14. Juni 2012
    #4
  5. N123456789 Erfahrener User
    Hallo Achim,

    Danke fuer deine Hinweise. Schade dass man die Inputbox nicht mit einem "cancel" belegen kann. Ich habe mir die "promt" im Internet angeschaut und ich finde leider auch keinen Verweis darauf. ABER
    Koennen wir den code evtl. so umschreiben dass wir die Situation umgehen u. trotzdem einen Programmstopp herbeifuehren koennen? z.b. bei einem doppelklick auf as inputfeld oder nem doppelklick auf das Fenster. Klingt wahrscheinlich sehr naiv aber geht sowas? ein drittes weiteres Fenster wuerde ich nur sehr ungern verwenden. Oder macht es hier mehr Sinn ein eigenes GUI zu erstellen um dann die Buttons "OK" u. "Cancel" zu belegen?

    Liebe Gruesse Nico
     
    N123456789, 15. Juni 2012
    #5
  6. fette Elfe Erfahrener User
    Hallo Nico,

    Deine Euphorie und Deinen Spass in Ehren (kann ich sogar nachvollziehen).
    Vergiss darüber nur bitte nicht sorgfältig zu lesen und ein wenig selber zu recherchieren ...
    Okay, habe ich mich wohl getäuscht, Du benötigst sie denn doch:
    Code:
    Option Explicit
    
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim S As [COLOR=#ff0000]Variant[/COLOR]
    Dim t As String
    
        If Target.Column = 4 Then
            t = MsgBox(Target.Value, vbOKCancel, "Summary")
            If (t = vbOK) Then
                S = [COLOR=#ff0000]Application.[/COLOR]InputBox("Gibt es ein Status Update?", "Status Update")
               [COLOR=#ff0000] If S = False Then
                    Exit Sub
                Else[/COLOR]
                    If Not Target.Value = "" Then Target.Value = Target.Value & vbLf
                    If S = "" Then
                        Target.Value = Target.Value & Date & " : " & "No Change!"
                    Else
                        Target.Value = Target.Value & Date & " : " & S
                    End If
                [COLOR=#ff0000]End If[/COLOR]
            End If
        End If
        
    End Sub
    Natürlich könnte man auch eine UserForm (meinst Du vermutlich mit "GUI", oder?) benutzen, aber wozu?
    In dem Fall müsste man alles erstmal erstellen, was Billy mit der InputBox bzw. der Application.UnputBox bereits zu Verfügung stellt.
     
    fette Elfe, 15. Juni 2012
    #6
  7. N123456789 Erfahrener User
    Hi Achim,

    Danke fuer deine Hilfe. Genau nach dem hatte ich gesucht. Das mit der application inputbox hatte ich tatsaechlich ueberlesen. Aber jetzt weiss ich es. Danke vielmals fuer all deine Muehen. Ich weiss es wirklich zu schaetzen. Danke
    Liebe Gruesse

    Nico
     
    N123456789, 18. Juni 2012
    #7
Thema:

Makro korrektur

Die Seite wird geladen...
  1. Makro korrektur - Similar Threads - Makro korrektur

  2. Name der Datei durch Excel geändert

    in Microsoft Excel Hilfe
    Name der Datei durch Excel geändert: Hallo und guten Abend, Die Datei wird mittels Button (VBA) zwischen gesichert. Das Makro sichert zuvor die Datei und erstellt zus. eine Sicherungsdatei mit der Erweiterung Beispiel-"Sich"....
  3. Ein Makro für mehrere Register

    in Microsoft Excel Hilfe
    Ein Makro für mehrere Register: Moin, ich habe ein Makro wo Daten aus dem Register Master kopiert werden und Register, das mit einem Datum beschriftet ist. Ich möchte in Jedem Register ein Button haben was Daten aus dem Master...
  4. Makro öffnet unerwartete Datei

    in Microsoft Excel Hilfe
    Makro öffnet unerwartete Datei: Hallo Forum, ich brächte euer Schwarmwissen. Arbeite mit Excel eine Auftragsbearbeitung. Dort habe ich mir einen Button mit Makro erstellt und nutze diesen schon lange. Das Makro generiert ein...
  5. Leerzeilen entfernen

    in Microsoft Word Hilfe
    Leerzeilen entfernen: Hallo in die Runde, ich habe das Problem bzw. den Wunsch in einem DOC die Leerzeilen zu entfernen und das per Makro. Allerdings gelingt es nicht Hintergrund das DOC wird aus einer Dot-Datei...
  6. Makro Schaltflaechen vervielfaeltigen sich....

    in Microsoft Excel Hilfe
    Makro Schaltflaechen vervielfaeltigen sich....: Hallo Zusammen, ich habe eine Exceldatei, die seit ein paar Wochen sehr langsam zu öffnen und zu bearbeiten ist. Zuvor war sie ca. 8MB gross, was sich verdoppelt hat. Ich habe alle Zellen die...
  7. Seit Win 11 Zugriffsprobleme bei Excel über Makros

    in Microsoft Excel Hilfe
    Seit Win 11 Zugriffsprobleme bei Excel über Makros: Guten Tag! Ich habe vor einer Woche mein Windows 10 auf Windows 11 geupgraded, und seitdem habe ich extreme Schwierigkeiten mit meinem Excel. Mit Windows 10 funktionierte alles so, wie es sollte,...
  8. VBA-Makro zur Zellenformatierung Syntax probleme

    in Microsoft Excel Hilfe
    VBA-Makro zur Zellenformatierung Syntax probleme: Hallo zusammen, ich möchte per Makro Zellen formatieren. Tausender-Trennzeichen 3 Nachkommastellen Positive Zahlen Schwarz Negative Zahlen Rot Nullwert mit - Hinter der Zahl soll noch eine...
  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