VBA Prozedur Problem

Diskutiere VBA Prozedur Problem im Developer Network Forum im Bereich Hardware & Software Forum; Hallo, ich muss gerade mit VBA arbeiten. Aber ich versteh das nicht ganz mit den Prozeduren... Ich will einfach das Unterprogramm...
  • VBA Prozedur Problem Beitrag #1
N

Naruma

Bekanntes Mitglied
Dabei seit
31.08.2007
Beiträge
80
Reaktionspunkte
0
Hallo,

ich muss gerade mit VBA arbeiten.
Aber ich versteh das nicht ganz mit den Prozeduren...

Ich will einfach das Unterprogramm "BlattPrüfen" im Hauptprogramm "Zusammenfassen" aufrufen.
Hab es erst mit einer Funktion probiert, ging aber nicht. Wenn ich alles ins Hauptprogramm schreibe funktioniert es wunderbar...

Ich beschäftige mich erst seit gestern mit VBA...
Wundert euch nicht wenn meine Frage wahrscheinlich saublöd ist :wah:

Hier mein Code:

Sub Zusammenfassen()
Dim Zeile1&, Zeile2&, Zeile3&, letzteZ&
'Prüfen ob Tabellenblatt 'Zusammenfassung' vorhanden ist'
BlattPrüfen
ActiveSheet.Move Before:=Worksheets(1)
'Von Blatt 1 bis Blatt 13 zusammenfassen'
For i = 1 To 12
With Worksheets(i)
letzteZ = .Cells(Rows.Count, 5).End(xlUp).Row
Zeile1 = Worksheets("Zusammenfassung").Cells(Rows.Count, 5).End(xlUp).Row + 1
.Range("B3:B" & letzteZ).Copy Worksheets("Zusammenfassung").Range("A" & Zeile)
Zeile2 = Worksheets("Zusammenfassung").Cells(Rows.Count, 5).End(xlUp).Row + 1
.Range("C3:C" & letzteZ).Copy Worksheets("Zusammenfassung").Range("B" & Zeile)
Zeile3 = Worksheets("Zusammenfassung").Cells(Rows.Count, 5).End(xlUp).Row + 1
.Range("G3:G" & letzteZ).Copy Worksheets("Zusammenfassung").Range("C" & Zeile)
End With
Next
End Sub

Public Sub BlattPrüfen()
If Worksheet.Name = "Zusammenfassung" Then
Application.DisplayAlerts = False
Worksheets("Zusammenfassung").Delete
Application.DisplayAlerts = True
Worksheets.Add.Name = "Zusammenfassung"
Else
Worksheets.Add.Name = "Zusammenfassung"
End If
End Sub
 
  • VBA Prozedur Problem Beitrag #2
T

TrµMAn

Bekanntes Mitglied
Dabei seit
23.10.2006
Beiträge
4.882
Reaktionspunkte
2
Ort
Wuppertal
hab zwar von VBA keine Ahnung, würde aber sagen, dass du dem BlattPrüfen() dein Object als Parameter übergeben musst
 
  • VBA Prozedur Problem Beitrag #3
P

PyroDragonfly

Bekanntes Mitglied
Dabei seit
24.09.2009
Beiträge
410
Reaktionspunkte
0
ich hab von vba auch keinen plan, aber wird eine funktion nicht immer mit BlattPrüfen() aufgerufen?

und das mit dem blatt übergeben klingt auf jeden fall schonmal logisch, weil die variable worksheet gilt ja nur in der zusammenfassen-funktion
 
  • VBA Prozedur Problem Beitrag #4
N

Naruma

Bekanntes Mitglied
Dabei seit
31.08.2007
Beiträge
80
Reaktionspunkte
0
ich hab alles probiert und überall bei google gesucht, ich find das Problem nicht. Wahrscheinlich denk ich einfach falsch
 
  • VBA Prozedur Problem Beitrag #5
P

PyroDragonfly

Bekanntes Mitglied
Dabei seit
24.09.2009
Beiträge
410
Reaktionspunkte
0
hm... hast du schonmal debuggt? dann müsstest du ja finden, ab wo er nichtmehr weiter geht bz w nichtmehr das macht, was er soll... geht er in die funktion? macht er da das richtige?

ich nehm mal an, dass du entweder einen zeiger auf worksheet machen musst (wenn das in vba möglich ist, ka oO) oder einfach das, was er in der f unktion macht irgendwie wieder als rückgabewert an die aufrufende funktion zurückgeben....
 
  • VBA Prozedur Problem Beitrag #6
N

Naruma

Bekanntes Mitglied
Dabei seit
31.08.2007
Beiträge
80
Reaktionspunkte
0
Ich glaub es liegt hier an dem Abschnitt. Hier springt er raus und bringt den Fehler, dass ein Objekt fehlen würde:

If Worksheet.Name = "Zusammenfassung" Then
 
  • VBA Prozedur Problem Beitrag #7
T

TrµMAn

Bekanntes Mitglied
Dabei seit
23.10.2006
Beiträge
4.882
Reaktionspunkte
2
Ort
Wuppertal
wie wir schon vermutet haben wird wohl Worksheet in dem Kontext nicht existieren.
 
  • VBA Prozedur Problem Beitrag #8
N

Naruma

Bekanntes Mitglied
Dabei seit
31.08.2007
Beiträge
80
Reaktionspunkte
0
Aber wie könnte es sonst funktionieren?:wah:
 
  • VBA Prozedur Problem Beitrag #9
P

PyroDragonfly

Bekanntes Mitglied
Dabei seit
24.09.2009
Beiträge
410
Reaktionspunkte
0
wo ist worksheet eigentlich deklariert?
 
  • VBA Prozedur Problem Beitrag #10
N

Naruma

Bekanntes Mitglied
Dabei seit
31.08.2007
Beiträge
80
Reaktionspunkte
0
Wie deklariert?
 
  • VBA Prozedur Problem Beitrag #11
A

Airfighter76

Bekanntes Mitglied
Dabei seit
01.04.2009
Beiträge
268
Reaktionspunkte
0
Naja in C++ musst du jede Variable erst Deklarieren, damit sie verwendbar ist, das müsste auch in VBA so sein. D.h. du musst bevor du worksheet benutzen kannst sie deklarieren so z.b.

Code:
int worksheet = 0;
 
  • VBA Prozedur Problem Beitrag #12
N

Naruma

Bekanntes Mitglied
Dabei seit
31.08.2007
Beiträge
80
Reaktionspunkte
0
achso meinst du das. Worksheet muss man nicht deklarieren. Ist ne Klasse.
 
  • VBA Prozedur Problem Beitrag #13
P

PyroDragonfly

Bekanntes Mitglied
Dabei seit
24.09.2009
Beiträge
410
Reaktionspunkte
0
und wo ist die klasse? ist sie public oder private? (müsste es doch auch in vb geben, oder?)
 
  • VBA Prozedur Problem Beitrag #14
N

Naruma

Bekanntes Mitglied
Dabei seit
31.08.2007
Beiträge
80
Reaktionspunkte
0
Du musst es einfach nicht deklarieren^^

So funktioniert es, aber er prüft halt nicht ob das Blatt schon vorhanden ist und das ist extrem wichtig:

Sub Zusammenfassen()
Dim Zeile1&, Zeile2&, Zeile3&, letzteZ&
'Prüfen ob Tabellenblatt 'Zusammenfassung' vorhanden ist'
Application.DisplayAlerts = False
Worksheets("Zusammenfassung").Delete
Application.DisplayAlerts = True
Worksheets.Add.Name = "Zusammenfassung"
ActiveSheet.Move Before:=Worksheets(1)
'Von Blatt 1 bis Blatt 13 zusammenfassen'
For i = 1 To 12
With Worksheets(i)
letzteZ = .Cells(Rows.Count, 1).End(xlUp).Row
Zeile1 = Worksheets("Zusammenfassung").Cells(Rows.Count, 1).End(xlUp).Row + 1
.Range("B3:B" & letzteZ).Copy Worksheets("Zusammenfassung").Range("A" & Zeile1)
Zeile2 = Worksheets("Zusammenfassung").Cells(Rows.Count, 1).End(xlUp).Row + 1
.Range("C3:C" & letzteZ).Copy Worksheets("Zusammenfassung").Range("B" & Zeile2)
Zeile3 = Worksheets("Zusammenfassung").Cells(Rows.Count, 1).End(xlUp).Row + 1
.Range("G3:G" & letzteZ).Copy Worksheets("Zusammenfassung").Range("C" & Zeile3)
End With
Next
End Sub
 
  • VBA Prozedur Problem Beitrag #15
N

Naruma

Bekanntes Mitglied
Dabei seit
31.08.2007
Beiträge
80
Reaktionspunkte
0
Naja ich hab es jetzt anders gelöst.

So funktioniert es, danke für die Hilfe ;)

Sub Zusammenfassen()
Dim Zeile1&, Zeile2&, Zeile3&, letzteZ&
'Prüfen ob Tabellenblatt 'Zusammenfassung' vorhanden ist'
If MsgBox("Wurde das Makro schon einmal ausgeführt?", vbYesNo) = vbYes Then
Application.DisplayAlerts = False
Worksheets("Zusammenfassung").Delete
Application.DisplayAlerts = True
Worksheets.Add.Name = "Zusammenfassung"
Else
Worksheets.Add.Name = "Zusammenfassung"
End If
ActiveSheet.Move Before:=Worksheets(1)
'Von Blatt 1 bis Blatt 13 zusammenfassen'
For i = 1 To 13
With Worksheets(i)
letzteZ = .Cells(Rows.Count, 2).End(xlUp).Row
Zeile1 = Worksheets("Zusammenfassung").Cells(Rows.Count, 1).End(xlUp).Row + 1
.Range("B3:B" & letzteZ).Copy Worksheets("Zusammenfassung").Range("A" & Zeile1)
Zeile2 = Worksheets("Zusammenfassung").Cells(Rows.Count, 2).End(xlUp).Row + 1
.Range("C3:C" & letzteZ).Copy Worksheets("Zusammenfassung").Range("B" & Zeile2)
Zeile3 = Worksheets("Zusammenfassung").Cells(Rows.Count, 3).End(xlUp).Row + 1
.Range("G3:G" & letzteZ).Copy Worksheets("Zusammenfassung").Range("C" & Zeile3)
End With
Next
End Sub
 
Thema:

VBA Prozedur Problem

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.180
Beiträge
1.579.174
Mitglieder
55.879
Neuestes Mitglied
stonetreck
Oben