Autor
|
Thema: zeilennummer + private sub ???? (3562 mal gelesen)
|
Nico Laufer Mitglied Dipl. Ing. (FH)
Beiträge: 264 Registriert: 05.02.2004 Pro/E WF2 M180
|
erstellt am: 21. Dez. 2004 16:16 <-- editieren / zitieren --> Unities abgeben:
hallo zusammen, habe so gut wie keine ahnung von excel. wollte eine spalte z.b. a1:a20 abfragen, ob sich ein eintrag in einer zelle befindet. wenn sich ein eintrag in der zelle befindet, soll die zeilennummer als zahl übergeben werden. beispiel: zelle a7 hat den wert 9, dann soll die zahl 7 übergeben werden. manche beispiel in der vba-hilfe funktionieren irgendwie nicht. kann mir vieleicht jemand erklären, wie man ein vba-programm richtig startet (private sub -> was kommt dahinter und was heißt das?) und beendet (end sub -> was soll end sub heißen?). Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tunnelbauer Ehrenmitglied V.I.P. h.c. Bauingenieur
Beiträge: 7085 Registriert: 13.01.2004 ich hab eh keine Probleme damit...
|
erstellt am: 21. Dez. 2004 16:36 <-- editieren / zitieren --> Unities abgeben: Nur für Nico Laufer
Hallo Nico, zu deinen VBA-Fragen sag ich nix - da gibts Spezialisten dafür - aber nicht mich. Zu deinem Problem: das kannst du generell mit SVERWEIS lösen. Siehe dazu in deiner Hilfe nach (da funktionieren auch die Beispiele und du brauchst für das ganze kein VBA). Generelle Anmerkung dazu: wenn in deiner Spalte A die zu suchenden Werte stehen, dann muss in der Spalte B der zu übergebende Wert stehen (eine Übergabe der Zeilennummer mit SVERWEIS ist nicht möglich - dazu müsste man das mit VBA lösen). (SVERWEIS war erst vor kurzem Thema hier; findest du also auch mit der Forumssuche) ------------------ Grüsse Thomas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Moderator Architekt
Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 21. Dez. 2004 16:47 <-- editieren / zitieren --> Unities abgeben: Nur für Nico Laufer
|
startrek Moderator Architekt
Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 21. Dez. 2004 17:35 <-- editieren / zitieren --> Unities abgeben: Nur für Nico Laufer
Ach, vergessen/überlesen die Sache mit den Sub's ... Ich versuchs mal, auch wenn ich nicht grade in Programmierung promoviert habe ;-) Also eine 'sub' ist eine ganz normale Prozedur/Routine, wird eingeleite mit:
Code:
Sub irgendeinName() 'Aufruf dim variable as irgendwas 'evtl. Deklarationen codeline 1 'ab hier beginnt die Codeausführung zeilenweise v.o.n.u. codeline 2 ... codeline x End Sub 'Ende Fine Schluss
Normale 'Subs' gehören üblicherweise/meist in 'normale' Module. Eine 'Private Sub' ist ein Kind, also es hat Eltern, zu denen's gehört. Beispielsweise Private Sub Worksheet_Change (byval target as range), in dem Falle ist das Tabellenblatt A in welchem sich der Code befindet der Vormund ;-) Anderst du Tabelle B, tut sich nix, da der Code unter Private von A steht. So ähnlich verhält sich das auch mit Commandbuttons in Tabellenblättern/Userforms, also alle Steuerelemente egal welcher Art, reagieren 'privato' sozusagen. Da gibts die verschiedensten Ereignisse, kommt aufs Steuerelement an. Kannste ja mal antesten, Rechtsklick auf Tabellenreiter 'Tabelle1' > Code anzeigen: darein kopierste mal:
Code:
Private Sub Worksheet_SelectionChange(byval target as range) target.value=target.row call machwas end sub
und im VBE unter Einfügen > normales Modul, kopierste das rein: Code: sub machwas() msgbox "done" end sub
Sobald du nun Activcell in _der_ Tabelle änderst, ruftst du faktisch die Private Sub auf, welche wiederum die normale Sub aufruft. In Excel unter Extras/Makros/ausführen [Alt+F8] findest Du ebnfalls nur die Sub 'machwas', nicht die Private, die is nämlich eben _privato_ So, muss reichen für's erste! ;-)) lg Nancy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Juergen Schmidetzki Mitglied Administrator keytech-PLM
Beiträge: 292 Registriert: 06.11.2000 EDM: Workmanager 11.61 CAD: ME10 V12 Solidworks 2005
|
erstellt am: 22. Dez. 2004 07:01 <-- editieren / zitieren --> Unities abgeben: Nur für Nico Laufer
Hallo und guten Morgen, die Verwendung von IsEmpty(Cell), wie von startrek beschrieben, ist nach meinen Erfahrungen mit Vorsicht zu geniessen. Solange die Zelle nicht im Makro bearbeitet/veraendert wird, arbeitet diese Funktion korrekt; wenn ich aber die Zelle leere und dann die Funktion aufrufe, 'geht's in die Hose'. Beispiel: Sub x() Dim cell As Range Cells(1, 4).Value = "" For Each cell In Range("A1:A20") If Not IsEmpty(cell) Then cell.Value = cell.Row Next End Sub Hier wird auch in Zelle A4 die Zeilennummer eingetragen, obwohl diese definitiv geleert wird. Deswegen wuerde ich dann das machen: Sub x() Dim cell As Range For Each cell In Range("A1:A20") If cell.value <> "" Then cell.Value = cell.Row Next End Sub Viele Gruesse
Juergen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Nico Laufer Mitglied Dipl. Ing. (FH)
Beiträge: 264 Registriert: 05.02.2004 Pro/E WF2 M180
|
erstellt am: 22. Dez. 2004 10:50 <-- editieren / zitieren --> Unities abgeben:
|
startrek Moderator Architekt
Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 22. Dez. 2004 23:45 <-- editieren / zitieren --> Unities abgeben: Nur für Nico Laufer
Hi Jürgen, hi all, war mir zwar in dem Moment bissle egal, die Sache mit dem empty(), aber du hast recht, ist 'ne tückische sache mit dem 'empty-dingsda' ;-)) Für die 'wasserdichte' Variante - tja, so Dinge fallen einem in real Life wohl zu oft auf die Füsse - einfach mal thanks. @all: Ich denke mal die Zeit ist reif, wir schreiben den 22.12.2004, an dieser Stelle mal einen besinnlichen 'Haltepunkt' gesetzt: Wünsch' euch allen hier ein gesegnetes Fest! lieben Gruss, Nancy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|