2016-08-09 15 views
0

sehr neu zu Excel VBA und haben an einer Übung zum Erstellen eines Bestellformulars mit einem Benutzerformular erstellt.Zeile Funktion Mathematik ClearContents - Excel VBA

Beim Versuch, Zeilen anhand einiger Variablen zu löschen, ist ein Problem aufgetreten.

Ich habe eine Schaltfläche, um die Zeile zu löschen, die mit dem folgenden Code zu dem Blatt hinzugefügt, gerade:

Private Sub RemovePrevious_Click() 

'Removes last line of PO 

If LineItemTotal > 1 Then 

Rows(LineItemTotal + POrowstart - 1).SpecialCells(xlCellTypeConstants).ClearContents 

End If 

End Sub 

LineItemTotal ein Bereich auf dem Blatt, das zunimmt, wenn neue Zeilen hinzugefügt werden. Es ist öffentlich mit POrowstart am Anfang der Userform erklärt:

Private LineItemTotal As Integer 
Private POrowstart As Integer 

Sie werden dann in einem anderen Teil zuzugeordnet:

LineItemTotal = Range("LineItemTotal") 
POrowstart = 10 

Das Problem ist, dass bei der Verwendung der Taste der REMOVEPREVIOUS Unter laufen, Die Mathematik addiert sich nicht. Wenn LineItemTotal beispielsweise 3 ist, sollte Zeile 12 (die richtige Zeile) gelöscht werden, stattdessen wird Zeile 11 gelöscht. Wenn Sie die Zeile erneut drücken (LineItemTotal ist jetzt 2, also sollte 11 gelöscht werden), wird der Fehler 'no cells' ausgegeben wurden gefunden, als ob es 11 löscht, aber es hat dies bereits fälschlicherweise gelöscht.

Ich habe SpecialCells im Code, da es Formeln in der Zeile gibt, die ich behalten möchte.

Danke für jede Hilfe mit diesem.

+1

Ich kann Ihnen einen kleinen, aber sehr wirkungsvollen Ratschlag geben: Zeichnen Sie ein MACRO auf, in dem Sie tun, was Sie brauchen (zB Löschen ausgewählter Zellen), beenden Sie die Aufnahme und kopieren Sie dann den generierten Code in Ihren VBA (möglicherweise müssen Sie etwas tun) Anpassungen obwohl). So finde ich den Weg, viele Dinge in VBA zu erledigen. – FDavidov

+0

Der einfachste Weg, dies zu debuggen, besteht darin, das lokale Fenster im vbexplorer zu verwenden und zu beobachten, wie sich die Werte für die Variablen mit jedem Schritt Ihres Codes ändern. Drücken Sie F8, um eine einzelne Zeile auszuführen. Ansicht> Lokalfenster, um Einheimische anzuzeigen. Genießen! – User632716

+0

Danke, beides! Wirklich guter Rat, aber noch immer nicht zur Wurzel des Problems gekommen, wenn du noch helfen kannst? Der Code funktioniert, wenn ich die Variablen innerhalb meines Subs deklariere und setze, aber nicht, wenn ich allgemeine Deklarationen deklariere und sie in einem anderen Sub setze, scheint also etwas mit den Variablen und dem Umfang zu tun zu haben? Und Tom Preston Ich kann nicht scheinen, in diesen Code mit dem Debugger zu gehen, es springt einfach zu einem anderen Sub! Danke nochmal –

Antwort

0

Überprüfen Sie Ihre Variablen doppelt, da sie auf Modulebene deklariert sind und möglicherweise einen anderen Wert haben als erwartet. Im Allgemeinen ist es eine gute Idee, Variablen auf Modulebene zu vermeiden und sie auf der niedrigsten Ebene zu deklarieren, die VBA anbietet: ROutine-Level. Wenn Sie Werte an eine andere Routine übergeben müssen, geben Sie diese Routineargumente an und übergeben Sie die Werte als Argumente.

+0

Dank JKpieterse, gibt es eine Möglichkeit, Variablen zwischen Subs zu übergeben, ohne das ganze Sub aufzurufen? I.e. Ich möchte nur LineItemTotal und POrowstart in der ersten Sub festlegen und dann diese Werte in der anderen Sub. Es würde jedoch nicht funktionieren, beide Subs miteinander zu verbinden. Danke noch einmal. –

+0

Haben Sie versucht, den Code durchzugehen und die Werte Ihrer Variablen zu betrachten? (Maus über sie) – jkpieterse