Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  VBasic / vb.net / vbs / wsh
  VBA Programmieren

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  VBA Programmieren (1898 mal gelesen)
Christian B.
Mitglied



Sehen Sie sich das Profil von Christian B. an!   Senden Sie eine Private Message an Christian B.  Schreiben Sie einen Gästebucheintrag für Christian B.

Beiträge: 86
Registriert: 09.03.2006

erstellt am: 26. Jul. 2010 19:36    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,

Habe grad für ein kleines Berechnungsprogramm zwei Teilprobleme zu lösen.
Das ganze will ich mit Excel VBA umsetzen.

Ich habe eine Formel die sieht in etwa so aus Wert(n)=a(n)/(b-a(n-1)
n und n-1 sind jeweils die Indices.
Kann mir jemand kurz beschreiben wie ich es schaffe einen Index zu definieren, Z.B. L1, L2, Ln

Ich denke das zweite Teilproblem hängt mit dem Ersten zusammen.
Es soll ein Vektor mit einer Matrix multipliziert/addiert werden.
wie kann ich am besten mit VBA Matritzen basteln, oder lässt sich das überhaupt umsetzen?

Ich hoffe ihr könnt mir weiterhelfen, danke schon mal!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Comos User
Mitglied



Sehen Sie sich das Profil von Comos User an!   Senden Sie eine Private Message an Comos User  Schreiben Sie einen Gästebucheintrag für Comos User

Beiträge: 112
Registriert: 23.03.2010

erstellt am: 27. Jul. 2010 08:48    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Christian B. 10 Unities + Antwort hilfreich

Hallo Christian,

einen 'Index definieren' kann man, indem eine Variable als Array deklariert wird

Dim Werte(n)      'wobei n der höchste Index ist (beginnend bei 0, bzw mit 'Option Base 1' mit 1)

geht auch mehrdimensional

Dim Werte(n,m)

oder mit definierten Bereichen

Dim Werte (n to m)


Zum Zweiten Problem:
Excel bietet Funktionen zu Multipliziern (MMul) von Matritzen sowie eine umfangreiche Auswahl sogenannter Arrayfunktionen. Dein Problem sollte sich also ohne VBA lösen lassen.

Wenn es unbedingt VBA seien soll dann eben mit oben beschrieben Array's

dazu noch ein Hinweis: In VBA ergibt die Zuweisung (der Werte) eines Range an eine Variable immer ein zweidimensionales Array, auch wenn nur eine Zeile oder eine Spalte vorhanden ist. Achtung entgegen der sonst üblichen Schreibweise ist hier der 1. Index die Zeile und der 2.Index die Spalte.

Gruß Peter

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Christian B.
Mitglied



Sehen Sie sich das Profil von Christian B. an!   Senden Sie eine Private Message an Christian B.  Schreiben Sie einen Gästebucheintrag für Christian B.

Beiträge: 86
Registriert: 09.03.2006

Windows 7
AutoCAD 2009
AutoCAD Architecture 2012

erstellt am: 28. Jul. 2010 00:07    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi, danke für die schnelle Antwort,

sollte schon VBA sein, da ich in einer Form arbeite und das dann wieder in die Tabellen einfügen will.


Hätte noch eine Frage:

Ich habe eine CheckBox (Kästchen) in einem Worksheet ("")
wie kann ich nun in einem Modul auf CheckBox1.value zugreifen?
Er meldet mir immer, dass die Variable unbekannt sein; das soll aber keine Variable sein, sondern ein Objekt, nur dass es im Workheet liegt.

Danke, viele Grüße


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Nepumuk
Mitglied
Entwicklungsleiter


Sehen Sie sich das Profil von Nepumuk an!   Senden Sie eine Private Message an Nepumuk  Schreiben Sie einen Gästebucheintrag für Nepumuk

Beiträge: 351
Registriert: 16.10.2004

erstellt am: 28. Jul. 2010 01:55    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Christian B. 10 Unities + Antwort hilfreich

Hallo,

indem du das Objekt angibst. Beispiel:

Tabelle1.CheckBox.Value

Tabelle1 ist der Objektname der Tabelle (im Projektexplorer vor dem Namen auf der Exceloberfläche in Klammern).

------------------
Gruß
Nepumuk 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Christian B.
Mitglied



Sehen Sie sich das Profil von Christian B. an!   Senden Sie eine Private Message an Christian B.  Schreiben Sie einen Gästebucheintrag für Christian B.

Beiträge: 86
Registriert: 09.03.2006

Windows 7
AutoCAD 2009
AutoCAD Architecture 2012

erstellt am: 28. Jul. 2010 18:09    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi nochmals Danke!

Ich hab mal jetzt mit den Arrays etwas rumprobiert und bin auf eine etwas fortgeschrittenere Schwierigkeit gestossen:

Public Durchlauf As Long
Public DM(0 To Durchlauf) As Double
....
Do Until DM(n - 1) < DMgrenz
        Call Sub
Loop

In der Sub wird der Wert DM solange durch eine mathematische Iteration verkleinert, bis das Abruchkriterium DMgrenz erreicht ist.
Nur wie kann ich unendlich viele Arrays oder halt so viele wie ich benötige nämlich x das weiß ich vorher nicht, das hängt davon ab wie schnell die Reihe konvergiert, freihalten?
Er will irgendwie nur feste Werte?!?

Grüße

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Comos User
Mitglied



Sehen Sie sich das Profil von Comos User an!   Senden Sie eine Private Message an Comos User  Schreiben Sie einen Gästebucheintrag für Comos User

Beiträge: 112
Registriert: 23.03.2010

erstellt am: 29. Jul. 2010 08:15    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Christian B. 10 Unities + Antwort hilfreich

Hallo Christian,

bei der Deklaration eines Array können nur Konstante dimensionen angegeben werden. Logisch der Kompiler muß ja wissen wieviel Speicher er reservieren muß.

So richtig habe ich dein Problem noch nicht verstanden, nur soviel die erforderliche Größe ist nicht von Anfang an bekannt.

Also entweder du dimensionierst das array mit der maximal möglichen Größe und merkst die vieviel davon genutzt wird. Der Rest ist halt 'ungenutzt'.

Oder du nutzt dynamische Array's.
Bei der Dimensiomierung wird keine Größe angegeben [Dim Werte()] erst zur Laufzeit wird mit Redim das Feld erzeugt [Redim Werte(x)], da ist dann auch eine Variable zulässig. Mann kann auch ein bereits initialisiertes Feld vergrößern oder verkleinern, mit dem Schlüsselwort Preserve bleibt sogar der Inhalt erhalten.

Code:
Dim Werte() as Double
Dim X as Integer

X=10
Redim Werte(X)
Werte(5) = 66
X=12
Redim Preserve Werte(X)



Aber Vorsicht Redim Preserve in einer Itteration kann schnell zu Performanzekiller werden.

Gruß
Peter

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

MWN
Mitglied
Dipl.-Ing.


Sehen Sie sich das Profil von MWN an!   Senden Sie eine Private Message an MWN  Schreiben Sie einen Gästebucheintrag für MWN

Beiträge: 492
Registriert: 14.02.2007

erstellt am: 29. Jul. 2010 08:55    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Christian B. 10 Unities + Antwort hilfreich

Guten Morgen,

und ganz genau Peter.
Und wenn man das "preserve" vergisst, dann wundert man sich immer über das Array, das anscheinend keine Daten behalten will... 
Grüße und viel Erfolg

Tobias

------------------
Besucht mich doch mal in meiner Tischlerei

"...Kommunikation ist nur so gut wie ihr Ergebnis..." - frei nach Richard Bandler / John Grinder

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Christian B.
Mitglied



Sehen Sie sich das Profil von Christian B. an!   Senden Sie eine Private Message an Christian B.  Schreiben Sie einen Gästebucheintrag für Christian B.

Beiträge: 86
Registriert: 09.03.2006

Windows 7
AutoCAD 2009
AutoCAD Architecture 2012

erstellt am: 05. Aug. 2010 00:15    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Guten Abend,

bin mal wieder zu Nächtlicher Stunde am Programmieren und immernoch beim alten Problem.
Danke an Comos User... ich hätte gedacht das es funktioniert bis grad vorhin...

anderes Beispiel:
Public M() As Double

n = 1
M(0) = 0
Anfang Iteration
  M(n)=Formel
  n=n+1
  andereFormel mit x=.M(n)..*M(n-1)
Ende Iteration

Also im Prinzip brauchte ich irgendwie die umgekehrte konstruktion, zuerst Variable mit genau einem Wert (0) und dann offenes Dantenfeld, damit alle Werte darin Platz haben.
Hat von euch jemand eine Idee wie sich das umsetzen lässt?

Vielen Dank bisher
Grüße Christian

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Comos User
Mitglied



Sehen Sie sich das Profil von Comos User an!   Senden Sie eine Private Message an Comos User  Schreiben Sie einen Gästebucheintrag für Comos User

Beiträge: 112
Registriert: 23.03.2010

erstellt am: 05. Aug. 2010 07:59    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Christian B. 10 Unities + Antwort hilfreich

Guten Morgen Christian,

Dein Code ist schon ganz gut, nur das Redim must du auch einsetzen

Code:
Dim M() As Double

n = 1
Redim M(n)
M(0) = 0
Anfang Iteration
  M(n)=Formel
  n=n+1
  Redim Preserve M(n)
  andereFormel mit x=.M(n)..*M(n-1)


Außerdem vermute ich, das es mit Public und einem dynamischen Datenfeld probleme geben kann (hängt letztendlich vom Compiler ab). Besser wäre das dynamische Datenfeld local zu halten und (wenn notwendig) nach Abschluß der Itterartion in eine Public Variable zu transferieren.

Gruß
Peter

[Diese Nachricht wurde von Comos User am 05. Aug. 2010 editiert.]

[Diese Nachricht wurde von Comos User am 06. Aug. 2010 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz