2016-05-09 11 views
2

Ich habe Frage, wie Sie ändern, was ein Benutzerformular anzeigt. Grundsätzlich habe ich ein Makro, wo ein Benutzerformular den Benutzer die Auswahl der Zellen für den Prozess verwenden lassen. Wenn ich das Makro in einem anderen Arbeitsblatt verwende, ist der vorher verwendete Bereich immer noch vorhanden. Wenn zum Beispiel im Blatt1 "A20: A30" ausgewählt wurde und ich dann das gleiche Makro in Blatt2 verwende, haben die Bereichswerte immer noch die Werte von "A20: A30" von Blatt 1 ausgewählt. Ich weiß, dass es ziemlich einfach ist, den Bereich auszuwählen Ich möchte, aber die Person, die ich helfe, möchte, dass der Bereich bei jedem Ausführen des Makros leer ist, damit er nicht erneut zum aktiven Blatt wechseln muss, um den Bereich auszuwählen.So ändern Sie die Werte, die eine UserForm in VBA Excel zeigt

Hier ist ein Beispiel mit Bildern. In der Tabelle "CurvasTC" (Die Schaltfläche "Interpola" zeigt nur das Benutzerformular an) Ich wähle einen Bereich und führe den Prozess durch Klicken auf die Schaltfläche "Ejecutar" aus. Dann, wenn ich auf das Blatt "Volatilidad" gehen und den Prozess ausführen, erscheint das Benutzerformular mit den Referenzen des Blattes TC Ich möchte, dass es leere Werte oder zumindest einen Verweis auf das aktive Blatt zeigt.

Run 1

Run 2

Dies ist der Code für das Benutzerformular:

Public Sub CommandButton1_Click() 

Dim rangoa As Range 
Dim rangob As Range 
Dim rangoc As Range 

Set rangoa = Range(rangox.Value) 
Set rangob = Range(rangoy.Value) 
Set rangoc = Range(rangoxout.Value) 

ventana.Hide 
Run (I_Lineal(rangoa, rangob, rangoc)) 

End Sub 

Private Sub Label1_Click() 

End Sub 

Private Sub Label3_Click() 

End Sub 

Private Sub rangox_BeforeDragOver(Cancel As Boolean, ByVal Data As MSForms.DataObject, ByVal x As stdole.OLE_XPOS_CONTAINER, ByVal y As stdole.OLE_YPOS_CONTAINER, ByVal DragState As MSForms.fmDragState, Effect As MSForms.fmDropEffect, ByVal Shift As Integer) 

End Sub 

Private Sub rangoxout_BeforeDragOver(Cancel As Boolean, ByVal Data As MSForms.DataObject, ByVal x As stdole.OLE_XPOS_CONTAINER, ByVal y As stdole.OLE_YPOS_CONTAINER, ByVal DragState As MSForms.fmDragState, Effect As MSForms.fmDropEffect, ByVal Shift As Integer) 

End Sub 

Private Sub UserForm_Click() 

End Sub 

Der Code für die Interpola Taste ist wirklich einfach nur:

Sub corrermacro() 
    ventana.Show 
End Sub 

Die Benutzerformular, wo Sie den Bereich auswählen, heißt " ventana ".

+0

Bitte teilen Sie den Code für 'Interpola' Tasten. – omegastripes

+0

@omegastripes Der Code für Interpola-Schaltfläche ist nur ventana.show – Anflores

+0

@omegastripes das Benutzerformular in den Bildern heißt "ventana" – Anflores

Antwort

2

Sie verstecken nur das Formular am Ende Ihres Sub. Das macht es invisible aber immer noch da (mit all seinen Inhalten). Wenn Sie möchten, dass es bei der nächsten Initialisierung des Formulars leer ist, dann sollten Sie das Formular unload das Formular: Unload ventana.

Also sollten Sie das am Ende Ihres Sub hinzufügen. Nur wissen, dass alle Daten auf dem Formular nach diesem Befehl nicht mehr verfügbar sind. Daher sollte dieser Befehl der allerletzte Befehl in Ihrem Sub sein:

Public Sub CommandButton1_Click() 

Dim rangoa As Range 
Dim rangob As Range 
Dim rangoc As Range 

Set rangoa = Range(rangox.Value) 
Set rangob = Range(rangoy.Value) 
Set rangoc = Range(rangoxout.Value) 

ventana.Hide 
Run (I_Lineal(rangoa, rangob, rangoc)) 
Unload ventana 

End Sub 
Verwandte Themen