返回列表 上一主題 發帖

[發問] VBA_請簡化程式碼。謝謝!

VBA_執行階段錯誤 "1004" 的修正。

本帖最後由 Airman 於 2015-11-21 11:09 編輯

執行到列9彈出︰
執行階段錯誤  "1004"
Class Range 的 Select方法失敗


請問︰要如何修正?  謝謝!
Private Sub CommandButton1_Click()
Dim J%, K%, tx%, ty%, tz%, b

With Sheets(2)
      Sheets(1).Range("J7", "P" & Sheets(2).[R6] + 5).Copy .[J7]
      tx = .[R7].End(xlDown).Row
      ty = .[T5].End(xlToRight).Column
      For tz = 20 To ty
      .Range("T7:T" & tx).Select
      For Each b In Selection
      If b <> "" Then
  For J = 10 To 16
    For K = 10 To 16
      If .Range("R" & b.Row) + 1 = .[T5] Then
       If .Range("R" & b.Row) - .[T3] * 2 > 6 Then
         If .Cells(.[T5] + 6, J) = .[R5] Then
         If .Cells(.[T5] - 6, J) = .[R5] Then
         If .Cells(.[T5] + 6, J) = .[R5] Then
          With .Cells(.[T5] + 6, J): .Interior.ColorIndex = 4: .Font.ColorIndex = 3: .Font.FontStyle = "粗體": End With
          With .Cells(.[T5] - .[T3] + 6, J): .Interior.ColorIndex = 45: .Font.ColorIndex = 3: .Font.FontStyle = "粗體": End With
          With .Cells(.[T5] - .[T3] * 2 + 6, J): .Interior.ColorIndex = 8: .Font.ColorIndex = 3: .Font.FontStyle = "粗體": End With         
         End If
         End If
         End If
       End If
      End If
    Next K
  Next J
      End If
      Next b
      Next tz
End With
[A1].Select
End Sub

TOP

本帖最後由 Airman 於 2015-11-21 14:17 編輯

[回復 2# 准提部林
TEST_1.rar (60.04 KB)
准大:
感謝指導~
依照貴解修正後,變成會中斷在[A1].Select
將其點掉後,即可完成執行。

但執行完畢後,列19~列21的T5,T5-T3,T5-T3*2之R5顏色標示完全沒有出來~不知小弟還有那裡寫錯了:funk: ~
敬請您再惠予賜正~感恩!

PS:另再請教︰列33 [A1].Select如果不點掉,又要如何修正? 謝謝您!

TEST_1.rar (60.04 KB)

TOP

本帖最後由 Airman 於 2015-11-21 18:32 編輯

回復 4# 准提部林

准大:
[A1].Select改為 [A1].Activate
可完成執行~OK了~謝謝您:D

但列19~列21的T5,T5-T3,T5-T3*2之R5顏色還是完全沒有標示出來~不知小弟還有那裡寫錯了:L
T5=91期;T5-T3=82期;T5-T3*2=73期
R5=11  

敬請您再惠予賜正~感恩:lol

TOP

回復 6# 准提部林
准大:
If .Cells(.[T5] + 6, J) = .[R5] Then
∼∼
End If
單獨條件即標示顏色是沒有問題。

但小弟的意思,是想要當T5,T5-T3,T5-T3*2等三個期數(91,82,73)都有顯示R5值(=11)~
3個條件同時成立才標示顏色~所以將3個If...條件...Then擺前面~但顯然是小弟的語法錯誤,才會程式執行完畢卻無顏色標示

請問:
當T5,T5-T3,T5-T3*2等三個期數(91,82,73)同時都有顯示R5值(=11)時~
則3個期數顯示R5值的儲存格標示顏色之正確語法,應該如何寫?

敬請您再次惠予賜正~感恩

TOP

回復 5# Airman
准大:
因您的提示~知道錯誤的程式碼在何處~
剛剛試將程式碼改為~
         If .Cells(.[T5] + 6, I) = .[R5] Then
         If .Cells(.[T5] - .[T3] + 6, J) = .[R5] Then
         If .Cells(.[T5] - .[T3] * 2 + 6, K) = .[R5] Then
           With .Cells(.[T5] + 6, I): .Interior.ColorIndex = 4: .Font.ColorIndex = 3: .Font.FontStyle = "粗體": End With
           With .Cells(.[T5] - .[T3] + 6, J): .Interior.ColorIndex = 45: .Font.ColorIndex = 3: .Font.FontStyle = "粗體": End With
           With .Cells(.[T5] - .[T3] * 2 + 6, K): .Interior.ColorIndex = 8: .Font.ColorIndex = 3: .Font.FontStyle = "粗體": End With
         End If
         End If
         End If
即可完成顏色標示。

但請問:只能這樣寫嗎?
敬請您再惠予賜正~感恩

PS:因為後續還有程式要接續,變數豈不是多的令人撩亂。

TOP

回復 9# GBKEE
GBKEE超級版大:
感謝您的不吝賜教與指導~測試OK了~完全符合需求~感恩

PS:程式碼簡化許多~小弟得慢慢消化學習

TOP

回復 11# 准提部林
准大:
您的助人熱誠實在令小弟折服

少了3個迴圈變數就少了許多,除了簡化程式碼,效率也提升很多~,
尤其是不用Select~對於效率的提升更是顯著。

萬分感謝您的耐心教導和費神的再加程式註解~小弟受益良多~感恩再感恩....

TOP

本帖最後由 Airman 於 2015-11-23 01:12 編輯

回復 13# 准提部林
准大:
再次謝謝您的費神。

可否另外再請您賜教:
如何將Set R(y) = .[J:P].Rows(RW(y - 1) + 6).Find(.[R5], Lookat:=xlWhole) 改為~
"標定3區[R5]值的儲存格為相同欄位" 。
謝謝您!

為了免於重述繁(煩)複的說明及多占版面,所以未另開題請益~敬請見諒!感恩!

TOP

[發問] VBA_請簡化程式碼。謝謝!

需求︰
請將『搜尋在R7(=90期),R7-T3(=81期),R7-T3*2(=72期)三個期數同時有一個(含)以上的交集值(=07,39);並分別將其標示4,45,8號底色』的列19~列33程式碼~簡化為如列7~列17之程式碼的型態寫法~
EX︰RV = Array(.Range("R" & b.Row),.Range("R" & b.Row)- .[T3],.Range("R" & b.Row)- .[T3] * 2)  '另3區的期數陣列

詳如附件~ TEST_2.rar (61.49 KB)


敬請各位大大不吝指導~感恩!

回復 16# GBKEE
GBKEE超大:早安!
不好意思,先請教:要讓貴程式在結束後,滑鼠停留在A1,要怎麼寫?(在End With插入.[A1].Activate或.[A1].Select都不對 )

回應貴留言:
小弟的意思是將列19~列33程式碼移除,簡化成如類似列7~列17程式碼型態的寫法。
當然以貴寫法更為簡化。
如不嫌棄~敬請您惠予賜教!感恩

TOP

        靜思自在 : 屋寬不如心寬。
返回列表 上一主題