返回列表 上一主題 發帖

[發問] 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

操作程式時, Sheets(2)不是當前工作表, 須先跳轉:
With Sheets(2)
        .Select
      .Range("T7:T" & tx).Select 這行才不會錯誤

不過, 工作表跳轉若非必要, 可:
      For Each b In .Range("T7:T" & tx)  '不用Selection, 上兩行可刪去
EXCEL參考資料:
http://blog.xuite.net/smile1000mile/blog

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

回復 3# Airman


    .[A1].Activate
End With

[A1]是Sheets(2)的, 要放在With裡面!
EXCEL參考資料:
http://blog.xuite.net/smile1000mile/blog

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

本帖最後由 准提部林 於 2015-11-21 20:31 編輯

回復 5# Airman


If .Cells(.[T5] + 6, J) = .[R5] Then
If .Cells(.[T5] - .[T3] + 6, J) = .[R5] Then
If .Cells(.[T5] - .[T3] * 2 + 6, J) = .[R5] Then
∼∼
∼∼
∼∼
End If
End If
End If

看不懂為何這樣寫,須三個if都成立,才進行之內的操作,
是否應各自分段:
If .Cells(.[T5] + 6, J) = .[R5] Then
∼∼
End If
If .Cells(.[T5] - .[T3] + 6, J) = .[R5] Then
∼∼
End If
If .Cells(.[T5] - .[T3] * 2 + 6, J) = .[R5] Then
∼∼
End If
EXCEL參考資料:
http://blog.xuite.net/smile1000mile/blog

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

回復 8# Airman
試試看
  1. Option Explicit
  2. Sub Ex()
  3.     Dim Rng As Range, E As Variant, C As Variant
  4.     With Sheets(2)
  5.         Sheets(1).Range("J7", "P" & Sheets(2).[R6] + 5).Copy .[J7]
  6.         Set Rng = .[J7].Resize(.[J7].End(xlDown).Row, 7)
  7.         For Each E In Array(.[T5], .[T5] - .[T3], .[T5] - .[T3] * 2)
  8.                             '.T5,T5-T3,T5-T3*2 '91,82,73
  9.             C = Application.Match(.[R5], Rng.Rows(E), 0) '找到傳回數字
  10.             If IsNumeric(C) Then
  11.                 With Rng.Rows(E).Cells(C)
  12.                     .Interior.ColorIndex = 4
  13.                     .Font.ColorIndex = 3
  14.                     .Font.FontStyle = "粗體"
  15.                 End With
  16.             End If
  17.         Next
  18.     End With
  19. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

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

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

TOP

        靜思自在 : 改變自己是自救,影響別人是救人。
返回列表 上一主題