2016-10-21 1 views
0

Ich verwende den folgenden Code, um ein Meldungsfeld zu erstellen, das anzeigt, wenn Zellen A1, A2, A3 ... bis A9 ausgewählt werden, die dann den Text in den Anführungszeichen sowie Text in Zellen V1 (+21) anzeigen , W1 (+22) und X1 (+23) für, wenn zum Beispiel A1 gewählt wird, wenn A2 gewählt wird, wird es die Zeichenkette im folgenden Code sowie Text in den Zellen V2, W2 und X2 und so weiter anzeigen . Ich muss dies für alle 10836-Zeilen tun, aber es scheint, als wären 160 Fälle die Grenze, die diese Methode verwendet. Gibt es einen effizienteren Weg, dies zu tun? Jede Hilfe würde geschätzt werdenWie erstellt man ein Meldungsfeld für mehr als 160 Zeilen (10836), um Text in mehreren Spalten anzuzeigen, abhängig davon, welche Zeile ausgewählt ist?

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
If Target.Count > 1 Then Exit Sub 
If Target.Column = 1 Then 
Select Case Target.Row 
    Case 1, 2, 3, 4, 5, 6, 7, 8, 9 
     MsgBox "Changes : " & Cells(Target.Row, Target.Column + 22) & vbNewLine & " ABC Comments: " & Cells(Target.Row, Target.Column + 23) & vbNewLine & "XYZ Comments: " & Cells(Target.Row, Target.Column + 21), vbInformation, "Comments" 
    Case Else: 
End Select 
End If 
End Sub 
+0

Können Sie verwenden, wenn target.row <10836 dann –

+1

Was @Nathan sagte (ich es vollständig geschrieben haben, aber dann merkte man es schon gestellt hatte). Nebenbei bemerkt - die 'Case'-Anweisung könnte zu' Case 1 To 9 'verkürzt werden, aber Sie brauchen die 'Case'-Anweisung nicht. –

+0

Vielen Dank für die Hilfe, Ihre Antworten lösten mein Problem. bin dankbar. – ThomasTcred

Antwort

1

Ich dachte in die gleiche Richtung wie Darren Bartrup-Cook; hier ist es in voller:

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 

    Dim LastRow As Integer 
    LastRow = 10836 

    If Target.Count > 1 Then Exit Sub 
    If Target.Column = 1 Then 

    Select Case Target.Row 
     Case 1 To LastRow 
      MsgBox "Changes : " & Cells(Target.Row, Target.Column + 22) & vbNewLine & " ABC Comments: " & Cells(Target.Row, Target.Column + 23) & vbNewLine & "XYZ Comments: " & Cells(Target.Row, Target.Column + 21), vbInformation, "Comments" 
     Case Else: 
    End Select 
    End If 

    End Sub 
0

Ihr Code war fast da. Statt einer Case-Anweisung würde ich eine IF-Anweisung empfehlen.

' Event fired when the user changes the selected cells. 
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 

    ' Has user selected a single cell in row A, between 1 to A10836? 
    If Target.Cells.Count = 1 And Target.Column = 1 And Target.Row <= 10836 Then 

     MsgBox "Changes: " & Cells(Target.Row, 23) & vbCrLf & _ 
       "ABC Comments: " & Cells(Target.Row, 24) & vbCrLf & _ 
       "XYZ Comments: " & Cells(Target.Row, 22) & vbCrLf 
    End If 
End Sub 
+0

Schätzen Sie die Rückmeldung, ist dies, weil die IF-Anweisung erfordern weniger Verarbeitung auf Excel-Teil? Meine Datei wird so groß wie sie ist und ich versuche den Code so zu begrenzen, dass es nicht lange dauert, ihn zu laden. Danke noch einmal! – ThomasTcred

+0

Teilweise. Definitiv der Meinung, dass weniger Code mehr ist, wenn es um Code geht. Aber auch; IF-Anweisungen sind für einfache Auswahlen konzipiert. * IF Kettle.Switch = An DANN Water.Heat = True *. CASE-Anweisungen funktionieren besser mit einer Reihe von Werten. * SELECT Toaster.Setting CASE SettingLow: Toaster.Heat = 25% CASE EinstellungMedium: Toaster.Heat = 50% CASE SettingHigh: Toaster.Heat = 100% *. In Ihrem Fall ist die Wahl einfach. Hat der Benutzer eine "Aktion" -Zelle ausgewählt oder nicht? –

Verwandte Themen