首页 > 解决方案 > Excel VBA_ 对象工作表的方法范围失败(运行时错误 1004)

问题描述

我在不同的模块中编写了一些 vba程序。然后,有一个 UserForm 并且在 UserForm 中有这样的 Subs,我称之为模块中的 subs

Sub uf2_imp_new_Click()
 Call a_xxx_delete '[Sub in Module A]
 Call a_xxx_import '[Sub in Module A]
 Call b_TransXXX    '[Sub in Module B]
 Call c_plist_reset_all '[Sub in Module C]
 Call c_xxx_listfrom_transANB '[Sub in Module C]
End Sub

执行时,我在模块 C 子 c_xxx_listfrom_transANB 中收到运行时错误 1004“对象工作表的方法范围失败”:

Option Explicit
Sub c_xxx_listfrom_transANB()
 Dim wb As Workbook
 Dim ws_trans_anb As Worksheet
 Dim ws_plist As Worksheet
 Dim zeile_trans As Integer  
 Dim zeile_plist As Integer

 Set wb = ThisWorkbook
 Set ws_trans_anb = wb.Worksheets("Trans_XXX")       
 Set ws_plist = wb.Worksheets("PROJEKTLISTE")  

 letztezeile = ws_trans_anb.Cells(Rows.Count, 1).End(xlUp).Row

 For zeile_trans = 2 To letztezeile
  [...]
  ws_plist.Range(Cells(zeile_plist, 2), Cells(zeile_plist, 16)).Borders(xlEdgeBottom).LineStyle = xlContinuous
 Next
EndSub

发生错误时突出显示的行是

ws_plist.Range(Cells(zeile_plist, 2), Cells(zeile_plist, 16)).Borders(xlEdgeBottom).LineStyle = xlContinuous

有谁知道如何解决这个问题?我几天前对模块 c 进行了编码,从未出现过错误。但是现在当通过用户表单调用 sub 时,它不再起作用了。而且很奇怪:我通过在 VBA 中单击“播放”来执行模块 C 中的 Sub,发生错误。但是当我在模块 C 中逐步执行 Sub 时,没有错误。这对我来说太多了.. :) 任何人都可以帮忙吗?

标签: excelvbarangeruntime-error

解决方案


正如评论中提到的,没有什么能保证对 Cells() 的非限定调用将返回 ws_plist 上的范围。

所以你的线:

ws_plist.Range(Cells(zeile_plist, 2), Cells(zeile_plist, 16)).Borders(xlEdgeBottom).LineStyle = xlContinuous

应该变成:

ws_plist.Range(ws_plist.Cells(zeile_plist, 2), ws_plist.Cells(zeile_plist, 16)).Borders(xlEdgeBottom).LineStyle = xlContinuous

推荐阅读