返回列表 上一主題 發帖

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

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

Q1:
假設我有一組資料要比對
EX: 工作簿A 比對 工作簿B  在工作簿A上顯示 111,222,333,..的值
<工作簿A>                           
B 222
A 111
C 333
D 444
C 333

<工作簿B>(對照表)
A 111
B 222
C 333
D 444
E 555
F 666
G 777
                                                         
目前我都是用最直覺的For迴圈(跑2個-> 一個為工作簿A的數量(i),另一為工作簿B的數量(j))來處理
但如果資料量大 比對很耗時
請問大大有什麼更有效率的方式嗎???
(用函數vlookup會比較快嗎?? 但我不太會將函數應用在VBA語法上,而且vlookup必須多拉一個欄位來放值吧?)


Q2:
我想讓紅色底的儲存格閃爍
當作警示作用
以下這是很笨的想法 哈哈
而且程式會一直執行,卡住無法做其他事
  1.     Do
  2.         If Range("B2").Interior.ColorIndex = 3 Then
  3.             Application.Wait (Now + TimeValue("0:00:01"))
  4.             Range("B2").Interior.ColorIndex = -4142
  5.         End If
  6.         If Range("B2").Interior.ColorIndex = -4142 Then
  7.             Application.Wait (Now + TimeValue("0:00:01"))
  8.             Range("B2").Interior.ColorIndex = 3
  9.         End If
  10.     Loop
複製代碼
想說一次將2問題放一個提問,才不占論壇版面
內文有點冗長 , 麻煩各位大大   謝謝  :  )

回復 2# GBKEE

測試了閃爍部分的語法,真的是我想要的執行方式耶

不過我想要閃爍的部分,是只有原來紅色底的儲存格
(紅->無填滿,無填滿->紅,都是同一個儲存格)

因為我表單內有各種顏色,還有無填滿的空白格,我只要讓原本是紅色的那幾個閃爍

想請問板大,如果加入這條件該怎麼寫???


另外我想了解一下
是因為DeEvents的關係,所以能讓程式持續運行且可以執行其他動作嗎???
還想請問 If Time - T > #12:00:01 AM# Then    為什麼是間隔 1秒呀??? 不太懂

感謝大大的幫忙    謝謝   :  )

TOP

回復 4# GBKEE

謝謝板大的解釋

不過我還是不太清楚該如何指定特定儲存格閃爍
以下是我的做法,是可以閃爍XDD
不過他陣列好像會一直倍數增加@@
  1. Private Sub twinkle()
  2.    
  3.     Dim Rng As Range
  4.     Dim Ar() As Integer
  5.    
  6.     T = Time
  7.     T2 = Time
  8.     Do
  9.         DoEvents
  10.         
  11.         If Time - T > TimeValue("00:00:01") Then
  12.             T = Time
  13.             For i = 6 To Worksheets(2).Range("M65536").End(xlUp).Row
  14.                 If Range("M" & i).Interior.Color = 255 Then
  15.                     Range("M" & i).Interior.ColorIndex = -4142
  16.                     j = j + 1
  17.                     
  18.                     ReDim Preserve Ar(j)
  19.                     
  20.                     Ar(j) = i
  21.                 End If
  22.             Next
  23.             'MsgBox j
  24.             Debug.Print j
  25.             
  26.         End If
  27.         
  28.         'If Time - T > #12:00:05 AM# Then
  29.         
  30.         If Time - T2 > TimeValue("00:00:01") Then
  31.             T2 = Time
  32.             'Application.Wait Now + TimeValue("00:00:01")
  33.             For k = 1 To j
  34.                 Range("M" & Ar(k)).Interior.Color = 255
  35.             Next
  36.             
  37.         End If
  38.         
  39.     Loop
  40.    
  41. End Sub
複製代碼
不知該怎麼修

麻煩大大幫我看看  謝謝  :  )

TOP

回復 5# stillfish00


    stillfish00 大大
    我不知該怎麼執行耶...

    直接COPY 可是他不能RUN

    是因為static嗎? 還是我需要有什麼前置的語法??

TOP

回復 9# GBKEE

這是我的測試檔案

主要想法是先跑一次整列,將儲存格為紅底的變成無填滿
並且將欄位記下來,再過一秒鐘,讀取陣列中的欄位
把儲存格再變成紅色

不過我跑起來好像閃爍的不穩定XDD
而且陣列會一直倍數成長
有想說重跑就erase一次
可是他就不行跑了

麻煩大大 幫我看看 謝謝

    Test-1127_twinkle.zip (10.33 KB)

TOP

回復 8# stillfish00


   

不知道為什麼執行起來會說巨集有問題
重開了也是一樣
不清楚錯在哪

我的執行方式是
  1. Sub test()
  2.     SetRangeFlashing Target:=Range("B2"), ColorIndex:=3
  3. End Sub

  4. Static Sub SetRangeFlashing(Optional Target, Optional ColorIndex, Optional bQuit As Boolean)
  5.    
  6.     '使用方法:
  7.     '  要開始閃爍請呼叫:
  8.     'SetRangeFlashing Target:=Range("B2"), ColorIndex:=3
  9.     '  要停止閃爍請呼叫:SetRangeFlashing bQuit:=True

  10.     Dim dteNextTime As Date
  11.     Dim bStatus As Boolean
  12.     Dim RecordColor
  13.     Dim rngFlash As Range
  14.    
  15.     If bQuit Then
  16.       rngFlash.Interior.ColorIndex = RecordColor
  17.       Application.OnTime dteNextTime, "SetRangeFlashing", , False
  18.     Else
  19.       If Not IsMissing(Target) Then Set rngFlash = Target
  20.       If Not IsMissing(ColorIndex) Then RecordColor = ColorIndex
  21.      
  22.       rngFlash.Interior.ColorIndex = IIf(bStatus, RecordColor, xlColorIndexNone)
  23.       bStatus = Not bStatus
  24.       dteNextTime = Now + TimeValue("00:00:01")
  25.       Application.OnTime dteNextTime, "SetRangeFlashing"
  26.     End If
  27.    
  28. End Sub
複製代碼
不知道這樣跑程式是不是正確的

麻煩大大幫我看看

謝謝  :   )

TOP

回復 12# GBKEE

請問一下板大
Q1:
Set Rng = Union(Rng, Range("A" & i))
union的用法是??? 把range("A"& i) 加入Rng裡面嗎??
Rng是陣列嗎??? 還是???

Q2:
  '**********儲存格 閃爍  ******
    Do
    DoEvents
        If Time - t > TimeValue("00:00:01") Then
            t = Time
            為什麼沒有看到往下累加的欄位數,Rng可以往下一欄位跑呀??? 單看這樣好像只是原地閃同一個
            Rng.Interior.Color = IIf(Rng.Interior.Color = 255, -4105, 255)
        End If
    Loop
    '**********儲存格 閃爍  ******

Q3:
另外還想請問板大
有什麼方法可以把陣列值一次印出來嗎??
而不用FOR迴圈跑



不好意思問題有點多

謝謝大大    :  )

TOP

回復 14# GBKEE

非常感謝板大

我又多了好多經驗值了!!!

:   )

TOP

        靜思自在 : 吃苦了苦、苦盡廿來,享福了福、福盡悲來。
返回列表 上一主題