Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
708to712
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
708to712
708to712
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Variable und Array

Variable und Array
19.12.2005 08:30:16
Friedrich
Hallo und guten Morgen,
ich stolpere in meinem Project immer wieder über das Variablenproblem.
Folgende Datei:
DieseArbeitmappe
Tabelle1 - Tabelle8
Form1 - Form8
Modul1 - Modul5
Im Workbook_Open-Ereignis lege ich eine Variable fest, welche die Datei für einen von 2 Arbeitsbereichen vorbereitet.
Diese Variable habe ich mit Public Bereich festgelegt.
Diese Variable muß ich aus allen Dateibereichen abfragen, um z.B. Formulare entsprechend dieser Variablen in der Ansicht zu beeinflussen. Auch aus den Modulen heraus brauche ich Zugriff auf diese Variable.
Ist es grundsätzlich möglich, diese Variable von jedem Programmteil aus aufzurufen?
Ist es auch möglich sie von einer gleichzeitig geöffneten 2. Exceldatei aus anzusprechen?
Zum Array habe ich folgende Frage:
Das Einlesen bereitet keine Schwierigkeiten. Das Array ist 2-dimensional mit sich ändernder Zeilenzahl und 22 Spalten (1 to ...., 1 to 22).
In Spalte 1 steht immer ein Datumswert und in Spalte 2 immer ein Buchstabe.
Ich möchte jetzt um ein Diagramm zu erstellen, die Datumsspalte nach einem bestimmten Monat und Spalte 2 nach einem bestimmten Buchstaben filtern und die entsprechenden Daten in den Spalten 3-22 addieren. Geht das besser, wenn schon alle Daten im Array eingelesen wurden, oder während des Einlesens.
Habe mich mit dem Berechnen mit Array-Inhalten noch nicht oft beschäftigt. Das Berechnen sollte schneller gehen, als die Berechnung mit Excel-Fomeln. Diese rechnen sehr lange.
mfG Friedrich

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Variable und Array
19.12.2005 09:39:11
Nepumuk
Hallo Friedrich,
1. Die Variable muss in einem Standardmodul deklariert werden, um projektweit zur Verfügung zu stehen.
2. Nein, es gibt keine projektübergreifende Variablen. Du könntest eine Funktion in das eine Projekt einbauen, welche den Variablenwert zurückliefert. Diese Funktion kannst du mit der Application.Run - Methode aus der anderen Mappe aufrufen und so an den Wert der Variablen zu kommen.
3. Operationen in einem Array sind ~ 1.000 mal schneller, wie in einer Tabelle. Also, erst alles einlesen, wobei du Tabellenbereiche mit einer einzigen Anweisung in ein Array einlesen kannst, und dann deine Berechnungen starten.
Gruß
Nepumuk

Anzeige
@Nepumuk
19.12.2005 09:47:25
MichaV
Hallo Nepumuk,
über 2. denke ich die ganze Zeit nach. Ich würde Dir zustimmen, aber warum steht in der Online- Hilfe zu Public:
Auf Variablen, die mit der Public-Anweisung deklariert wurden, kann von allen Prozeduren in allen Modulen aus allen Anwendungen zugegriffen werden. Wenn allerdings Option Private Module aktiviert wurde, sind die Variablen nur innerhalb des zugehörigen Projekts öffentlich. (..also sonst innerhalb aller Projekte!?)
...oder was meinst Du, wie ist das zu deuten?
Gruß- Micha
AW: @Nepumuk
19.12.2005 10:08:17
Nepumuk
Hallo Micha,
das frage ich mich auch. Ich kann Variable nur dann in zwei Projekten verwenden, wenn vom einen Projekt auf das andere ein Verweis gesetzt ist. Wenn du z.B. in Mappe1 einen Verweis auf Mappe2 setzt, kannst du die öffentlichen Variablen von Mappe2 in Mappe1 verwenden. Aber, die öffentlichen Variablen aus Mappe1 sind in Mappe2 nicht bekannt. Du kannst aber keine wechselseitigen Verweise einrichten, so dass es in beide Richtungen geht.
Ich habe mir ein kleines Addin mit einer öffentlichen Klasse geschrieben, welche alle Variablentypen enthält. Auf diese Klasse kann über eine weiter Klasse (weil so eine Klasse ganz einfach kopiert werden kann) zugegriffen werden und so Variabelen (auch mehrdimensionale Arrays) in allen Mappe, welche über diese Klasse verfügen, austauschen. Das Addin wird, damit es nur bei Bedarf geladen wird, über einen Verweis an die Mappen gebunden.
Gruß
Nepumuk

Anzeige
AW: @Nepumuk
19.12.2005 10:12:55
MichaV
Hallo Nepumuk,
also ist die OH an dieser Stelle fragwürdig.
Vielen Dank für Deine Bestätigung.
Gruß- Micha
AW: Variable und Array..... fast klar
19.12.2005 10:38:39
Friedrich
Hallo und danke an alle,
brauche aber immer noch einen Tipp, wie ich Daten im Array spaltenweise addiere.
zum Verständnis:
kann ich zu Beginn in Workbook_Open eine Sub in einem Modul aufrufen und darin die Public Variable setzen und dann mit Workbook_Open fortfahren?
Friedrich
AW: Variable und Array..... fast klar
19.12.2005 10:53:44
Nepumuk
Hallo Friedrich,
1. Mal ein Beispiel. Das folgende Makro liest den Bereich von Zelle A1 bis Zelle Cx (x=abhängin von der Anzahl der Einträge in Spalte A) ein. Dann wird die Summe der Spate A gebildet.
Public Sub test()
    Dim vntAray As Variant
    Dim lngRow As Long
    Dim dblTotal As Double
    vntAray = Range(Cells(1, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 3))
    For lngRow = 1 To UBound(vntAray)
        dblTotal = dblTotal + vntAray(lngRow, 1)
    Next
    MsgBox dblTotal
End Sub

2. Du kannst die Variable auch direkt im Open-Ereignis setzen, da sie öffentlich ist und somit projektweit darauf zugegriffen werden kann.
Gruß
Nepumuk

Anzeige
.....fast klar
19.12.2005 11:24:11
Friedrich
Hallo Nepumuk,
zunächst danke für die schnelle Antwort.
Dann ist also Workbook_Open als Standartmodul anzusehen. Hatte aber da so meine Probleme.
Dachte Standartmodul sei definitiv ein "Modul".
Werd das mit dem Array mal probieren. Wenns nicht klappt melde ich mich wieder.
Friedrich
AW: .....fast klar
19.12.2005 11:30:48
Nepumuk
Hallo Friedrich,
Workbook_Open ist kein Modul sondern eine Ereignisroutine die durch das öffnen der Mappe ausgelöst wird. Diese befindet sich in einem Klassenmodul. Denn nur Klassen können Ereignisse verarbeiten. Die deklaration der Variablen muss in einem Standardmodul, die Zuweisung des Wertes an die Variable kann aber durchaus in der Ereignisrotinen erfolgen. Um's anschaulicher zu machen:
' **********************************************************************
' Modul: DieseArbeitsmappe Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Private Sub Workbook_Open()
    meineVariable = "Test"
End Sub

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Public meineVariable As String

Gruß
Nepumuk

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige