不好意思,再來請教一下VBA裡的事件程序部份..

恩,這幾日寫好的VBA檔總三不五時的那個壞或這個壞
查了半天,逐步執行都OK..
但用F5直接編譯就會出現莫名其妙的問題

其中之一如:有個程序我讓其爬網上資料,載後再丟EXCEL的計算公式進去其對應的相對位址格子內

10/1 就丟到10/1日的H1欄
10/2 就丟到10/2日的H2欄
.....以此類推
本來是都很順的,這幾日真的很會發神經的亂入..
如:10/28..本該丟到10/28日的H28格
但爬的資料是丟到10/28日那列無誤了,但後頭的入公式卻跑到前一日的10/27去(H27)
雖公式進去,計算結果仍是會抓10/27的值去做試算,
唯10/28那列=>H28卻怎麼執行它就是都跑到10/27的H27格去...
偏偏我逐步跑就全OK...
我想這應該是電腦太舊或網速過慢導致的leg現像...(或許吧)

---------------------------------------------------------------------
而今日又發現另一檔的情況則是,我在該檔內有建一樞紐分析表
同樣內部的數據會去取下載回來的值來做參考.
本來也都好好的..就最近真的很古怪,..它下戴回來後都OK..
但樞紐工作表裡的數據中會變成"標題列的部份"被下載回的數據給覆蓋,
導致對應的樞紐圖抓不到標題列而不顯示(初時我以為是檔案又故障了)

但我debug F8去一一查,都是OK的..
所以我想這應該又是 leg 造成的情況.. (程序跑太快或....其它不明原因吧)
想了老久..本來是用工作表的保護功能,把"標題列" 給保護起來的.
但因為我有個程序是設定按入該鍵後,會將標題列重建,此時若選擇工作表部份保護下..
這標題列重建的巨集此時建便會變成無法使用.. = =真是頭大
..
於是我又想了好久..
恩..決定要用事件程序
=>1、我想讓該工作簿在下載數據後,若樞紐工作表裡的標題列有被更改時,
就由事件程序來通知我..以便我此時在按下我寫好的標題列重建巨集即可讓這問題解決
(畢竟它不是每回都會出現標題列被強迫亂入的狀態...實際情況我還真不明白..
若是邏輯錯誤,理應每回都會有此現像,偏又常一下OK、一下不OK)
若是有高手知一二,都歡迎分析與解答。感激不盡中....

只是..恩..我想了半天,卻想不出要怎麼寫這事件程序..
以下是其選用的條件
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
''''''''''''''''''''''''
MsgBox "樞紐工作表-其標題列被更改過"
End Sub

''''''''''''的地方,這裡要怎麼寫才能針對當第一列被動到時才通知
我本來是用rows(1)
如if rows(1).....(被更動過)
可是後頭的語法該怎麼寫才能僅在第一列被動過時再通知即可...


以上感謝...真心感謝..再次拜託了

---------------------------
PS:補充一下其它的疑問,若有知情者也請幫忙略解一二

(註:本要多提問的,但重修文後卻突然斷片了)..這PS的部份容我想起再補..
2022-10-29 0:55 發佈
MaverickRay wrote:
恩,這幾日寫好的VBA(恕刪)

我想先問問你的腿還好嗎?
就算電腦效能不好程序還是會依照你寫的邏輯執行只是會變很慢,lag造成的程序錯亂我是沒遇過
或許你可以在下載數據前先保留標題列數據,下載後再去比對標題列數據有沒有被改動,有改動在通知。
MaverickRay
MaverickRay 樓主

的方法?如:dim mytitle%mytitle=cells(1,columns.count)if ischange(mytitle) then ..(註:沒有ischange這函數)

2022-10-30 1:29
MaverickRay
MaverickRay 樓主

所以我在想不知事件程序內有沒有如isdate 或 isNumeric等等,可用於判斷這列被更動過的監視..?因我實在想不出要如何google相關關鍵字,只好再次來請教..也謝謝您一路幫忙,祝順心如意

2022-10-30 1:33
MaverickRay wrote:
恩,這幾日寫好的VBA(恕刪)

用偵測欄位變更的方式應該是可以的,程式碼要放在要偵測的工作表裡面,試試吧!
Private Sub Worksheet_Change(ByVal Target As Range) 
Dim Title_Cells As Range
Set Title_Cells = Range("A1") '改成你標題的欄位
If Not Application.Intersect(Title_Cells, Range(Target.Address)) Is Nothing Then
MsgBox "樞紐工作表-其標題列被更改過"
End If
End Sub
MaverickRay
MaverickRay 樓主

先謝謝您再次熱心幫忙與提供解決之法,因我近期家中有雜事實在好久沒有時間去翻書了,晚點我再來放上去試試,雖看不太懂intersect,不過應該是可行的,以往Google時也常在它網見您回覆,再次感謝有您

2022-10-31 1:30
MaverickRay
MaverickRay 樓主

果然可行,感謝高手不吝分享與指教,我再找時間好好來看其中的語法奧妙,謝謝您的熱心,再次祝您行大運^^

2022-10-31 1:43
我建議您找出bug的源頭,而不是再增加程式去跳過bug
當您程式碼會寫愈大時,反而會出現莫明奇妙的問題
想修復卻無從下手

例如您這個標題問題
最簡單的方式
在該工作表(暫訂工作表1),找一個用不到的格子(暫訂b1)
然後在所有macro的第一行,加入一行顯示正在執行macro名稱的程式碼

配合3樓,小小尉高手,寫給您的副程式
當出現標題被改時,看一下是那個macro在作怪
再針對那個macro檢查是否延遲時間不夠、還是真的有bug要修

sub 副程式的名字()
sheets("工作表1").range("b1")="副程式的名字"
……
end sub

sub test()
sheets("工作表1").range("b1")="test"
……
end sub

sub abc()
sheets("工作表1").range("b1")="abc"
……
end sub
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?