Jump to content

Kurs Programmierung mit Visual Basic / Excel VBA


Recommended Posts

Hallo,

wie versprochen, starten wir heute einen Kurs "Programmierung mit Visual Basic und Excel Visual Basic for Applications". Jeder kann mitmachen, mitlesen, mitdenken.

Ich habe mir folgenden Ablauf vorgestellt. Ich stelle eine Aufgabe unter Angaben von einigen Stichwörtern. Jeder hat dann die Möglichkeit, mit der VB / Excel Online Hilfe bzw. den Internet Tutorials (Tutorial-Übersicht) diese Aufgabe zu lösen. Die Lösungsvorschläge können dann hier eingestellt und diskutiert werden. Ich werde dann nach spätestens zwei Tagen in dem eigentlichen "Kurs-Thread" meine Lösung mit entsprechender Erklärung einstellen. Dann folgt die nächste Aufgabenstellung.

Da wir uns hier in einem Roulette-Forum befinden, werden wir natürlich Roulette-Beispiele für den Kurs verwenden.

Es muß hier keiner seine Lösung einstellen. Es kann auch jeder für sich eine Lösung generien und diese dann mit meiner abgleichen. Trotzdem würde ich mich freuen, wenn der eine oder andere aktiv mitarbeitet. Es können hier auch Fragen zu dem Kurs gestellt werden. Bitte keine Fragen über die eigentliche Aufgabenstellung hinaus stellen. Dafür bitte den allgemeinen Excel-Frage-Thread verwenden.

Viel Spaß und viel Erfolg. :wink:

Link zu diesem Kommentar
Auf anderen Seiten teilen

1. Lektion - Permanenzdatei einlesen

1. Aufgabe - Funktionskopf

Die erste Aufgabe wird die Entwicklung einer Funktion zum Einlesen einer Hamburger Permanenz-Datei sein. Damit wir alle mit der gleichen Permanenz arbeiten habe ich mal die Hamburger Permanenz-Datei, Tisch 1 vom 13.09.2004 mit dem Dateinamen "Hamburg.txt" angehängt.

Aufgabe

Als erstes muß jetzt eine Prozedur oder Funktion angelegt werden.

Damit wir die Funktion auf unterschiedliche Permanenzen anwenden können, übergeben wir als Argument den Dateinamen.

Bitte entscheidet nun, ob wir eine Prozedur oder eine Funktion benötigen und den Datentyp für das Argument. Schreibt den entsprechenden Code für diese Prozedur/Funktion mit dem Argument für den Dateinamen. Als Namen für die Prozedur/Funktion verwendet "EinlesenPerm" und als Namen für das Argument "Dateiname".

Stichwörter

(Unter diesen Stichwörtern kann in der Online-Hilfe gesucht werden)

Function

Sub

Argumente

Datentypen

Hinweise

Die VBA-Hilfe ist in Excel über den Visual Basic Editor erreichbar. Dieser ist über das Menü "Extras -> Makro -> Visual Basic Editor" erreichbar. Im Editor Fenster dann über das Hilfemenü "?".

Zum Schreiben des Codes wird in Editor ein Modul angelegt. Dazu einfach in Excel eine neue Datei anlegen und dann den VB Editor aufrufen. Im Editor dann über das Menü "Einfügen -> Modul" ein sog. Modul anlegen. Im nun geöffneten Modul-Fenster kann der Code erfasst werden. Zur Speicherung entweder im Editor oder im eigentlichen Excel-Fenster die Excel-Datei speichern. Das Modul wird automatisch mit der Excel-Datei gespeichert und kann somit in Zukunft über diese Datei aufgerufen und bearbeitet werden. Es empfiehlt sich also diese Excel-Datei für den Kurs zu verwenden.

Hamburg.txt

Link zu diesem Kommentar
Auf anderen Seiten teilen

hallo chi!

vielen dank für dieses einmalige angebot! :wink: ... :deer:

ich habe folgenden gedanken: du möchtest ja alle zwei tage den code zur verfügung stellen. daran können wir dann vergleichen, diskutieren etc. anhand der bisherigen resonanz hätte ich den vorschlag das du uns mehr zeit gibst, eventuell bis wir sagen das wir ihn gerne sehen würden oder so ähnlich. denn ich zum beispiel bin noch weit vor dem code und hätte gern mehr raum zur verfügung.

@ alle interessierten!

wie geht es euch mit der neuen aufgabe, wo bleibt ihr hängen? ich bin zum beispiel noch damit beschäftigt prozedur/funktion?, zum thema dateityp bin ich noch garnicht gekommen. ich denke ich brauche eine prozedur in der eine funktion enthalten ist. die prozedur ist die schleife die wiederholt durchlaufen wird (zeile für zeile von hamburg.txt), und die funktion ist die auswahl, was überhaupt übertragen werden soll (handwechsel etc.). bei der frage nach dem dateityp ist wahrscheinlich wichtig, in welcher form die auszuwertenden daten vorliegen (.txt).

ich würde mich über wortmeldungen hier freuen, nicht nur für meine unterstützung sondern auch um überhaupt eine resonanz zu sehen, denn ich möchte gerne diskutieren und vor allem das es weiter geht.

also dazligth, online-spieler2, David und Alpenschreck (geiler name) und auch Blue_Dolphin1980, wo seid ihr????

auf gute zusammenarbeit, matthias s. :wink: ... :wink: ... :wink: ...:deer: ... :deer:

bearbeitet von matthias s.
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo matthias,

vielen Dank für das Feedback. Gerne warte ich mit der Lösung etwas länger, aber wir sollten das Ganze nicht zu sehr in die Länge ziehen. Vielleicht können wir uns auf ein Limit einigen. Z.B. max. 5 Tage einigen, dann gibt es die Lösung. Ich denke, dass es hier einige passive Leser/Mitdenker gibt, welche gar nicht diskutieren wollen.

Ein Tipp zu deinen Gedanken. Schaue dir noch einmal in der Online-Hilfe die genaue Definition von Funktion (Function) und Prozedur (Sub) an. Hier mal ein Zitat aus der Online-Hilfe von Microsoft Visual Basic:

Eine Function-Prozedur ist eine Folge von Visual Basic-Anweisungen, die durch die Anweisungen Function und End Function eingeschlossen sind. Eine Function-Prozedur ähnelt einer Sub-Prozedur, kann aber auch einen Wert zurückgeben. Eine Function-Prozedur kann Argumente, wie z.B. Konstanten, Variablen oder Ausdrücke verwenden, die über die aufgerufene Prozedur übergeben werden. Wenn eine Function-Prozedur über keine Argumente verfügt, muß deren Function-Anweisung ein leeres Klammernpaar enthalten. Eine Funktion gibt einen Wert zurück, indem ihrem Namen ein Wert in einer oder mehreren Anweisungen der Prozedur zugewiesen wird.

Des weiteren habe ich nicht nach dem "Dateityp" gefragt, sondern nach dem Datentyp für das Argument. Wir übergeben ja den Dateinamen an die Funktion/Prozedur. Dieser kann z.b. "C:\Eigene Dateien\hamburg.txt" sein. Also hierfür den Datentyp festlegen.

Mein Ansatz ist es, in der Funktion/Prozedur die komplette Permanenz-Datei einzulesen und die einzelnen Coups dann in einer Liste bzw. in einer Excel-Tabelle zu speichern. D.h. wir rufen die Funktion einmal auf, dann werden alle Coups der Permanenz eingelesen und diese in einer Liste oder in einer Excel-Tabelle gespeichert.

Ich hoffe, ich konnte dir etwas helfen :wink:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo ihr.

Erstmal Super vielen Dank an Chi für den Kurs.

Ich hatte die letzten Tage viel zu tun und werde mich erst heute Abend bzw. morgen erst dran begeben können.

Da ich denke das ich mehr lerne wenn ich es selber mach anstelle es vorgekaut zu bekommen, schließe ich mich matthias an und bitte um etwas spätere Veröffendlichung des ersten Teils.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo dazligth,

ihr habt mich ja schon überzeugt. Ich wollte wieder mal vorpreschen. Aber ich passe mich nun gerne an und freue mich darüber, dass ihr es selber erarbeiten wollt. Ich würde mich freuen wenn wir dies im Dialog machen könnten. D.h. Fragen / Probleme bitte hier posten und ich werde mich bemühen, mit meinen Antworten nur Tipps, aber keine Lösungen vorzugeben.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo online-spieler,

auch OpenOffice (StarOffice bassiert auf OpenOffice) bietet einen Makro-Editor an, mit dem man in Basic programmieren kann. In wie weit die Sprachelemente mit VBA vergleichbar sind, kann ich leider nicht vollständig beurteilen. Aber soweit ich das in einem kurzen Überblick gesehen habe, sind die eigentlichen Sprachelemente gleich.

Link zu diesem Kommentar
Auf anderen Seiten teilen

...Ich hoffe, ich konnte dir etwas helfen  :hammer2:

hallo chi!

ja, du konntest mir helfen. ich bin schon durch die wörter durcheinander gekommen funktion/prozedur/funktion-prozedur. dein (sub) in klammern hat das aufgedeckt und gleichzeitig geklärt hoffe ich.

P.S.: 5 tage klingt gut, das sollte auch kurz genug sein um nicht in winterschalf zu verfallen.

@ all!

ich würde mich auch über mehr dialog freuen, aber vielleicht würde ich auch garnichts verstehen.

ich filze grad das thema DATENTYP durch, und gleich erscheint meine erste frage, wollen wir die permanenzzahlen übertragen oder wollen wir alle daten der hamburg.txt übertragen? ich mache es mir mal einfach (hoffe ich zumindest) und beschränke mich auf das übertragen der reinen zahlen (ich meinte ich versuche es.....).

für manchen sind ja handwechsel etc wichtig.

bin mal gespannt wie ich VB gesagt bekomme das es die werte aus ner anderen datei holen soll, sind bestimmt nur 3,4 worte ;-(

viele grüße, matthias s.

bearbeitet von matthias s.
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Jungs,

so wie ich das sehe, seit ihr schon fleißig dabei, die komplette Funktion zu schreiben. Ich wollte eigentllich nur den Funktionskopf und nicht mehr. Die eigentlichen Funktionen wie Datei öffnen, Schleife und Einlesen der Coups wäre später gekommen.

Ich wollte Step bei Step vorgehen. Liege ich falsch mit meiner Richtung? Wollt ihr die Funktion komplett auf einmal schreiben?

Link zu diesem Kommentar
Auf anderen Seiten teilen

hallo chi,

das hatte ich so nicht verstanden, find ich aber deutlich besser. also von mir aus lieber step by step. wobei der aufwand scheint mir der gleiche, bin halt erst auf seite 8 von meinem tutorial.

ich muss auch erstmal was normales zwischendurch machen, puhh... (excel)

chi, jetzt hast du dich verplappert B:<!--emo&:hammer2:-->cool.gif<!--endemo-->

grüße, matthias s.

bearbeitet von matthias s.
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo matthias,

verplappert habe ich micht nicht. Das Wort "Funktion" steht ersteinmal allgemein für ein Stück Programmcode, welches eine bestimmte Aufgabe erledigt. Je nach Programmiersprache wird dann aus einer Funktion z.B. eine "Function" (Funktion) oder eine "Sub" (Prozedur). Dies gilt für Visual Basic.

Ich würde vorschlagen, wir gehen mal den ersten Stepp an, indem ich am Wochenende den Funktionskopf (Function oder Sub mit Argument für Dateinnamen) einstelle. Dann können wir uns in weiteren Schritten der eigentlichen Aufgabe der Funktion (nicht Function!) widmen. Einverstanden?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Jo Einverstanden!

Also ich hab mich mal was eingelesen und denke Funktion Prozedur wäre hier angebracht.

Ich will später die Funktion aus meinem "Hauptprogramm" aufrufen und die soll mir dann die nächste Zahl aus der Permanenz ausspucken und dem "Ausdruck"

--> hole.Zahl zugewiesen werden. Diese kann dann im Hauptprogramm weiter verwendet werden.

Zudem können wir diese Funktion dann als Plug-in bei späteren Programmierungen wiederverwenden.

Hoffe soweit alles Richtig. ??? :hammer2:

Also so ungefähr:



[Private|Public][Static]Function hole.Zahl (Argumente) [As Integer]

'####
' Hier halt unsere Funktion/Ablauf die die Zahl einliest, ist mit den
' Permanenzen  von Hamburg wohl was schwieriger wegen der Formatierung.
' GPC wäre wahrscheinlich einfacher. Aber 1. wollen wir echte! Zahlen und
' 2. Wenns einmal steht ist es ja egal!"
####

End Function


Integer für die Ausgabe reicht ja, da unsere Zahlen zwischen 0 und 36 liegen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

also erst einmal zu Function oder Prozedur. Ihr beide meint, wir sollten für jede Permanenz-Zahl die Funktion aufrufen. Dies würde natürlich einen gewaltigen Overhead an unnötigen Funktionsaufrufen zur Folge haben. Also effektiver ist es auf jeden Fall, die Funktion nur einmal aufzurufen und das Ergebnis in einer Liste bzw. in einer Excel-Tabelle zu speichern.

Also in der Art

Sub PermEinlesen(Dateiname As String)

     'Permanenzzahlen einlesen und in Liste speichern

End Sub

Wie genau die Liste aussieht, dazu kommen wir später. Fürs erste genügt uns deshalb eine Prozedur, da wir im Moment noch keine Rückgabe haben. Wie wir das genau mit der Liste machen, dass sehen wir dann im weiteren Kursverlauf.

Das Argument Dateiname ist vom Datentyp "String". Wir übergeben ja einen Dateinnamen in der Form "C:\eigene Dateien\Hamburg.txt". Somit haben wir einen Text und dieser wird im Visual Basic als Datentyp "String" behandelt.

Mit "End Sub" wird die Prozedur abgeschlossen. Somit gehört alles, was zwischen "Sub ..." und "End Sub" steht, zum Funktionskörper. Dieser beinhaltet also beliebige Anweisungen zur Durchführung einer Aufgabe.

Der Unterschied zwischen einer Function und einer Prozedur ist ganz einfach: Die Function kann einen Wert zurückgeben, die Prozedur nicht!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das Argument Dateiname ist vom Datentyp "String". Wir übergeben ja einen Dateinnamen in der Form "C:\eigene Dateien\Hamburg.txt". Somit haben wir einen Text und dieser wird im Visual Basic als Datentyp "String" behandelt.

Mit "End Sub" wird die Prozedur abgeschlossen. Somit gehört alles, was zwischen "Sub ..." und "End Sub" steht, zum Funktionskörper. Dieser beinhaltet also beliebige Anweisungen zur Durchführung einer Aufgabe.

Der Unterschied zwischen einer Function und einer Prozedur ist ganz einfach: Die Function kann einen Wert zurückgeben, die Prozedur nicht!

Ja soweit so klar.

Mit dem Overhead hast du recht. Hab ich so noch nicht dran gedacht(woher solls auch kommen), stimmt aber. Macht unsere Programmierung nur unnötig langsam!

Wenn wir also die Zahlen alle auf einmal auslesen und zwischen speichern

(datei oder excel) brauchen wir natürlich STRING als Datentyp.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo dazlight,

bitte verwechsle nicht das Einlesen der Permanenzzahlen mit der Übergabe des Dateinamens. Beide sind von einander unabhängig. D.h. der Datentyp "String" bezieht sich erst einmal nur auf die Übergabe des Dateinamens an die Prozedur. Welchen Datentyp wir für das Einlesen der Permanenzzahlen benötigen, werden wir dann festlegen, wenn wir an diesem Punkt der Vearbeitung angekommen sind.

Also noch einmal. Wir übergeben den Dateinnamen der Permanenzdatei an die Prozedur. Da der Dateiname ein Text darstellt, benötigen wir den Datentyp "String" für das Argument.

Ich hoffe, ich konnte das Missverständnis aufklären.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo dazlight,

bitte verwechsle nicht das Einlesen der Permanenzzahlen mit der Übergabe des Dateinamens. Beide sind von einander unabhängig. D.h. der Datentyp "String" bezieht sich erst einmal nur auf die Übergabe des Dateinamens an die Prozedur. Welchen Datentyp wir für das Einlesen der Permanenzzahlen benötigen, werden wir dann festlegen, wenn wir an diesem Punkt der Vearbeitung angekommen sind.

Also noch einmal. Wir übergeben den Dateinnamen der Permanenzdatei an die Prozedur. Da der Dateiname ein Text darstellt, benötigen wir den Datentyp "String" für das Argument.

Ich hoffe, ich konnte das Missverständnis aufklären.

Akzo ja alles klar.

Vielleicht können wir uns ja auch drauf einigen, dass spätestens Freitags oder Samstags ein neuer Aufgabenteil gepostet wird.

Ne nachdem wies läuft auch gerne öfters.

Sonntags hab ich spätestens immer was Zeit mich um solche Dinge ausführlich zu kümmer.

Ich hab leider eine 50-54 Stunden Woche, bin Jugendheimleiter, im geschäftsführenden Vorstand eines Vereins.

Ne Freundin gibts auch noch.

Daher komme nur ein bis zwei Tag unter der Woche dazu was zu machen.

Nur Sonntags is frei mit viel Zeit. :-)

Also chi und matthias was sagt ihr?

Is sonst noch wer mit von der Patie der jetzt noch mit hier im Kurs einsteigen möchte?

Immerhin haben wir schon 12 Downloads von Hamburg.txt

bearbeitet von dazligth
Link zu diesem Kommentar
Auf anderen Seiten teilen

hallo ihr,

keine sorge, ich bleib dabei, ab jetzt aber mit VB6.0 unabhängig von excel, weil mein lieblingstutorial für´s richtige VB daherkommt.

meine zeit ist sogut wie unplanbar, selbstständig und mal ganzer tag frei, mal nicht, bei mir ändert sich die konjunktur innerhalb von zwei tagen. und sonntag bin ich auf passo stelvio, ski fahren :hammer2: macht´s wie ihr´s möchtet.

eure diskussion hat mir jetzt richtig was gebracht. ich hatte natürlich auch im kopf das wir ganzzahlen übertragen werden und INTEGER verwenden müssen (da war ich schon ganz stolz drauf das rausbekommen zu haben) :pfanne:

aber das ist halt der gedankenknicks (trotzdem, bei der prüfung verwenden wir bestimmt irgendwann INTEGER). die funktion nur einmal aufzurufen macht natürlich sinn, aber innerhalb der prozedur muss dann bestimmt durch aufruf jede zeile für sich geprüft werden, nur wird so nicht die ganze funktion immerwieder neu aufgerufen, sondern nur ein anteil wiederholt.

ich stelle mir vor, daß es vielleicht leichter ist die hamburg.txt einmal in einem schritt komplett in excel zu kopieren und dann dort zu prüfen und zu kopieren. aber nur unter der vorraussetzung, das VBA in excel leichter lesen kann als im editor. und wahrscheinlich bin ich da auf dem holzweg, weil ich so excelmäßig denke. VBA kann bestimmt mehr als ich denke.

mir bringt die diskussion im moment mehr, aber beispiele zu er-/ und zu verstellen (tutorial) hat auch was.

grüße, matthias s. :pfanne:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo David,

ich gebe zu, man muß sich schon etwas hineindenken und viel selber erarbeiten. Auch denke ich, dass Vorkenntnisse im Bereich Entwicklung von Vorteil werden. Ich denke nicht, dass ich es schaffe, einem Einsteiger wirklich das Programmieren beizubringen - vor allem nicht auf diese Art und Weise. Dazu wäre eine direkte Kommunikation für ein Frage-Antwort-Spiel sicher viel besser geeignet. Des weitern müßte ich dazu ersteinmal umfangreich Schulungsunterlagen mit einem durchgehenden Konzept erarbeiten.

Dieser Kurs ist eigentlich dazu gedacht, an konkreten Beispielen einen Einblick in die Programmierung mit VB zu geben. Wenn der eine oder andere dadurch auf dem Geschmack kommt und sich selber weiterbildet, würde mich das freuen.

Ich beantworte aber gerne jede Frage, sofern sie gestellt wird :hammer2:

Link zu diesem Kommentar
Auf anderen Seiten teilen

1. Lektion - Permanenzdatei einlesen

2. Aufgabe - Datei öffnen/schliessen

Als nächstes ist das Dateihandling zu programmieren. Es muß die Datei "hamburg.txt" geöffnet, gelesen und geschlossen werden.

Aufgabe

Zunächst erstellen wir den Code für das Öffnen und Schliessen der Datei. Wir haben im Argument "Dateiname" den vollständigen Dateinamen inkl. Pfad an die Funktion übergeben. Diese Datei muß nun geöffnet werden und am Schluß der Verarbeitung auch wieder geschlossen werden.

Daraus ergibt sich als Aufgabe, die Datei "Dateiname" zu öffnen und wieder zu schliessen. Die dazwischenliegende Verarbeitung ist noch nicht Bestandteil dieser Aufgabe.

Stichwörter

(Unter diesen Stichwörtern kann in der Online-Hilfe gesucht werden)

Open

Close

FreeFile

Integer

Hinweise

Wichtig beim Öffnen der Datei ist darauf zu achten, dass die sog. Dateinummer richtig behandelt wird (Stichwort FreeFile). Es sollte auch die Art der Verarbeitung für die Datei berücksichtigt werden. Die Frage hierfür lautet: Für welchen Zweck wird die Datei geöffnet?

Code

Als Grundlage für den Kurs wird der bisherige Code in der Excel-Datei "VB Kurs.xls" fortgeschrieben. Für die Anwender der VB-Entwicklungsumgebung steht in der Zip-Datei das Modul "Modul1.bas" zur Verfügung. Dieses kann in die VB-Entwicklungsumgebung importiert werden.

VB_Kurs.zip

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wie ist deine Meinung dazu?

Du kannst jetzt schreiben und dich später registrieren. Bereits registrierter Teilnehmer? Dann melde dich jetzt an, um einen Kommentar zu schreiben.
Hinweis: Dein Beitrag wird nicht sofort sichtbar sein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Neu erstellen...