Hilfsvariablen wollen plötzlich deklariert werden.

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

Betrifft: Hilfsvariablen wollen plötzlich deklariert werden.
von: alex
Geschrieben am: 09.10.2003 15:23:25

Hallo zusammen.

Ich hab ein paar kleine makros geschrieben und dort variablen verwendet die mit

dim variable as ...

deklariert und andere zB.

H = msgbox("...",vbyesno)

Das Programm soll auf mehreren Rechnern laufen. Das tut es leider nicht. Bei einigen Rechnern muss ich das H von oben auf per dim deklarieren.

Alle Rechner verwenden die selbe Office Version,also auch dieselbe Excel Version und auch dieselbe VBA Version.

ich kann das Problem nicht finden.Viellicht könnt Ihr mir weiterhelfen.

Vielen Dank im Vorraus,Gruß Alex.

Bild


Betrifft: AW: Hilfsvariablen wollen plötzlich deklariert werden.
von: PeterW
Geschrieben am: 09.10.2003 15:28:21

Hallo Alex,

im VBA-Editor ist unter Extras - Optionen bei den "zickenden" Rechnern der Haken bei Variablendeklaration erforderlich gesetzt (sollte überall so gesetzt werden und der Code um die Variablendeklartion erweitert werden).

Gruß
Peter


Bild


Betrifft: Um Gottes Willen - nein!!!
von: Michael Scheffler
Geschrieben am: 09.10.2003 15:44:55

Hallo Peter,

es gibt keine zickenden Rechner, erstens sollte "Option Explicit"
überall gemacht werden - über die Gründe können wir hier kleine Exkurse schreiben.

Und zweitens sitzen 90% der Computerprobleme 40 cm vor dem PC:-)

Gruß

Micha


Bild


Betrifft: DOCH!!!
von: PeterW
Geschrieben am: 09.10.2003 15:50:15

Hallo Micha,

genau das mein ich doch, ohne Option Explicit macht man sich das Leben unnötig schwer. (Hab doch geschrieben: sollte überall so gesetzt sein - wie war das mit den 40 cm ? ;-))

Gruß
Peter


Bild


Betrifft: klasse
von: alex
Geschrieben am: 09.10.2003 16:48:43

-vorab : Deklarierung der Variablen (Optionen des Editors ist nicht aktiviert)

1. Die Antworten sind zwar alle schön und gut, helfen mir aber keinen meter weiter.

2. Finde ich es schade,das Leute die evtl. Ahnung von VBA haben mir mit solchen sorry dummen Antworten(v.a. Micha) den Spass an der Sprache versaun. Und ganz davon abgesehen,ob die Antwort nun weiterhilft,oder nicht : wo ist denn der richtige Platz um
die Gründe zu erläutern? Wischiwaschi Programmierung ist nicht mein Ding,aber wenn das Programm (leider tat es das,im Nachhinein gesehen) Makros akzeptiert in denen nicht alle Variablen explizit deklariert wurden und anstelledessen immer auf Varaint verweisst, wozu soll ich mir dann die Mühe der Deklarierung machen?

Also nochmal : wie bekommt man die Makros bei allen Rechnern zum laufen?


Bild


Betrifft: AW: klasse
von: PeterW
Geschrieben am: 09.10.2003 16:59:27

Hallo Alex,

nur mal zwei Gründe.

Vielleicht gelingt es dir, Code von vornherein fehlerfrei zu schreiben, ich hab zumindest immer ein paar Tippfehler drin. Da wird aus lglastrow schnell mal lgladtrow. Wenn ich zu Beginn lgLastRow dimensioniert habe sagt mir der Debugger sofort, wo der Fehler liegt. Davon abgesehen seh ich das schon bei der Eingabe, weil die Schreibweise der dimensionierten Variablen übernommen wird.

Wenn aus der Variablenbezeichnung auch noch hervorgeht, um welchen Typ es sich handelt werden logische Fehler beim Lesen des Codes sofort erkannt. Mit Variant-Variablen kann man sich einen Wolf suchen.

Mir stellt sich die Frage andersrum, warum soll ich mir die Mühe machen bei der Fehlersuche und die relativ einfache Deklaration überspringen. :-)

Gruß
Peter


Bild


Betrifft: AW: klasse
von: alex
Geschrieben am: 09.10.2003 17:21:57

Solche Probleme hatte ich natürlich und ich hab mir auch schon ein,zweimal vor die Stirn geklatscht deswegen, aber nun muß ich wasweissich wieviele Makros umschreiben.Das dauert min. 2 Tage deswegen such ich ja wie ein Wolf nach einer "vernünftigen" Lösung.

Wieso der Code , bzw an die 200 Codes nun am Entwicklungsrechner funktionieren und an manch anderen Rechnern nicht will aber immernoch nicht in mein Kopf rein,trotz ständigem auf die Stirn klatschen.

Das ich dann über schnippische Antworten verärgert bin ist hoffentlich verständlich.
Da ich VBA nun eher durch LBD als durch Programmierkurse gelernt hab, hatte ich das Problem mit der Deklaration nicht im Blickfeld.Mal ganz davon abgesehen das es erst Heute aufgetreten ist.

Eine Lösung des Problems (ohne Codeänderung) git es also nicht?


Bild


Betrifft: AW: klasse
von: PeterW
Geschrieben am: 09.10.2003 17:31:26

Hallo Alex,

das hab ich doch oben schon geschrieben. An den Rechnern, an denen deine Makros nicht funktionieren ist im VBA-Editor unter Extras - Optionen die explizite Variablendeklaration gekennzeichnet. Wenn man dort den Haken rausnehmen würde, was man tunlichst nicht sollte, dann .... ;-)

Gruß
Peter


Bild


Betrifft: AW: klasse
von: alex
Geschrieben am: 09.10.2003 17:36:41

neeeeeeeee
eben das funktioniert ja leider nicht ...

Hab den HAken schon reinundrausgemacht , bis er schwarz wurde. Das interessiert die Makros aber kein bischen.


Bild


Betrifft: AW: klasse
von: PeterW
Geschrieben am: 09.10.2003 17:44:02

Hallo Alex,

ist jetzt ein Stochern im Nebel, vielleicht irgendwelche Verweise, die fehlen? Lade doch mal eine Beispieldatei mit einem nicht funktionierenden Makro auf den Server.

Gruß
Peter


Bild


Betrifft: Code ...
von: alex
Geschrieben am: 09.10.2003 17:50:20

Hier ist eins der kleineren ...


Sub AllIn_TEST_freieEinträge()
Dim sheet As String
AllIn_DBTEST.Show
wohin = AllIn_DBTEST.result
If wohin = 0 Then
MsgBox ("Keine Datenbank ausgewählt")
Unload AllIn_DBTEST
End
End If
If wohin = 1 Then
Sheets("Produktions-Rezepturen-1").Select
sheet = ActiveSheet.name
End If
If wohin = 3 Then
Sheets("Entwicklungs-Rezepturen-1").Select
sheet = ActiveSheet.name
End If
If wohin > 3 Then
Sheets("Entwicklungs-Rezepturen-1").Select
sheet = ActiveSheet.name
wohin = 0
End If
Application.ScreenUpdating = False
weiter1:
Range("h:h,DD:DD").Select
Dim artnr As String
Dim fs4, f4
    
    
With Selection
    Set found = .Find(what:="Freie", lookat:=xlPart)
    If found Is Nothing Then
    
    Set fs4 = CreateObject("Scripting.FileSystemObject")
    Set f4 = fs4.OpenTextFile("c:\Fehler_REZListe_freieEintraege.txt", 8, True)
    f4.write "Keinen Freien Eintrag gefunden." + vbNewLine
    f4.Close
    
    
    End If
    foundfirst = found.Address
    If Not found Is Nothing Then
        Do
           'found.Activate
           If (found.Offset(0, 4) <> 0) Then
                Set fs4 = CreateObject("Scripting.FileSystemObject")
                Set f4 = fs4.OpenTextFile("c:\Fehler_REZListe_freieEintraege.txt", 8, True)
                f4.write "Freien Eintrag mit Preis in Zeile " + Str(found.Row) + "gefunden." + vbNewLine
                f4.Close
                found.Offset(0, 4) = 0
                r = found.Row
                c = found.Column
                artnr = found.Offset(0, -7)
                
                Sheets("Art.Nr.Hilfsblatt").Select
                Range("a1").Select
                'MsgBox (artnr)
                Do Until (ActiveCell = artnr)
                    Selection.Offset(1, 0).Select
                    Loop
                    
                
                
                
                Selection.Offset(0, 16) = r
                Selection.Offset(0, 17) = c
                Sheets(sheet).Select
                
           End If
           
        Set found = .FindNext(found)
        Loop While found.Address <> foundfirst
        Else
        End
        End If
   Call makeNewSheetName(sheet)
    
    For k = 1 To Sheets.Count
        If Sheets(k).name = sheet Then
        Sheets(sheet).Select
        nextline = 0
        GoTo weiter1
        End If
        Next k
    If wohin = 0 Then
    Sheets("Produktions-Rezepturen-1").Select
    sheet = ActiveSheet.name
    nextline = 0
    wohin = 1
    GoTo weiter1
    End If
    
End With
End Sub




Beim Debuggen (F8) meldet sich nun der VBA-Editor mit :

Fehler beim Kompilieren.
Projekt doer Bibliothek nicht gefunden.

in der Zeile : wohin = AllIn_DBTEST.result (also die 2. oder 3. )


Bild


Betrifft: AW: Code ...
von: alex
Geschrieben am: 09.10.2003 17:51:53

achja .. wohin ist mit Public im Formular deklariert.... hier der COde.

Public result As Integer


Private Sub bntAbbruch_Click()
Hide
End Sub



Private Sub bntHilfe_Click()
AllIn_DBTEST_Hilfe.Show
End Sub


Private Sub bntWeiter_Click()
i = 0
If CheckBox1 Then
i = i + 1
End If
If CheckBox2 Then
i = i + 3
End If
result = i
Hide
End Sub



Bild


Betrifft: AW: Code ...
von: Alex
Geschrieben am: 09.10.2003 17:55:55

nun soll ich auch noch das k in

for k = 1 to .... deklarieren??? Das kann aber nicht ernsthaft gemeint sein?!?


Bild


Betrifft: AW: Code ...
von: PeterW
Geschrieben am: 09.10.2003 18:00:56

Hallo Alex,

klar kann das sein, nämlich dann wenn Variablendeklaration erforderlich ist.

Überprüfe mal ob im VBA-Editor unter Extras - Verweise die Verweise auf allen Rechnern identisch sind.

Der Code selber hilft ohne die dazu gehörende Mappe nicht weiter weil wohl kaum jemand aufgrund des Codes eine Mappe nachbauen wird.

Gruß
Peter


Bild


Betrifft: AW: Code ...
von: Alex
Geschrieben am: 09.10.2003 18:06:46

Die Mappe braucht man ja garnicht. Das der Editor einen Feheler ausspuckt kann man auch per copy&paste sehn.

Zu den Verweisen ... die kann ich nicht anwählen,sind grau.Zumindest bei meinem.An die anderen Rechner komm ich leider nicht ran,ist auch schon nach Öffnungszeit,kann ich erst morgen nachfragen. Vielleicht sollten wir das auf morgen verschieben,wenn ich Informationen über 3 oder 4 weitere Testrechner habe.Dann kann ich evtl auch mit ner kleinen Beispielmappe aufwarten.


Bild


Betrifft: AW: Code ...
von: PeterW
Geschrieben am: 09.10.2003 18:23:41

Hallo Alex,

ohne Mappe läßt sich kein Code testen, der auf eine nicht vorhandene Userform zugreifen möchte.

Starte morgen mit einer Beispielmappe einen neuen Thread.

Gruß
Peter


Bild


Betrifft: Hinweis
von: Martin Bolleter
Geschrieben am: 09.10.2003 21:37:23

Hallo ihr beiden

nur als Hinweis: wenn die Option für explicite Variablendeklaration mal gesetzt war, wurde in alle Module am Anfang "Option Explicit" geschrieben. Diese Anweisung erzwingt die Deklaration.
Das Entfernen des Häckchens in den Optionen löscht nun allerdings diese Anweisung(en) nicht automatisch wieder! Das müsste man dann schon von Hand in allen Modulen tun, so man das den will ... :-)

Gruss
Martin


Bild


Betrifft: AW: Hinweis
von: PeterW
Geschrieben am: 09.10.2003 21:51:19

Hallo Martin,

vielen Dank für diesen Hinweis, mir war nicht klar, dass Option Explicit nicht wieder aus dem Code entfernt wird. Wie soll man das auch wissen, wenn man immer MIT dieser Option arbeitet. :-)

Danke nochmals und Gruß
Peter


Bild


Betrifft: AW: Hinweis
von: Guido Palacios
Geschrieben am: 09.10.2003 23:16:27

Hallöchen,

auch eine Ursache des Problems kann die Umgebung sein! Vielleicht sind die Testserver ältere Modelle (NT4, excel97)! Weiss nicht wie es mit der Variablendekl. aussieht aber mit einigen Funktionen wars so!

Aber du kannst dir auch ein Progg schreiben welches alle Makros durchgeht und entsprechen dim anweisungen spezifiziert...!

CYA
Guido


Bild


Betrifft: AW: Hilfsvariablen wollen plötzlich deklariert werden.
von: GerdW
Geschrieben am: 09.10.2003 15:48:33

Wenn du eine Chance haben willst, dass deine Programme stabil laufen,
solltest du immer alle Variablen möglichst genau deklarieren.

Gerd


Bild


Betrifft: AW: Hilfsvariablen wollen plötzlich deklariert werden.
von: Michael Scheffler
Geschrieben am: 10.10.2003 09:57:36

Hallo Alex,

"dumm" oder nicht, das ist hier die Frage. Ich habe VB auch durch learning by doing gelernt. Das sollte einen jedoch nicht davor bewahren, mal die Nase in ein Buch zu stecken oder sich Codebeispiele wie von Hans anzuschauen.

Aber es ist schon gut so, immer schön an der Oberfläche bleiben, beleidigt sein, weiter schlechten Code schreiben. Da bleibt für gute Programmierer doch immer etwas übrig:-)

Gruß

Micha


 Bild

Beiträge aus den Excel-Beispielen zum Thema " zeile ausblenden"