Die Anwendung, die ich programmiere, könnte von einem Rand profitieren, wie diejenigen, die bei der Auswahl eines Bereichs induziert werden. Ich kenne den offiziellen Microsoft-Namen für den Grenztyp nicht, aber es sieht aus wie auffällige, blinkende, zwielichtige Striche. Es würde dem Benutzer helfen, zu wissen (oder sich daran zu erinnern, nachdem er von einem Kollegen unterbrochen wurde), mit welcher Zellrange er arbeiten soll. Es wäre mir peinlich, zuzugeben, wie viel Zeit ich, glaube ich, damit verbracht habe, diese Grenze zu erforschen und zu versuchen. Es umfasst den ganzen Tag, gestern und 3 oder 4 andere fokussierte Studien.VBA-Produktion und Kontrolle für Flashy, Blinky, Shifty, Active, Bereich-Selection-Border
Eines, das mit kleinen Bereichsauswahlen ein vernünftiges Ergebnis zu produzieren scheint, ist wie folgt - aber wiederum nur kleine Auswahlen und es verursacht Excel, nach der Ausführung eine Weile "nachzudenken", bevor die Kontrolle an den Benutzer übergeben wird:
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub test()
Dim i_index As Long
Dim Selec As Range
Set Selec = Application.InputBox("Select a range to make a flashy, blinky border.", _
"Select Range", _
Type:=8)
For i_index = 1 To 50
If Selec.Borders.LineStyle = xlLineStyleNone Or Selec.Borders.LineStyle = xlDashDot Then
With Selec
.Borders(xlEdgeLeft).LineStyle = xlDashDotDot
.Borders(xlEdgeRight).LineStyle = xlDashDotDot
.Borders(xlEdgeBottom).LineStyle = xlDashDotDot
.Borders(xlEdgeTop).LineStyle = xlDashDotDot
End With
ElseIf Selec.Borders.LineStyle = xlDashDotDot Then
With Selec
.Borders(xlEdgeLeft).LineStyle = xlDashDot
.Borders(xlEdgeRight).LineStyle = xlDashDot
.Borders(xlEdgeBottom).LineStyle = xlDashDot
.Borders(xlEdgeTop).LineStyle = xlDashDot
End With
End If
Sleep 500 'wait 0.5 seconds
Next i_index
End Sub
Die folgende schien eine stabilere Zeitverzögerung zur Verfügung zu stellen:
Sub SD(LenTime)
Dim Start
Start = Timer + LenTime
Do While Timer < Start
If Timer = 0 Then
Start = Timer + 1
End If
Loop
End Sub
Aber, wenn ich versuche, es mit einem Handler zu implementieren:
Public Sub CodeInst_StartFlashyBorder(ByVal Selection As Range)
Call StartFlashyBorder(Selection)
End Sub
Public Sub CodeInst_StopFlashyBorder(ByVal Selection As Range)
Call StopFlashyBorder(Selection)
End Sub
Private Sub StartFlashyBorder(ByVal Target As Range)
If Target.Borders.LineStyle = xlLineStyleNone Or Target.Borders.LineStyle _
= xlDashDot Then
With Target
.Borders(xlEdgeLeft).LineStyle = xlDashDotDot
.Borders(xlEdgeRight).LineStyle = xlDashDotDot
.Borders(xlEdgeBottom).LineStyle = xlDashDotDot
.Borders(xlEdgeTop).LineStyle = xlDashDotDot
End With
ElseIf Target.Borders.LineStyle = xlDashDotDot Then
With Target
.Borders(xlEdgeLeft).LineStyle = xlDashDot
.Borders(xlEdgeRight).LineStyle = xlDashDot
.Borders(xlEdgeBottom).LineStyle = xlDashDot
.Borders(xlEdgeTop).LineStyle = xlDashDot
End With
End If
SD 0.25
Application.OnTime Now, "StartFlashyBorder", , True
End Sub
Private Sub StopFlashyBorder(ByVal Target As Range)
Target.Borders.LineStyle = xlLineStyleNone
Application.OnTime Now, "StartFlashyBorder", , False
End Sub
Ich bin bisher nicht in der Lage, das gewünschte Verhalten zu erzeugen, um es in mein Programm zu integrieren. Ich möchte, dass mein regulärer Code in der Lage ist, Dinge zu tun, während der Handler die auffällige, blinkende, zwielichtige Grenze produziert. Zum Beispiel versuchte der Code, den ich sein Verhalten zu überprüfen, um zu verwenden ist:
Sub TestBorder()
Dim r1 As Range
Dim r2 As Range
Dim r3 As Range
Set r1 = Application.InputBox("Select cell-range #1 and click OK.", _
"Make Selection", _
Type:=8)
Call CodeInst_StartFlashyBorder(r1)
Set r2 = Application.InputBox("Select cell-range #2 and click OK.", _
"Make Selection", _
Type:=8)
Call CodeInst_StartFlashyBorder(r1)
Set r3 = Application.InputBox("Select cell-range #3 and click OK.", _
"Make Selection", _
Type:=8)
Call CodeInst_StartFlashyBorder(r1)
If Application.InputBox("Enter 0 to turn off cell-range #1.", _
"Enter Choice", _
Type:=1) = 0 Then
Call CodeInst_StopFlashyBorder(r1)
End If
If Application.InputBox("Enter 0 to turn off cell-range #2.", _
"Enter Choice", _
Type:=1) = 0 Then
Call CodeInst_StopFlashyBorder(r2)
End If
If Application.InputBox("Enter 0 to turn off cell-range #3.", _
"Enter Choice", _
Type:=1) = 0 Then
Call CodeInst_StopFlashyBorder(r3)
End If
End Sub
Ich bin nicht sehr erfahren bei Codierung Handler. Ich bin fast 15 Jahre ohne Programmierkenntnisse in irgendeiner Sprache gelaufen, und Handler waren damals eine Schwäche für mich. Aber ich habe mit einem ehrgeizigen kleinen Projekt große Fortschritte gemacht. Ich möchte in der Lage sein, den auffälligen, blinkigen, zwielichtigen Rahmen für die Verwendung im Programm zu steuern. Möchte jemand mitteilen, wie er diesen Randstil in seinem Code erzeugt? Ist es in VBA möglich? Vielen Dank.
Sind Sie nach einer Replikation der sogenannten „Marching Ants“ Grenze sehen Sie, wenn Sie getroffen "Strg + C"/Kopieren? –
"Marching Ameisen" - Ja, dieser Name scheint genau zu sein. Ich versuche das oder etwas mit sehr ähnlichen visuellen Effekten zu erreichen. – Ben