Board logo

標題: [發問] range 方法 worksheet 物件失敗 [打印本頁]

作者: t8899    時間: 2020-7-31 07:36     標題: range 方法 worksheet 物件失敗

Private Sub Worksheet_Calculate()
If Sheets("即時行情").Range("az5") = 1 And Sheets("即時行情").Range("a2000").End(xlUp).Offset(1).Row = activewindow.VisibleRange.Row + activewindow.VisibleRange.Rows.count - 3 Then
Sheets("即時行情").Range("az5") = 2
Dim Aer
Set Aer = .Range("a2000").End(xlUp).Offset(-5)
ActiveWindow.ScrollRow = Aer.Row
Set Aer = Nothing
Sheets("即時行情").Range("az5") = 1
End If

如果我切到別的sheet 有時會出現 range 方法 worksheet 物件失敗,(錯在第一行)
我查的解決方法是必須先使用 Worksheet 物件的 Activate 方法啟用工作表,才能在沒有明確物件限定詞的情況下使用 Range 屬性。
上面程式不知如何改 ??
作者: 准提部林    時間: 2020-8-1 12:22

第一行加這看看~~
If ActiveSheet.Name <> "即時行情" Then Exit Sub
作者: t8899    時間: 2020-8-6 06:14

本帖最後由 t8899 於 2020-8-6 06:21 編輯
第一行加這看看~~
If ActiveSheet.Name  "即時行情" Then Exit Sub
准提部林 發表於 2020-8-1 12:22

請教如果上面紅色這行如果有錯誤,則...........語法是??
判斷錯誤此行是要放在前面或後面?
是用IsError 或 CVErr ??
作者: GBKEE    時間: 2020-8-6 09:16

]回復 3# t8899
你程式碼有誤  Set Aer = .Range("a2000").End(xlUp).Offset(-5)
加入  With Sheets("即時行情") 試試看
[codePrivate Sub Worksheet_Calculate()
If Sheets("即時行情").Range("az5") = 1 And Sheets("即時行情").Range("a2000").End(xlUp).Offset(1).Row = ActiveWindow.VisibleRange.Row + ActiveWindow.VisibleRange.Rows.Count - 3 Then
Sheets("即時行情").Range("az5") = 2
Dim Aer
With Sheets("即時行情")
Set Aer = .Range("a2000").End(xlUp).Offset(-5)
End With
ActiveWindow.ScrollRow = Aer.Row
Set Aer = Nothing
Sheets("即時行情").Range("az5") = 1
End If
End Sub
[/code]
作者: t8899    時間: 2020-8-6 10:01

本帖最後由 t8899 於 2020-8-6 10:03 編輯

回復 4# GBKEE

謝謝提醒,我原本就有加,偶而還是會出現錯誤,抓不出原因,錯誤發生時按“繼續”不受影響
想用iserror 直接跳過,不知如何做?


[attach]32377[/attach]

這是放在 Private Sub Worksheet_Calculate()
作者: 准提部林    時間: 2020-8-6 10:46

回復 5# t8899

程式碼不完整, 猜不出~~
程式第一行用 ON ERROR RESUME NEXT 吧!
作者: t8899    時間: 2020-8-6 12:35

回復  t8899

程式碼不完整, 猜不出~~
程式第一行用 ON ERROR RESUME NEXT 吧!
准提部林 發表於 2020-8-6 10:46



Private Sub Worksheet_Calculate() 底下要好幾個條件,我只想針對這個條件, 放在第一行?其他條件也會跳過嗎?
作者: 准提部林    時間: 2020-8-6 13:22

On Error GoTo 999
If Sheets("即時行情2").Range("az5") = 1 And _
   Sheets("即時行情").Range("a2000").End(xlUp).Offset(1).Row = _
   ActiveWindow.VisibleRange.Row + ActiveWindow.VisibleRange.Rows.Count - 3 Then
   Sheets("即時行情").Range("az5") = 2
   Dim Aer
   Set Aer = Range("a2000").End(xlUp).Offset(-5)
   ActiveWindow.ScrollRow = Aer.Row
   Set Aer = Nothing
   Sheets("即時行情").Range("az5") = 1
End If
999: On Error GoTo 0
作者: GBKEE    時間: 2020-8-6 13:44

回復 7# t8899
Worksheet_Calculate()工作表模組的預設事件.
當這工作表模組上的工作表,任一儲存格公式值改變時會觸發這Worksheet_Calculate()

Private Sub Worksheet_Calculate() 底下要好幾個條件,我只想針對這個條件, 放在第一行?其他條件也會跳過嗎

這Worksheet_Calculate() 是這Sheets("即時行情")工作表模組上的嗎?

請附上完整檔案,好瞭解你的問題.
作者: t8899    時間: 2020-8-18 10:24

本帖最後由 t8899 於 2020-8-18 10:25 編輯
回復  t8899
Worksheet_Calculate()工作表模組的預設事件.
當這工作表模組上的工作表,任一儲存格公式值改 ...
GBKEE 發表於 2020-8-6 13:44

抱歉........檔案不方便附上, 因為檔案有用到DDE............
這句是否可以改放在其他地方?像Private Sub Worksheet_Change
不要放在 Private Sub Worksheet_Calculate(),有時會錯誤 ?
在active下 也會出現range 方法有問題
我想用 on error resume next,不太適用在 Worksheet_Calculate ?




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)