2016-06-08 22 views
0

Ich habe derzeit 3 ​​Blätter: Input, Process, Output und ein Makro, das Werte auf dem Eingabeblatt und verschiedene speichert auf dem Prozessblatt verwendet. Das Problem ist, wenn der Benutzer eine Senden-Schaltfläche drückt, die mit dem Makro auf der Eingabeseite verbunden ist, wechselt das Blatt zum Prozessblatt, bevor das Ausgabeblatt angezeigt wird. Ich verstehe, dass dies, weil diese Code-Zeile ist:Worksheet.Select Switching Screens Excel VBA

Worksheets("Process").Select 

Allerdings, wenn ich es aus dem Makro alles entfernen geht wahnsinnig außer Reichweite. Gibt es eine Möglichkeit, ein Blatt auszuwählen, ohne es tatsächlich visuell zu betrachten? Ich brauche das Makro, um sein Ding zu machen und dann einfach das Ausgabeblatt anzuzeigen. Danke im Voraus!

+0

See ändert [Wie in Excel mit VBA klicken, um zu vermeiden, Makros] (http://stackoverflow.com/questions/10714251/how-to-avoid-using -select-in-excel-vba-Makros) für Methoden, die sich davon befreien, auf select zu setzen und zu aktivieren, um Ihre Ziele zu erreichen. – Jeeped

Antwort

1

Da @Jeeped angegeben und referenziert wird, vermeiden Sie die Verwendung von Select und Activate, außerdem ist es sicherer, Referenzen zu qualifizieren.

Zum Beispiel können Sie Range("A1").Value verwenden, um einen Wert der Zelle A1 im aktuell aktiven Arbeitsblatt zu erhalten, aber was ist, wenn der Benutzer dieses Blatt zu der Zeit nicht aktiv hatte oder ein anderer Proc die Ansicht verschoben hatte? Sie könnten den Wert von Zelle A1 von möglicherweise jedem Arbeitsblatt abrufen.

Es wäre am besten, einen Verweis auf das Arbeitsblatt zu erstellen und dann alle Ihre Arbeit zu senden, auf diese Weise müssen Sie das aktive Arbeitsblatt nicht ändern, und es gibt keine Zweideutigkeiten darüber, woher die Bereichswerte stammen.

Zum Beispiel: -

Option Explicit 
Dim WkSht_I As Worksheet 'Input 
Dim WkSht_P As Worksheet 'Process 
Dim WkSht_O As Worksheet 'Output 

Public Sub Sample() 
Set WkSht_I = ThisWorkbook.Worksheets("Input") 
Set WkSht_P = ThisWorkbook.Worksheets("Process") 
Set WkSht_O = ThisWorkbook.Worksheets("Output") 

MsgBox "Input A1 = " & WkSht_I.Range("A1").Value 
MsgBox "Process A1 = " & WkSht_P.Range("A1").Value 
MsgBox "Output A1 = " & WkSht_O.Range("A1").Value 

Set WkSht_O = Nothing 
Set WkSht_P = Nothing 
Set WkSht_I = Nothing 
End Sub 

Konvertieren Sie Ihre Verfahren zu dieser Methode sollte sicherer und klarer sein, und Sie können das aktive Blatt setzen nur einmal für sie Inhalt zu zeigen, während die anderen oder an denen gearbeitet wird.

0

@ Garys Methode ist die beste Methode, wenn Sie mit mehreren Arbeitsblättern arbeiten.

Wenn Sie mit nur zwei Blätter arbeiten, (unter Berücksichtigung Sie Active und Zielblatt haben) Ich

With Worksheets("Process") 
    Debug.Print .Range("A1") 
    Debug.Print Range("A1") 
End With 

Hinweis empfehlen werde „“ vor der Reichweite.

Die "." zeigt an, dass es einen Teil Mit

Mit anderen Worten, ist .Range ("A1") wie Arbeitsblatt ("Prozess"). Range ("A1")

Weil zweiten Bereich ("A1") hat keine "." es ist die gleiche wie ActiveSheet.Range („B1“) es ist auch das Innere des With-End

Wenn die Active Prozess ist Dann wird der aus Put- wird

Aber wenn man gleich sein Wählen Sie ein anderes Arbeitsblatt als Prozess, da sich das aktive Blatt geändert hat, wird die Ausgabe anders sein.

wird diese avoide Select verwendet, die den Active