Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1052to1056
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
Inhaltsverzeichnis

Code verkürzen / Newbie Fehler

Code verkürzen / Newbie Fehler
24.02.2009 16:56:54
nicobit
Hallo
Zur Erarbeitung meines makros hat mir dieses Forum schon zu beginn den Einstieg erleichtert und heute mittag auch mit einer kleinen Frage, nochmals Danke.
Habe jetzt mal das ganze hochgeladen damit ihr sehen könnt für was eure hilfe wahr... ist ja nichts grossartiges aber Freude hat es schon gemacht als es schlussendlich gefunzt hat.
https://www.herber.de/bbs/user/59736.zip
So auf den ersten Blick, welche Newbie-Fehler/Anzeichen seht ihr im Code?
Habt ihr irgendwelche Tips, wie man den ganzen Code verkürzen, resp. übersichtlicher darstellen könnte?
Oder macht Verkürzen keinen Sinn resp. nur auf Kosten der geschwindigkeit?
Gruss und en schöne Obig, Nicolas

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Code verkürzen / Newbie Fehler
24.02.2009 17:30:01
Daniel
Hi
den Code schau ich mir jetzt nicht im Einzelnen an, aber schlecht ist auf jeden Fall, daß du nicht mit OPTION EXPLICIT arbeitest, dann würden dir solche Fehler wie dieser hier sofort auffallen:

Dim wksCumbustor As Worksheet
Dim wksMaster As Worksheet
Dim index As Variant
Dim qq As Variant
Set wksCombustor = Worksheets("combustor")


dazu auch bitte mal das hier lesen:
http://www.online-excel.de/excel/singsel_vba.php?f=4
du hast ne ganze Reihe von nichtdeklarierten Variablen drin, dafür deklarierst du teilweise welche, die du nicht verwendest.
desweiteren kann man sich solche Schleifen auch sparen:


For i = 1 To 12
wksCombustor.Cells(1, i).Value = wksMakro.Cells(1, i).Value
wksCombustor.Cells(2, i).Value = wksMakro.Cells(2, i).Value
wksCombustor.Cells(3, i).Value = wksMakro.Cells(3, i).Value
Next


das hier reicht und ist schneller


wksCombustor.Cells(1,1).Resize(12,3).Value = wksMakro.Cells(1,1).Resize(12,3).value


oder in anderer Schreibweise


wksCombustor.Range("A1:C12").Value = wksMakro.Range("A1:C12").value


Gruß, Daniel

Anzeige
AW: korrektur
24.02.2009 17:48:15
Daniel
sorry, ich hab beim letzen Beispiel mal wieder Zeilen und Spalten vertauscht, so ist es richtig:
wksCombustor.Cells(1,1).Resize(3,12).Value = wksMakro.Cells(1,1).Resize(3,12).value
oder in anderer Schreibweise
wksCombustor.Range("A1:L3").Value = wksMakro.Range("A1:L3").value
aber ich hoffe, das Prinzip ist klar
AW: korrektur
25.02.2009 08:06:04
nicobit
Hallo Daniel
Habe Option Explicit noch nachträglich eingefügt... und promt einige Schreibfehler gefunden.
Vielen Dank auch für den anderen Hinweis, werde ihn berücksichtigen.
Meistens läuft jetzt das Progrämmli tiptop, doch nach ca. 15 min Arbeiten kommen plötzlich folgende Fehlermeldungen: "Code execution has been interrupted" etwa 3 - 15 mal pro Durchlauf. Wenn ich dann auf Continue drücke läuft es weiter, soweit für mich ersichtlich ohne Fehler. Schauen was Debug gibt: dann springt er in immer wechselnde Zeilen, welche aber korrekt sind.
Bei Neustart von excel ist für kurze Zeit wieder alles in ordnung und dann fängt es wieder an.
An was könnte das liegen? hat jemand ne Ahnung?
Vielen Dank, und en schöne tag! grues Nicolas
Anzeige
AW: unbekannter Fehler
25.02.2009 12:09:09
Daniel
Hi
sorry, der Fehler ist mir bisher noch nicht untergekommen, gib einfach mal
"Code execution has been interrupted" Excel
in Google ein, vielleicht wirst du ja fündig
Gruß, Daniel
Call Sub Problem
25.02.2009 13:22:22
nicobit
https://www.herber.de/bbs/user/59760.zip
Also habe mal deinen Tip berücksichtiget und die verschiedenen Variabeltypen studiert und auch gekenntzeichnet. (hier eine gute Page: http://www.vb-seminar.de/vb_26.htm)
Des weiteren dachte ich, da ja immer wieder das selbe gemacht wird diese Teilcodes in subs zu verpacken und dadurch das ganze übersichtlicher zu gestalten.
Das sieht jetzt so aus wobei im moment nur das Modul1 zu betrachten ist:
https://www.herber.de/bbs/user/59760.zip
Beim durchlaufen des makros kommt jedoch die Fehlermeldung:

Compile error: Sub or Function not defined

In der VBHelp bin ich nicht richtig fündig geworden, nur verwirrt weil da manchmal ein


Debug.Print

zu finden ist, weiss jedoch nicht was das soll.
Hat jemand ein tipp?
Gruss Nicolas
@Daniel: Dankeschön für die Hilfe, "Händeschüttel" :)

Anzeige
AW: Call Sub Problem
25.02.2009 14:47:04
Daniel
Hi
mit "Debug.Print" lassen sich per Makro Werte im Direktfenster ausgeben, so z.B. dieses Makro:
sub Test
Debug.Print "Hallo"
End sub
falls das Direktfenster nicht sichtbar ist, einfach über ANSICHT einblenden.
die Fehlermeldung

"Compile error: Sub or Function not defined" 

lässt sich recht einfach mit diesem Codebeispiel erzeugen:


Sub Makro1()
Call tst
End Sub
Sub test()
End Sub


Gruß, Daniel

AW: Call Sub Problem
27.02.2009 09:20:23
nicobit

Option Explicit
'Worksheets'
Dim wksCombustor As Worksheet, wksCompressor As Worksheet, wksGT_Integration As Worksheet, _
wksTermine As Worksheet, wksMakro As Worksheet
'Letzte Zeilen von Worksheets'
Dim LzWksCombustor As Long, LzWksCompressor As Long, LzWksGT_Integration As Long
'Variabeln'
Dim X_Wks As Worksheet
Dim X_LzWks As Long
\pre>


Sub Initial(X_Wks, X_LzWks)
With X_Wks
'Spaltenbreite'
Columns("A:A").ColumnWidth = 4.5
Columns("B:D").ColumnWidth = 42
Columns("E:J").ColumnWidth = 15
Columns("L:L").ColumnWidth = 15
Columns("K:K").ColumnWidth = 15
'Zeilenhöhe'
Range("1:1").EntireRow.RowHeight = 70
Range("2:3").EntireRow.RowHeight = 40
Range("4:500").EntireRow.RowHeight = 20
'Initialisierung'
With Range(Cells(X_LzWks + 1, 1), Cells(500, 12))
.ClearContents
.Interior.ColorIndex = xlNone
.Font.ColorIndex = 1
End With
End With
End Sub
\pre>


Private Sub Dates(X_Wks, X_LzWks)
Dim jump As Long
Dim i As Long, last As Long
jump = 1
'Earliest and Latest date'
For i = 8 To 10
With X_Wks
.Range(.Cells(4, i), .Cells(X_LzWks, i)).copy
wksMakro.Cells(jump, 14).PasteSpecial Paste:=xlValues, Operation:=xlNone,  _
SkipBlanks:= _
False, Transpose:=False
jump = jump + X_LzWks
End With
Next
With wksMakro
.Range("N1:N500").Sort Key1:=.Columns("N"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=True, Orientation:= _
xlTopToBottom
last = wksMakro.Cells(Rows.Count, 14).End(xlUp).row
If .Cells(1, 14).Value = "" Then
.Cells(1, 10).Value = .Cells(9, 19).Value
Else: .Cells(1, 10).Value = .Cells(1, 14).Value
X_Wks.Cells(1, 10).Value = wksMakro.Cells(1, 10).Value
End If
If .Cells(last, 14).Value = "" Then
.Cells(1, 12).Value = .Cells(10, 19).Value
Else: .Cells(1, 12).Value = .Cells(last, 14).Value
X_Wks.Cells(1, 12).Value = wksMakro.Cells(1, 12).Value
End If
End With
End Sub
\pre>


Private Sub Format(X_Wks, X_LzWks)
Dim index As Variant, Titel As Variant
Dim i As Long
Dim j As Byte
Dim Check As Boolean
With X_Wks
'Titel'
X_Wks.Cells(1, 1).Resize(2, 12).Value = wksMakro.Cells(1, 1).Resize(2, 12).Value 'Headers'
X_Wks.Cells(3, 9).Value = wksMakro.Cells(3, 9).Value
With Range(Cells(1, 1), Cells(4, 12)).Font
.Size = 12
.Bold = True
.Superscript = False
.Underline = False
.Strikethrough = False
.Italic = False
.ColorIndex = 1
End With
Cells(1, 2).Font.Size = 25
Cells(3, 2).Font.Size = 16
Cells(3, 9).Font.Italic = True
'Schrift'
With Range(Cells(4, 1), Cells(X_LzWks, 12)).Font
.Size = 12
.Bold = False
.Superscript = False
.Underline = False
.Strikethrough = False
.Italic = False
.ColorIndex = 1
End With
'Rahmen'
For index = xlDiagonalDown To xlInsideHorizontal
With Range(Cells(4, 1), Cells(500, 12)).Borders(index)
.LineStyle = xlNone
End With
Next
For index = xlEdgeTop To xlInsideHorizontal
With Range(Cells(4, 1), Cells(X_LzWks, 12)).Borders(index)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Next
For index = xlEdgeLeft To xlEdgeRight
With Range(Cells(4, 1), Cells(X_LzWks, 12)).Borders(index)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
Next
For index = xlEdgeLeft To xlEdgeRight
With Range(Cells(4, 8), Cells(X_LzWks, 10)).Borders(index)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
Next
'Füllfarbe'
Range(Cells(4, 1), Cells(X_LzWks, 12)).Interior.ColorIndex = 2
Range(Cells(1, 1), Cells(X_LzWks, 1)).Interior.ColorIndex = 35
Range(Cells(1, 1), Cells(3, 12)).Interior.ColorIndex = 35
For i = 4 To X_LzWks
For j = 8 To 10
If IsEmpty(Cells(i, j)) Then
Cells(i, j).Interior.ColorIndex = 2
Else: Cells(i, j).Interior.ColorIndex = 36
End If
Next
Next
Cells(1, 10).Interior.ColorIndex = 36
Cells(1, 12).Interior.ColorIndex = 36
Check = True
Do
If Cells(3, 2).Value = "" Then
Titel = InputBox("No input for Titel")
Cells(3, 2).Value = "" & Titel
Check = True
End If
Check = False
Loop Until Check = False
End With
End Sub
\pre>


Sub save_WksCombustor()
Set wksMakro = Worksheets("Makro")
Set wksCombustor = Worksheets("Combustor")
LzWksCombustor = wksCombustor.Cells(Rows.Count, 1).End(xlUp).row
wksCombustor.Unprotect
wksMakro.Unprotect
Call Initial(wksCombustor, LzWksCombustor)   'Wks Grundformatierung'
Call Dates(wksCombustor, LzWksCombustor) 'Earliest Date / Latest Date'
Call Format(wksCombustor, LzWksCombustor) 'Wks EndFormatierung'
wksCombustor.Protect
wksMakro.Protect
End Sub
Sub save_WksCompressor()
Set wksMakro = Worksheets("Makro")
Set wksCompressor = Worksheets("Compressor")
LzWksCompressor = wksCompressor.Cells(Rows.Count, 1).End(xlUp).row
wksCompressor.Unprotect
wksMakro.Unprotect
Call Initial(wksCompressor, LzWksCompressor) 'Wks Grundformatierung'
Call Dates(wksCompressor, LzWksCompressor) 'Earliest Date / Latest Date'
Call Format(wksCompressor, LzWksCompressor) 'Wks EndFormatierung'
wksCompressor.Protect
wksMakro.Protect
End Sub
Sub save_WksGT_Integration()
Set wksGT_Integration = Worksheets("GT_Integration")
Set wksMakro = Worksheets("Makro")
LzWksGT_Integration = wksGT_Integration.Cells(Rows.Count, 1).End(xlUp).row
wksGT_Integration.Unprotect
wksMakro.Unprotect
Call Initial(wksGT_Integration, LzWksGT_Integration) 'Wks Grundformatierung'
Call Dates(wksGT_Integration, LzWksGT_Integration) 'Earliest Date / Latest Date'
Call Format(wksGT_Integration, LzWksGT_Integration) 'Wks EndFormatierung'
wksGT_Integration.Protect
wksMakro.Protect


xx


End Sub
Sub edit_wksCombustor()
Set wksCombustor = Worksheets("Combustor")
wksCombustor.Unprotect
End Sub
Sub edit_wksCompressor()
Set wksCompressor = Worksheets("Compressor")
wksCompressor.Unprotect
End Sub
Sub edit_wksGT_Integration()
Set wksGT_Integration = Worksheets("GT_Integration")
wksGT_Integration.Unprotect
End Sub


So jetzt passt... ziemlich peinlicher Fehler hab sicher 20 mal in(i)tial angeschaut und den Tippfehler nicht gesehen, naja jetzt klappts....
Ist das so ok, oder was für gute Tipps wie Daniel's gibts noch?
Danke viel mal! Gruss Nicolas

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige