Office: (Office 2013) VBA

Helfe beim Thema VBA in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Guten Tag, ich habe gerade erst angefangen, mich mit VBA zu beschäftigen und möchte mir etwas basteln. Ich hoffe, ihr könnt mir helfen, da ich hier... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von JFish86, 24. Januar 2015.

  1. VBA


    Guten Tag,

    ich habe gerade erst angefangen, mich mit VBA zu beschäftigen und möchte mir etwas basteln. Ich hoffe, ihr könnt mir helfen, da ich hier nicht weiterkomme...

    Ich habe mir eine Eingabemaske mit UserForm gebaut, mit der ich mir Daten geben lasse. Diese möchte ich nun an bestimmte Stellen in meiner Excel Datei eintragen. Der VBA Code für das Eintragen sollte folgende Dinge tun:


    1) Finde in Worksheet "Wachstum 2013" in Spalte D einen bestimmten Wert (als Wert gegeben durch eine Eingabe in der UserForm -> SuchWert) und "merke" dir die dazugehörige Zeile.

    2.a) Gehe in dieser Zeile nach rechts zur ersten Zelle, die keinen Wert enthält (in diesem Fall erst ab Spalte N anfangen zu suchen)

    ODER

    2.b) Gehe in dieser Zeile zur letzten Zelle, die einen Wert enthält (hier muss auch erst ab Spalte M zu suchen angefangen werden) und springe dann von da aus eine Zelle nach rechts.

    (2.a und 2.b sollte eigentlich zur gleichen Zelle führen -> ZelleGesucht)

    3. Schreibe in ZelleGesucht einen bestimmten Wert (als Zahl durch die Eingabemaske gegeben -> EingabeZahl).

    4. Schreibe in ZelleGesucht+1 (eine Zelle rechts) einen bestimmten Wert (als String durch die Eingabemaske gegeben -> EingabeString).

    5. ...

    Da muss ich dann noch einige Werte eintragen. Aber wenn ich einmal die Logik mit dem Code habe, kriege ich das vielleicht auch alleine hin.

    Ich weiß im Moment vor allem nicht, wie ich diese ZelleGesucht finden kann und wie ich dann eins weiter rechts anfange Werte einzufügen.

    Vielen Dank schonmal für eure Hilfe!

    Liebe Grüße,
    Jens

    :)
     
    JFish86, 24. Januar 2015
    #1
  2. Moin Jens,

    ganz gut beschreiben, aber zuerst noch eine Frage: Was soll geschehen, wenn der Suchbegriff nicht gefunden wird? Oder wenn es diesen mehrfach gibt?
     
  3. Beverly
    Beverly Erfahrener User
    Hi Jens,

    nach diesem Prinzip:

    Code:
    VBA grusz.gif
     
    Beverly, 26. Januar 2015
    #3
  4. VBA

    Hallo
    Zuerst suche ich das Listen Ende. Wen der Suchbegriff nicht gefunden wird geschieht nichts. Kommt der Suchbegriff mehrmals vor wird der erste genommen.
    Code:
    Den Rest solltest zu an deine Bedürfnisse anpassen können.

    Gruss
     
    Tinker Bell, 26. Januar 2015
    #4
  5. Vielen lieben Dank erstmal für eure Antworten! Ich habe versucht, euren Code tlw. zu implementieren. Einiges funktioniert schon super - bei anderem muss ich noch etwas verbessern.

    Bei manchen Dingen war ich zu ungenau; daher hier nochmal etwas klarer, was die Eingabemaske macht (bzw. machen soll):

    - Der User identifiziert über den SuchWert in der Eingabemaske die richtige "Eintragszeile". In der Eingabemaske kann der User den SuchWert in einer comboBox auswählen, die sich ihre Werte nur aus Spalte D zieht (in der dann der VBA Code wieder sucht). Es sollte also nicht vorkommen, dass der SuchWert in Spalte D nicht gefunden wird.

    - Zusätzlich gibt der User in der Eingabemaske noch weitere Informationen ein, die dann in der passenden Zeile (beginnend ab der richtigen Spalte) nach rechts raus geschrieben werden sollen.

    - Das zu beschreibende Arbeitsblatt ist vor-formatiert. Es sind also schon Formel und Format gemacht; die Daten müssen dann nur noch in die "passenden" Zellen eingetragen werden. Dafür ist die Eingabemaske + Code.


    Ich habe unten stehenden Code von Karin eingebaut (Danke, Karin!), da ich verstanden habe, was er machen will. (Danke auch dir, Tinker! Bei deinem Code habe ich nicht alles verstanden, aber ich glaube, er macht einige Dinge, die sich vielleicht mit meiner genaueren Beschreibung erübrigen? Bin mir da nicht sicher *Smilie )

    Was mit Karins Vorschlag funktioniert:
    - Er findet die richtige Zeile in Spalte D.
    - Er trägt in die später gefundene Zelle die Werte richtig ein.

    ... aber, was noch nicht funktioniert:
    - Er findet in passender Zeile nicht die richtige Spalte, weil: Arbeitsblatt ist vor-formatiert und enthält schon Formeln. Der jetztige Suchmechanismus erkennt Formeln als gefüllte (nicht-leere) Zellen und "findet" im Moment immer die erste Zelle nach der letzten Formel.

    Daher wäre es super, wenn der Suchmechanismus so angepasst werden könnte, dass:
    - Er sucht von Spalte O ausgehend (da beginnen die "Eintragsspalten) die erste (!) freie Zelle (die nächste Formel kommt einige Spalten später). Dann trage ich die Daten aus der Eingabemaske in die Zellen nach rechts ein (lasse die Formel aus) und beim nächsten Durchgang findet er wieder die erste(!) freie Zeile ausgehend von Spalte O (was die erste freie Zelle nach dem ersten Eintrag sein sollte).

    - Eine weitere Bemerkung: Manche Zellen sind als Prozent formatiert. Wenn ich in der Eingabemaske bspw. eine "22" eintrage, schreibt er in die Zelle "2200%". Daher im Code die Division durch 100 ("Me.txt2013.Value / 100").
    Könnte man das vielleicht eleganter lösen?


    Danke nochmal und entschuldigt die lange Beschreibung *Smilie



    Namen für die Werte im Code:
    - SuchWert in Spalte D: Me.cboSolutionID.Value
    - Erster Eintrag in die passende Zelle: me.txt2013.Value
    - Zweiter Eintrag in die passende Zelle +1: me.cboRelevanzThema.Value

    Code:
     
    JFish86, 26. Januar 2015
    #5
  6. Beverly
    Beverly Erfahrener User
    Hi,

    laufe in der gefundenen Zeile einer Schleife über alle Spalten von O bis zur letzten belegten und stelle mit .HasFormula fest, ob sie eine Formel enthält, falls nicht, dann ist es die gesuchte Zelle und Schleife verlassen.


    VBA grusz.gif
     
    Beverly, 27. Januar 2015
    #6
  7. Hallo Karin,

    dank Dir! Ich glaube, ich weiß genau, was Du meinst - aber ich weiß leider nicht, wie ich das mit VBA Code implementieren kann.

    Zudem müsste man den Suchmechanismus verfeinern. So wie Du es beschrieben hast, müsste doch folgendes passieren:

    1. Durchlauf
    Für eine bestimmte Zeile (angenommen: 55) sucht er ab Spalte O die erste Zelle, die keine Formel enthält (müsste sein: Spalte O) und schreibt in die nächsten 10 Zellen nach rechts Werte ein (O bis O+10). -> Das passt!

    2. Durchlauf
    Für die gleiche Zeile (wieder 55) sucht er ab Spalte O wieder die erste Zelle ohne Formel und landet wieder bei Spalte O. In dieser Zelle befindet sich zwar ein Wert, der im 1. Durchgang eingeschrieben wurde, aber eben keine Formel. Jetzt überschreibt er die nächsten zehn Zellen. -> Daher sollte der Suchmechanismus nun vielmehr bei O+11 landen.

    Die Schleife bräuchte also zwei Konditionen, scheint mir: Geh und suche (von Spalte O aus) die erste Zelle die
    a) keine Formel enthält -- UND -- b) keinen Wert enthält.

    Ich kenne leider VBA Code noch nicht so wirklich. Hast Du da eine Idee, wie man das coden könnte?

    Vielen lieben Dank,
    Jens
     
    JFish86, 27. Januar 2015
    #7
  8. Beverly
    Beverly Erfahrener User

    VBA

    Hi Jens,

    Code:
    VBA grusz.gif
     
    Beverly, 27. Januar 2015
    #8
  9. Hallo Karin,

    ich hab den Code folgendermaßen eingebaut:

    Code:
    Im Ergebnis beginnt er mit diesem Code auch immer in der ersten Zeile ohne Wert und Formel HINTER der letzten Formel in der Zeile.
    Ich verstehe leider nicht ganz, was der For-Loop macht in Verbindung mit dem vorher definierten intSpalte.

    Fällt dir da vielleicht ein Fehler auf?

    Liebe Grüße,
    Jens
     
    JFish86, 27. Januar 2015
    #9
  10. Beverly
    Beverly Erfahrener User
    Hi Jens,

    die Schleife soll von Spalte O bis zur letzten belegten Spalte laufen, prüfen ob die laufende Zelle keine Formel enthält und leer ist - ist die Bedingung erfüllt, soll in die Zelle etwas eingetragen und die Schleife verlassen werden. Beim nächsten Start des Makros dasselbe Spiel wiederholen.

    Dann lade doch mal deine Mappe mit ein paar Daten hoch, damit man das mal genau sehen kann, wie die tatsächlichen Bedingungen sind.


    VBA grusz.gif
     
    Beverly, 27. Januar 2015
    #10
  11. Ich hab das Arbeitsblatt etwas geändert und verkleinert, aber das Prinzip ist immer noch das gleiche. Hilft dir das etwas weiter?
     
    JFish86, 28. Januar 2015
    #11
  12. Beverly
    Beverly Erfahrener User
    Hi Jens,

    versuche es mal so:

    Code:
    VBA grusz.gif
     
    Beverly, 28. Januar 2015
    #12
  13. VBA

    Super! Damit findet er jetzt auf jeden Fall die richtige Zelle jeweils. Er macht allerdings nichts, wenn er eine Zelle mit einer Formel findet. Soll heißen: Wenn von O aus gesehen, die nächste Zelle leer ist, schreibt er was rein, dann in die nächste, usw., aber wenn in der nächsten Zelle eine Formel kommt, dann macht er gar nichts. Was aber nicht schlimm ist, weil ich rechts und links von der Formel mit einem Schwung immer Werte eintragen werde. So wie es jetzt ist, ist es also genau richtig für mich. Vielen Dank!!!

    Vielleicht könntest du mir noch bei einer Sache helfen: Wie kann ich denn von der Zelle aus, die mit .Range(strZelle) angesprochen wird, in der Zelle rechts davon etwas schreiben, zwei Zellen rechts, usw.
    Ich will also mit einem Schwung in mehrere Zellen rechts von "strZelle" Werte eintragen. Wie kann ich die denn da genau ansprechen?

    Vielen Dank nochmal,
    Jens
     
    JFish86, 28. Januar 2015
    #13
  14. Beverly
    Beverly Erfahrener User
    Hi Jens,

    Formelzellen sollten doch ausgenommen werden - also darf der Code an dieser Stelle nichts machen. Weshalb schreibst du dann "...dann macht er gar nichts. Was aber nicht schlimm ist..."? M.E. war das doch genau das was du erreichen wolltest - oder sehe ich das falsch?


    Um Zellen mit einem Versatz zu einer bekannten Zelladresse anzusprechen, benutzt man Offset(Zeilenversatz, Spaltenversatz) - also 2 Zellen rechts der gefundenen wäre dann dieses: .Range(strZelle).Offset(0, 2)


    VBA grusz.gif
     
    Beverly, 28. Januar 2015
    #14
  15. Zu erstmal: Danke. Ich hatte Offset schonmal gesehen, aber wusste nicht, wie ich das mit der Objektstruktur in VBA mache. So wie Du's gesagt hast, habe ich es perfekt für mich hinbekommen.

    Was die Zellen mit Formeln angeht: Im Idealfall sollte er, wenn er auf eine Zelle mit Formel trifft, eine Zelle nach rechts springen und die Adresse ausgeben. Das wird bei mir aber nie praktisch der Fall sein. Daher brauche ich diese Funktionalität nicht. So wie es jetzt ist, kann ich alles mit machen.

    Vielen, vielen Dank nochmal für all die geduldigen Antworten *Smilie
     
    JFish86, 29. Januar 2015
    #15
Thema:

VBA

Die Seite wird geladen...
  1. VBA - Similar Threads - VBA

  2. VBA in einer Zeile zu lang

    in Microsoft Excel Hilfe
    VBA in einer Zeile zu lang: Moin, mein VBA Code ist für eine Zeile zu lang. Kann mir einer helfen wie ich den auf 2 Zeilen aufteilen Kann? arrSchuhDaten = Array(Range("A6"), Range("F6"), Range("J6"), Range("A7"),...
  3. Listbox wird nicht breiter, Schriftgrösse ändert sich

    in Microsoft Excel Hilfe
    Listbox wird nicht breiter, Schriftgrösse ändert sich: Hallo, ich habe ein Formular dessen Breite ich mit der Maus ändern kann. Im Formular habe ich einen Rahmen und darin eine Listbox deren Breite an die Formularbreite angepasst wird....
  4. Kontrollkästchen aktivieren ohne VBA - wenn KK1 angekreuzt dann KK2 auch

    in Microsoft Excel Hilfe
    Kontrollkästchen aktivieren ohne VBA - wenn KK1 angekreuzt dann KK2 auch: Hallo zusammen, erstmal danke für all die Tipps und Kniffe, die ich ohne eigenen Thread gefunden und gelernt habe. Leider finde ich mein Thema nirgendwo... Aktuell habe ich zwei Spalten mit...
  5. Per Hyperlink ausgeblendetes Blatt einblenden

    in Microsoft Excel Hilfe
    Per Hyperlink ausgeblendetes Blatt einblenden: Hola ins Forum, ich bräuchte mal wieder eure Hilfe. Ich habe ein Tabellenblatt das mir als Register dient und wo Hyperlinks eingefügt sind um auf das dazugehörige Blatt zu springen. Diese Blätter...
  6. Bilder über VBA Größe und DPI ändern für Webshop

    in Microsoft Excel Hilfe
    Bilder über VBA Größe und DPI ändern für Webshop: Hallo Excel Spezialisten, Ich habe mir eine recht aufwendige Tabelle gebastelt, aus der ich Daten für meinen Webshop generiere und in einer .csv bereitstelle. Es werden neue Preislisten...
  7. VBA: Platzhalter ersetzen und evtl. leere Zeile einfügen

    in Microsoft Word Hilfe
    VBA: Platzhalter ersetzen und evtl. leere Zeile einfügen: Hallo zusammen, ich habe eine Word-Vorlage mit Platzhaltern, in die ich mit VBA Daten aus einer Excel-Datei einfüge (in eine Excel-Zeile schreibe ich alle Daten für ein neues Word-Dokument). So...
  8. Erstellung eines Dynamischen Kalenders (ggf. VBA)

    in Microsoft Word Hilfe
    Erstellung eines Dynamischen Kalenders (ggf. VBA): Guten Morgen an Alle, ich hoffe, es geht euch soweit gut :) Ich wende mich heute an euch, weil ich gerade vollkommen verzweifle und irgendwie so ganz und garnicht weiterkomme und irgendwie...
  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