Forums Neueste Beiträge
 

Beim ersten mal wird der MA nicht geschrieben

27/04/2010 - 19:52 von Daniel Frei | Report spam
Hallo zusammen

nach einigen Versuchen gelange ich nun mit meinem Problem(chen) doch an
euch. Ich habe ein VBA Code welcher Zeit und Mitarbeiter in das
entsprechende Ziehlsheet schreiben soll. Dies klappt auch super, nur ein
kleiner Haken hat das ganze. Öffne ich die Datei und erfassen den ersten
Mitarbeiter, so wird nur die Zeit eingetragen. Der Mitarbeiter wird erst
beim zweiten mal erfassen geschrieben. Sobald ich das zweite mal mit
erfassen weitermache dann klappt alles so wie's soll. Ich hab's schon mal
mit "Calculate" versucht, doch ohne Erfolg. Um das ganze mal zu zeigen habe
ich unten den gesamten Code eingefügt. Ich hoffe Ihr könnt den Fehler
aufdecken.
Für eure Hilfe danke ich schon mal im Voraus.
Gruss Daniel


*********************************
Nur wer fragt kommt im Leben weiter.
Ein kluger Mann macht nicht alle Fehler selbst. Er gibt auch anderen eine
Chance. --
"Winston Churchill"
_______________________
Win 7
Office 2007 Enterprise

Hier der Code der an sich gut klappt, bis auf den "Fehler"

Option Explicit

Dim ZielBlatt As Variant
Dim MA(1 To 40) As Variant
Dim Stunden, Ferien As Variant ' Variablen der Eingabefelder
Dim Monat As Byte
Dim FERow As Long
Dim FERow1 As Long
Dim ErsteZeile As Integer

Sub EingabeVerarbeitenNEU()
Dim M, I As Long, J As Long

Sheets("Erfassen").Select
Cells(11, 2).Select

' Daten Erfassen
Monat = Cells(16, 27).Value
Stunden = Cells(11, 2).Value
Ferien = Cells(13, 2).Value

'MA war nicht deklariert, in M umbenannt
'MA = Cells(44, 28).Value
M = Cells(44, 28).Value

If Stunden = "" Then
MsgBox "Bitte geben Sie die Stunden ein!"
End If

'Monatsfehler abfangen:
If Monat < 1 Or Monat > 12 Then
MsgBox "Monat ist ungültig! " & Monat
Exit Sub
End If

' Monatseingabe Erfassen
ZielBlatt = MonthName(Monat)

' Hier wird der Monat für die MsgBox Geschrieben
Sheets("Erfassen").Cells(2, 27).Value = Monat

' Auswahl des Monats in MsgBox
M = MA(M)

' Mitarbeiter Erfassen
I = 0
For J = 4 To 43
I = I + 1
MA(I) = Cells(J, 29).Value
Next

Dim Eingabewert As Byte

Eingabewert = MsgBox("Wollen Sie den Monat" & " " &
Sheets("Erfassen").Range("AB2") & " " & vbNewLine & _
"und den Mitarbeiter" & " " & Sheets("Erfassen").Range("AD2") & " " & "?",
vbYesNoCancel)

If Eingabewert = vbNo Then
Exit Sub

ElseIf Eingabewert = vbCancel Then
Exit Sub

ElseIf Eingabewert = vbYes Then

End If

' Ab hier werden die Daten eingegeben
Sheets("" & ZielBlatt).Activate
Range("A65536").Activate
Selection.End(xlUp).Select
ActiveCell.Offset(1, 0).Activate
ErsteZeile = ActiveCell.Row

' Mitarbeiter und Stunden ins jeweilige Monatssheet eintragen
Sheets(ZielBlatt).Cells(ErsteZeile, 1).Value = M
Sheets(ZielBlatt).Cells(ErsteZeile, 2).Value = Stunden
Sheets(ZielBlatt).Cells(ErsteZeile, 5).Value = Ferien

' Löschen der Stunden
Sheets("Erfassen").Activate
' Cells(11, 2).ClearContents

' Löschen der Ferien
Sheets("Erfassen").Activate
'Cells(13, 2).ClearContents

End Sub
 

Lesen sie die antworten

#1 Andreas Killer
28/04/2010 - 09:15 | Warnen spam
On 27 Apr., 19:52, "Daniel Frei" wrote:

euch. Ich habe ein VBA Code welcher Zeit und Mitarbeiter in das
entsprechende Ziehlsheet schreiben soll. Dies klappt auch super, nur ein
kleiner Haken hat das ganze. Öffne ich die Datei und erfassen den ersten
Mitarbeiter, so wird nur die Zeit eingetragen. Der Mitarbeiter wird erst
beim zweiten mal erfassen geschrieben. Sobald ich das zweite mal mit


Typischer Initialisierungsfehler, was also ist beim 2ten Mal anders
als beim ersten Mal?

Dim MA(1 To 40) As Variant


...
Sub EingabeVerarbeitenNEU()
  Dim M, I As Long, J As Long


...
  'MA war nicht deklariert, in M umbenannt
  'MA = Cells(44, 28).Value
  M = Cells(44, 28).Value


Zwischenfrage: Was denkst Du was passiert wenn Cells(44, 28) leer ist
oder "x" enthàlt? M ist ja ein Variant und kann daher alles nur
denkbar mögliche enthalten!

  ' Auswahl des Monats in MsgBox
  M = MA(M)


Hier liegt der Fehler. MA wird nirgends initialisiert, d.h. alle
Felder in MA sind Empty weil MA ein array of variant ist. Daher ist M
nach dieser Zeile auch Empty, egal welchen Wert M vorher hatte.

  ' Mitarbeiter Erfassen
  I = 0
  For J = 4 To 43
    I = I + 1
    MA(I) = Cells(J, 29).Value
  Next


Hier wird nun MA initialisiert und da MA eine globale Variable ist
bleibt der Inhalt zwischen den Aufrufen der Sub erhalten. Deswegen
geht's beim 2ten Mal.

   Range("A65536").Activate
   Selection.End(xlUp).Select
    ActiveCell.Offset(1, 0).Activate
    ErsteZeile = ActiveCell.Row


Wie ich sehe schlàgst Du die gut gemeinten Ratschlàge (nicht mit
Select,Selection,ActiveCell arbeiten) aus. Naja, da wirst Du schon
früher oder spàter noch mal drüber stolpern. .-)

Andreas.

Ähnliche fragen