返回列表 上一主題 發帖

[發問] 兩個問題:比對迴圈 & 儲存格閃爍

回復 1# li_hsien
試試看
  1. Option Explicit
  2. Sub ex()
  3.     Dim Ar As Variant, e As Range, Rng As Range, T As Date
  4.     Ar = Sheet2.[A5:A15].Value           '工作簿B
  5.     Ar = Application.Transpose(Ar)       '轉換為一維陣列
  6.     Ar = "," & Join(Ar, ",") & ","       'Join(傳回字串):以","字串,連結一維陣列的元素為字串
  7.                                          
  8.     For Each e In Sheet1.[A3:A10]        '工作簿A
  9.         If InStr(Ar, "," & e & ",") Then '"," & e & "," => 唯一的字串,Ar中尋找這"唯一字串"的位置
  10.             If Rng Is Nothing Then       'InStr(Ar, "," & e & ",")<>0 (False)   => 有找到這"唯一字串"的位置
  11.                 Set Rng = e
  12.             Else
  13.                 Set Rng = Union(e, Rng)
  14.             End If
  15.         End If
  16.     Next
  17.     Rng.Parent.Activate                 '工作簿A
  18.     Rng.Interior.Color = vbRed
  19.     T = Time
  20.     Do
  21.         DoEvents
  22.         If Time - T > #12:00:01 AM# Then    '間隔 1秒
  23.             T = Time
  24.             If Rng.Interior.Color = vbRed Then
  25.                 Rng.Interior.Color = vbYellow
  26.             Else
  27.                 Rng.Interior.Color = vbRed
  28.             End If
  29.         End If
  30.     Loop
  31. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 3# li_hsien
要有時間的間隔,來改變儲存格的底色,才會造成儲存格閃爍的視覺效果.
DeEvents : 交回控制權回給系統,
只要讓原本是紅色的那幾個閃爍 : 你就指定哪些儲存格
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 6# li_hsien
請附檔說明你的範圍
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 GBKEE 於 2013-11-27 14:14 編輯

回復 10# li_hsien
  1. Dim Rng As Range
  2. Private Sub twinkle()
  3.     Dim t As Date
  4.     '設立 Rng的範圍 *********
  5.     With Worksheets(1)
  6.     For i = 1 To .Range("A65536").End(xlUp).Row
  7.         If .Range("A" & i).Interior.Color = 255 Then
  8.             .Range("A" & i).Interior.Color = -4105  '紅底的變成無填滿
  9.             '******將欄位記下來 *****
  10.             If Rng Is Nothing Then
  11.                 Set Rng = Range("A" & i)
  12.             Else
  13.                 Set Rng = Union(Rng, Range("A" & i))
  14.             End If
  15.             '******將欄位記下來 *****
  16.         End If
  17.     Next
  18.     End With
  19.     t = Time
  20.     '**********儲存格 閃爍  ******
  21.     Do
  22.     DoEvents
  23.         If Time - t > TimeValue("00:00:01") Then
  24.             t = Time
  25.             Rng.Interior.Color = IIf(Rng.Interior.Color = 255, -4105, 255)
  26.         End If
  27.     Loop
  28.     '**********儲存格 閃爍  ******
  29. End Sub
複製代碼
回復 11# li_hsien
11# 的程式碼(請複製於一般模組 (Module1)中 試試
以下程式碼也是請複製於一般模組試試
  1. Dim Rng As Range, Msg As Boolean    '在模組頂端設立這模組可用之變數
  2. Sub twinkle()
  3.     Msg = False
  4.     '設立 Rng的範圍 *********
  5.     With Worksheets(1)
  6.         For i = 1 To .Range("A65536").End(xlUp).Row
  7.             If .Range("A" & i).Interior.Color = 255 Then
  8.                 .Range("A" & i).Interior.Color = -4105  '紅底的變成無填滿
  9.                 '******將欄位記下來 *****
  10.                 If Rng Is Nothing Then
  11.                     Set Rng = Range("A" & i)
  12.                 Else
  13.                     Set Rng = Union(Rng, Range("A" & i))
  14.                 End If
  15.                 '******將欄位記下來 *****
  16.             End If
  17.         Next
  18.     End With
  19.     Application.Wait Time + #12:00:01 AM#  '等候1秒鐘
  20.     SetRangeFlashing                       '執行這程序
  21. End Sub
  22. Private Sub SetRangeFlashing() '儲存格 閃爍
  23.     If Msg = True Then
  24.         Rng.Interior.Color = 255   '還原紅色
  25.         Exit Sub
  26.     End If
  27.     Rng.Interior.Color = IIf(Rng.Interior.Color = 255, -4105, 255)
  28.     Application.OnTime Time + #12:00:01 AM#, "SetRangeFlashing"
  29. End Sub
  30. Sub Stop_Flashing()   '停止儲存格閃爍
  31.     Msg = True
  32. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 13# li_hsien
Q1:
     Set Rng = Union(Rng, Range("A" & i))
    union的用法是??? 把range("A"& i) 加入Rng裡面嗎?? :沒錯Rng是陣列嗎??? 是Range
  1. 'Union 方法 傳回兩個或多個範圍的合併範圍。
  2. Option Explicit
  3. Sub EX()
  4. Dim Rng As Range
  5. Set Rng = [A1:A5]
  6. Set Rng = Union([A1:A5], [C5:C15])
  7. MsgBox Rng.Address
  8. End Sub
複製代碼

Q2:
     為什麼沒有看到往下累加的欄位數,Rng可以往下一欄位跑呀??? 單看這樣好像只是原地閃同一個
     看 Q1: 的說明
Q3:
有什麼方法可以把陣列值一次印出來嗎?? 而不用FOR迴圈跑
  1. Option Explicit
  2. Sub EX()
  3. Dim AR()
  4. AR = Array(5, 10, 15, 20)
  5. [A1].Resize(1, UBound(AR) + 1) = AR
  6. [A5].Resize(UBound(AR) + 1) = Application.WorksheetFunction.Transpose(AR)
  7. MsgBox Join(AR, vbLf)
  8. 'WorksheetFunction.Transpose:轉置(工作表函數)
  9. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 慈悲沒有敵人,智慧不起煩惱。
返回列表 上一主題