我的代碼是:VBA錯誤處理只適用於第一次通過
Sub zaa()
'code to find another open file that has the defined name "data"
' - useful where the name changes each month or week
For Each wb In Workbooks
On Error GoTo abcd
x = wb.Name
Workbooks(x).Activate
If Range("Data").Address <> "" Then y = wb.Name
Exit Sub
abcd:
Next wb
End Sub
基本目標是找到一個Excel與特定的命名範圍文件時,我知道它的存在,但不知道該文件的名稱,因爲它改變每週或每月。目標是找到該文件並在該點退出該子文件(或者在該文件上執行其他代碼並退出而不是轉到其他文件)。
我發現它工作正常如果我只打開兩個文件但不能如果有更多的話(除非目標人排在第二位)。雖然我可以用我擁有的東西來運行,但我認爲其他人可能從我擁有的東西中受益,並且我可以擁有更強大的解決方案。
更新: 感謝所有向Mitch回覆&將原始文章以可讀格式發送的人! (我從那以後學會了如何糾正這個問題,並且能夠直接複製代碼 - 我在下面的一些評論中指出,我遇到了麻煩。) 我已經獲得了不同程度的成功 - 來自PaulStock的代碼& Reafidy最初爲我工作,但PaulStock代碼已停止爲我工作。迴應& Jean-FrançoisCorbett和Chris Neilsen的代碼對我很有幫助,但是現在當我運行代碼時(按原樣),它看起來什麼都不做 - 即不會離開我運行它的工作表(而且那不是範圍名稱數據出現)。我最初是在Excel 2007中的代碼中使用其他宏運行代碼,但爲了嘗試獲得不同的結果,將它們移到了獨立表單中,但沒有打開其他宏文件。也嘗試從保存爲'97 -'03格式的文件運行它們。沒有得到不同的結果。其他人比我有更多的經驗(請參閱我在Reafidy &的意見討論中證明的錯誤)請記住,我的原始發佈代碼是通過谷歌搜索到的材料的結果,並且由我修改以用於特定任務&應用程序和暗示我不懂足以讓我自己想出)可能會發現更好的其他解決方案,但現在:
我非常高興,因爲Reafidy的代碼適合我。
由於我沒有註冊(我做了嘗試但沒有成功),但沒有足夠的聲望點,我無法投票,但我在Reafidy的解決方案旁邊放了一個複選標記。
進一步更新: 我現在已經發現,PaulStock &讓·弗朗索瓦·科貝特的代碼是不是爲我工作,由於我的一個非常小的差異 - 代碼包含的「數據」,而我的命名範圍爲「數據」 。在他們的代碼中進行這種更改(以便區分大小寫)意味着他們的兩種解決方案現在都適用於我,因此我試圖在其解決方案中添加一個刻度!不幸的是,我發現只有一種解決方案可以打勾。
我也學到了,我把克里斯的代碼字面上。試圖按照原樣測試每個代碼,這就是我所做的。在'有東西'的部分添加一個簡單的'wb.activate',可以讓代碼做我想做的事情。
再次感謝所有四個貢獻。
@Derek,請看到我的編輯。 – Reafidy