| | | Materialien für den 3D-Druck im Hochtemperaturbereich, eine Pressemitteilung
|
Autor
|
Thema: VBA - Allgemein (1411 mal gelesen)
|
DegraA Mitglied staatl. gepr. Techniker - Maschinenbau
Beiträge: 177 Registriert: 29.03.2005 Dell Latitude E5500 Core2Duo 2,53GHz 3,45 GB RAM Win XP Prof. SP3 Office 2003 Prof. Catia V4.2.4 Catia V5R19 i break together
|
erstellt am: 03. Jul. 2008 15:05 <-- editieren / zitieren --> Unities abgeben:
Hallo Leudle, habe schon die Suche benutzt aber bin nicht sehr weit gekommen... ich habe keinerlei Erfahrungen, geschweige denn Kenntnisse von und in VBA. Aber ich möchte trotzdem wissen was da gerade passiert. kann ir das jemand in einfachen Sätzen erklären ? Code: Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'Exit Sub c = Target.Column r = Target.Row If r = 136 Or r = 278 Then If (c - 5) Mod 8 = 2 Then Cells(r - 98, c + 5).Select Exit Sub End If If (c - 4) Mod 8 = 2 And c <> 2 Then Cells(r + 1, c - 2).Select nr = r + 3 Select Case r Case 125, 267 Cells(nr - 1, c).Select Case 54, 73, 105, 112, 117, 121, 196, 215, 247, 254, 259, 263 Cells(nr, c).Select Case 92, 234 Cells(nr + 2, c).Select Case 127, 128, 129, 269, 270, 271 If (c - 5) Mod 8 = 2 Then Cells(r + 1, c - 2).Select Case 130, 272 If (c - 5) Mod 8 = 2 Then Cells(r + 6, c - 1).Select End Select End Sub
gr33zz David ------------------ Am lautesten werden Lehrer, wenn sie "Ruhe!" brüllen. Lattenrost ist keine Geschlechtskrankheit !! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
carsten-3m Mitglied Dipl.-Ing. Mbau (Produktmanagement, Patent- und Normwesen)
Beiträge: 950 Registriert: 08.05.2007 Excel 2010
|
erstellt am: 03. Jul. 2008 15:17 <-- editieren / zitieren --> Unities abgeben: Nur für DegraA
Ohne den Programmcode im Detail verstanden zu haben, ist doch erkennbar was generell passiert: Die Prozedur ermittelt zunächst Zeilen- und Spaltennummer der aktuellen Cursorposition und wählt dann jeweils abhängig von Zeilen- bzw. Spaltennummer bestimmte durch einen Rechengang ermittelte Zellen aus. Aufgerufen wird die Prozedur jeweils bei jeder beliebigen Veränderung der Corsorposition. ------------------ Seit Pro/E Version 1 dabei, auwei... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
runkelruebe Moderator Straßen- / Tiefbau
Beiträge: 8086 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 03. Jul. 2008 15:36 <-- editieren / zitieren --> Unities abgeben: Nur für DegraA
Hallo DegraA, Du hättest bei der Suche aber was finden sollen, nicht genau Deinen code, aber den Umgang mit solchem. Außerdem hilft Dir bei sowas eher die F1 als die Forensuche. Am einfachsten bekommt man einen Überblick, wenn man die VBA Umgebung öffnet (Alt+F11) hast Du ja schon gefunden und dort den code zeilenweise durchläuft. Das machst Du mit der F8. Die einzelnen Zeilen werden gelb markiert, Du hast Maushints und siehst (am Besten auf nem 2. Monitor) was im Tabellenblatt passiert. Du nimmst Dir das LokalFenster, das DirektFenster, die Objektbibliothek (F2) und ganz wichtig: die F1 zur Hand und schaust dort die Schlüsselwörter nach. Eine Abfrage im DirektFenster (auch DebugFenster genannt) erreichst Du mit ?Ausdruck oder ein eingeschobenes Debug.Print im code. Deinen (wirklich Deiner? wo ist die Quellenangabe? mache ich ausnahmsweise, ist ja kein Zauberwerk drin, aber demnächst bitte mit Quelle!) code habe ich mal kommentiert. Wenn Du den jetzt wie oben beschrieben durchgehst, sollte Dir das alles klar werden. Code: 'Da Deine Variablen NICHT deklariert wurden, habe ich diese (bei mir Standard-Anweisung) auskommentiert 'Option Explicit 'generell sollten Variablen aber deklariert werden, das spart Speicherplatz, was nicht deklariert wird, ist automatisch Variant = 16 bytes 'wenn sich die Auswahl des Blattes ändert, also z.B. von A1 in B1 geklickt wird Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'Exit Sub 'setze Variable c = Spalte der Auswahl c = Target.Column 'setze Variable r = Zeile der Auswahl r = Target.Row 'Wenn Zeile = 136 oder 278 dann If r = 136 Or r = 278 Then 'Der Modulo-Operator (oder Rest-Operator) dividiert Operand1 durch Operand2, rundet dabei Fließkommawerte zu ganzen Zahlen und gibt nur den Rest als Ergebnis zurück 'wenn ganzzahliger Rest von(Spalte-5)/8 = 2 dann selektiere Zellen(Reihe-98, Spalte+5) If (c - 5) Mod 8 = 2 Then Cells(r - 98, c + 5).Select 'verlaß die SubRoutine Exit Sub 'beende die Wenn-Dann-Bedingung (Prüfung Zeile 136 oder 278) End If 'vergleiche vorige ModBedingung UND Spalte ist nicht 2 If (c - 4) Mod 8 = 2 And c <> 2 Then Cells(r + 1, c - 2).Select 'Setze Variable nr auf Zeile+3 nr = r + 3 'Mehrfachabfrage der Zeile Select Case r 'Wenn Zeile = 125 oder 267 Case 125, 267 'selektiere Bereich (Zeile+3-1,Spalte) Cells(nr - 1, c).Select Case 54, 73, 105, 112, 117, 121, 196, 215, 247, 254, 259, 263 Cells(nr, c).Select Case 92, 234 Cells(nr + 2, c).Select Case 127, 128, 129, 269, 270, 271 If (c - 5) Mod 8 = 2 Then Cells(r + 1, c - 2).Select Case 130, 272 If (c - 5) Mod 8 = 2 Then Cells(r + 6, c - 1).Select 'Ende der Mehrfachabfrage End Select 'Ende der Sub End Sub
ich hoffe, es paßt alles, bei Fehlern, bitte Laut geben. PS: DAS und folgende betrifft Dich also auch, praktisch, brauch ich es nicht nochmal schreiben ;-) ------------------ Gruß, runkelruebe Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... System-Info Excel -Suche RuA-Suche FAQ-ACAD Hilfe zu CAD.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DegraA Mitglied staatl. gepr. Techniker - Maschinenbau
Beiträge: 177 Registriert: 29.03.2005 Dell Latitude E5500 Core2Duo 2,53GHz 3,45 GB RAM Win XP Prof. SP3 Office 2003 Prof. Catia V4.2.4 Catia V5R19 i break together
|
erstellt am: 08. Jul. 2008 08:51 <-- editieren / zitieren --> Unities abgeben:
erstmal einen großen Dank an die ruebe für die ausführliche 1Erläuterung dieses Codes :top: aber auch an carsten ein dickes Dankeschön für deine einfache und verständliche Erklärung. Ich muss aber ehrlich zugeben das mich das jetzt doch nicht so weit gebracht hat wie ich mir eigentlich erhofft hatte. Egal... vlt. fällt der Groschen ja noch in den nächsten Tagen... Besitzt jemand von euch ein paar einfache und kleine Tutorials über die ich einen Einstieg in VBA bekomme ?? So mit kleinen Übungsaufgaben / Problemstellungen und auch dazu passende Lösungen ?? das würde mir bestimmt schonmal die ersten Schritte mit VBA erleichtern Gruß David ------------------ Am lautesten werden Lehrer, wenn sie "Ruhe!" brüllen. Lattenrost ist keine Geschlechtskrankheit !! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
runkelruebe Moderator Straßen- / Tiefbau
Beiträge: 8086 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 08. Jul. 2008 09:07 <-- editieren / zitieren --> Unities abgeben: Nur für DegraA
Guten Morgen, Guck mal HIER vorbei, das ist einfach erklärt und immer wieder was Neues dabei. Paulchen ( ) hat in seiner sig ne Seite verlinkt, dort sind ebenfalls weblinks zum Thema Excel. Hab ich nicht alle durch, sind aber einige bei, die Dich nach vorne bringen könnten. Herr google kennt bestimmt auch welche. Und ansonsten hilft mir persönlich nur üben, üben, üben. Am Besten mit einem konkreten Ziel vor Augen. Nicht unbedingt vorhandenen code nehmen, sondern selber versuchen, mit allen damit verbundenen Fehlern, die man so macht. Und nicht hinten anfangen, sondern vorne ------------------ Gruß, runkelruebe Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... System-Info Excel -Suche RuA-Suche FAQ-ACAD Hilfe zu CAD.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
carsten-3m Mitglied Dipl.-Ing. Mbau (Produktmanagement, Patent- und Normwesen)
Beiträge: 950 Registriert: 08.05.2007 Excel 2010
|
erstellt am: 08. Jul. 2008 13:41 <-- editieren / zitieren --> Unities abgeben: Nur für DegraA
Zitat: Original erstellt von runkelruebe: ... Und ansonsten hilft mir persönlich nur üben, üben, üben. Am Besten mit einem konkreten Ziel vor Augen. ...
Besser hätte man das nicht sagen können /OT Bissel ab von der eigentlichen Fragestellung mal eine kleine Anekdote, die doch irgendwie zum generellen Thema passt: Lange vor dem Internet, dort kann man heutzutage zum Thema reichlich Informationen finden, wurde ich durch wen auch immer auf das sogenannte 8-Damen-Problem aufmerksam. Die Aufgabe darin: Man setze 8 Damen auf einem Schachbrett dergestalt, dass keine Dame irgendeine andere Dame bedrohe. Das war damals als rein praktische Aufgabe gedacht, an der ich auch am heimischen Schachbrett reichlich zu tüffteln hatte, bis ich überhaupt eine passende Stellung mit allen 8 Damen zusammen hatte. Damals allerdings schon sehr fasziniert von Computern und deren Möglichkeiten, logische Probleme durch entsprechende Programmierung lösen zu können, ging ich frisch ans Werk und programmierte einen rekursiven Algorithmus, der sich auf die Suche machte mit folgender Zielsetzung: Wieviele Stellungen gibt es für das 8-Damen-Problem überhaupt. Ich fand reichlich viele und optimierte mein Programm, um Spiegel- und Drehstellungen zu eleminieren. Danach fand ich immer noch - meiner ahnungslosen Meinung nach - reichlich viele, nämlich 12. Heutzutage kann man in vielen Publikationen im Internet nachlesen, dass es mit dem Ergebnis wohl seine Richtigkeit hat. Fazit der nun viel zu langen Anekdote: Programmieren lernt man wirklich sehr schön an echten Problemstellungen. Und wenn keine berufs- oder aufgabenbedingte vorliegt, na dann macht man sich halt ein "Problem" - und löst es dann Über mein selbstspielendes Tetrisprogramm berichte ich dann ein ander mal OT/ ------------------ Seit Pro/E Version 1 dabei, auwei... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|