Variablen beim öffnen befüllen

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
UserForm MsgBox


Excel-Version: 9.0 (Office 2000)
nach unten

Betrifft: Variablen beim öffnen befüllen
von: Thomas Wolpert
Geschrieben am: 21.06.2002 - 10:17:42

Hallo,
Meine Recherche im Archiv mir zwar schon viel weitergeholfen, aber bei meinem folgenden Problem komme ich leider nicht weiter. Ich möchte folgendes tun:
Beim Start meiner Mappe soll ein Code ablaufen, der automatisch eine mehrdimensionale Variable rs(20) aus einem Tabellenblatt "Stamm" befüllt. Diese Variablen sollten dann während der Arbeit im Tabellenblatt "Formular" ständig zur Verfügung stehen und mir , wenn ich im Formular etwas eintrage in einer MSGBox den entsprechenden Wert ausgeben.

Leider kann ich die Variablen rs(20) nicht als public definieren.

Hat jemand eine Idee? Das selbständige Ausführen der Makros würde ich entweder über den Makronamen "autoexec" oder über "private sub workbook_open()" lösen. Auch wie ich einen Code automatisch nach Eingabe starte habe ich im Archiv gefunden. Aber wie die böse Variable ihr Gedächtnis behält, da komm ich nicht drauf.
Wäre super, wenn jemand 'ne Idee hätte.
Gruß
Thomas


nach oben   nach unten

Re: Variablen beim öffnen befüllen
von: Rainer
Geschrieben am: 21.06.2002 - 12:20:55

Lieber Thomas!

Definiere die Variable in einem normalen Modulblatt am Beginn des Moduls außerhalb einer Sub oder einer Funktion; ob DIM rs(20) as ... oder PRIVAT, STATIC, GLOBAL ... (siehe in der Hilfe unter 'Gültigkeit von Variablen' nach), musst du dann selbst entscheiden). Das Befüllen der Variable würde ich in der Workbook_Open() machen.

Lieben Gruß
Rainer


nach oben   nach unten

Re: Variablen beim öffnen befüllen
von: Thomas Wolpert
Geschrieben am: 21.06.2002 - 12:43:59

Hallo Rainer,

ich habe unter Modul1 jetzt folgenden Code:
Dim x, zeile
Dim rs(36)

Private Sub workbook_open()
Sheets("Stamm").Activate
For x = 0 To 20
rs(x) = Cells(x + 3, 2)
Next x
Sheets("Formular").Activate
End Sub

Ich hoffe hier liest er ein, wobei ich nicht sehe, daß das Sheet "Stamm" aktiviert ist.
Auf jeden Fall ist er nach dem öffnen im "Formular".
hier habe ich folgenden Code:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

If Not Intersect(Target, Range("c10:C77", "AG10:AG77")) Is Nothing Then
ActiveCell.Offset(-1, 0).Activate
zelle = ActiveCell.Address
x = ActiveCell.Value
MsgBox ("aktive Zelle: " & zelle & "/" & x & "/" & rs(x))

'Load UserForm1 das kommt später noch
'UserForm1.Show

End If
End Sub

Wenn ich jetzt unter C15 eine Zahl eingebe, kommt "Fehler beim Kompilieren: Sub oder Function nicht definiert" und meine rs(x) ist markiert.

Hast Du bitte noch eine Idee?

Viele Grüße
Thomas

P.S.: Wie machen das manche, daß in ihrem Code die Systemwerte blau sind?



nach oben   nach unten

Re: Variablen beim öffnen befüllen
von: Rainer
Geschrieben am: 21.06.2002 - 16:10:53

Lieber Thomas!

Beachte Folgendes:
Der Workbook_Open() Code darf nicht in einem 'normalen' Modulblatt sein, sonst wird er nicht erkannt - also auch nicht ausgeführt. Wechsle in den VBA-Editor und klicke im Projekt-Fenster doppelt auf 'DieseArbeitsmappe'. Dort gib den Workbook_Open() Code ein.
Für die Worksheet_Change()-Ereignisprozedur klickst du doppelt auf gewünschte Tabelle, zB 'Tabelle1 (Formular)'.
Die Variablendekleration schließlich in ein normales Modul.


' In DieseArbeitsmappe
Option Explicit

Private Sub workbook_open()

Dim As Integer

    For x = 0 To 20
        rs(x) = Sheets("Stamm").Cells(x + 3, 2)
    Next x
    Sheets("Formular").Activate
    ' Wenn du in das Tabellenblatt auch wechseln willst, verwend statt .Activate  .Select 
    
    'Damit siehst du, ob der Array richtig eingelesen ist (0=1. Eintrag, 20 der letzte, also 21 Einträge!
    MsgBox rs(0)
    MsgBox rs(20)
    
End Sub

'In Tabelle2(Formular)
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim zelle
Dim x

If Not Intersect(Target, Range("c10:C77", "AG10:AG77")) Is Nothing Then
ActiveCell.Offset(-1, 0).Activate
zelle = Target.Address
x = Target.Value
MsgBox ("aktive Zelle: " & zelle & "/" & x & "/" & rs(x))

'Load UserForm1 das kommt später noch
'UserForm1.Show

End If
End Sub


'In Modul
Option Explicit

Global rs(20)

Ich habe den Worksheet_Change()-Code kaum geändert, da ich nicht weiß, welche Daten du darin stehen hast. So funktioniert es aber bei mir.


Ne Kleinigkeit: du lässt nur 21 Einträge einlesen, dein Array hat aber Platz für 37 Einträge.

Liebe Grüße
Rainer

P.S.:
Den formatierten Code kopiert man zwischen
~begin~
... Code ...
~end~

nach oben   nach unten

Super es klappt
von: Thomas Wolpert
Geschrieben am: 21.06.2002 - 16:45:59

Hallo Rainer,
Dein Vorschlag ist super, es hat funktioniert.
Danke,danke, danke
Und die Idee mit dem
 rs(x) = Sheets("Stamm").Cells(x + 3, 2)

ist mir lieber als meine Lösung.
1000 Dank, ich hoffe ich kann mal was zurückgeben.

Schönes Wochenende
Thomas


 nach oben

Beiträge aus den Excel-Beispielen zum Thema "Variablen beim öffnen befüllen"