Vba 方法';范围';对象的'_工作表';失败
我试图使用下面的代码通过从另一个工作表获取数据来在一个工作表上生成数据。我已经用VBA做了一段时间类似的事情,直到现在才遇到这个问题。我看了很多其他的问题,都有同样的错误,但没有找到我需要的 我的代码开始崩溃,只有消息“400”,所以我添加了一个错误处理程序,现在得到消息: 对象“\u工作表”的方法“范围”失败 我的代码(见“买方”页): 如果需要,我可以发布Vba 方法';范围';对象的'_工作表';失败,vba,excel,Vba,Excel,我试图使用下面的代码通过从另一个工作表获取数据来在一个工作表上生成数据。我已经用VBA做了一段时间类似的事情,直到现在才遇到这个问题。我看了很多其他的问题,都有同样的错误,但没有找到我需要的 我的代码开始崩溃,只有消息“400”,所以我添加了一个错误处理程序,现在得到消息: 对象“\u工作表”的方法“范围”失败 我的代码(见“买方”页): 如果需要,我可以发布FullRange的代码,但它会调用一些其他自定义函数,我认为在循环开始之前我抛出的MsgBox可以很好地证明这不是问题所在。(在“买家”
FullRange
的代码,但它会调用一些其他自定义函数,我认为在循环开始之前我抛出的MsgBox
可以很好地证明这不是问题所在。(在“买家”和“房产”上都有一个公共的全方位的功能,每个功能都指向自己的表单。这两个表单中的代码在其他地方广泛使用,没有问题。)
我还尝试过用
块完全删除,以防产生一些奇怪的冲突,但结果是相同的。结果表明,在Excel或我的计算机的引擎盖下发生了一些可疑的事情。在发布之前,我已经退出并重新打开Excel,但随后我开始出现一些奇怪的行为(例如宏从“运行宏”菜单中消失),所以我重新启动了整个机器。我的原始代码现在运行良好。谢谢你们和我一起看。原来在Excel或我的电脑的引擎盖下发生了一些可疑的事情。在发布之前,我已经退出并重新打开Excel,但随后我开始出现一些奇怪的行为(例如宏从“运行宏”菜单中消失),所以我重新启动了整个机器。我的原始代码现在运行良好。谢谢大家的关注。如果您尝试在该点将某个固定数组设置为范围,会发生什么?如果将.FullRange
调用替换为某个常量,会发生什么情况?i、 e.工作表(“所有权”)的问题是在范围内还是在阵列内?您也可以在该行设置断点,并在即时窗口中自己测试。@arcadeprecint,我的通用测试Sheets(“所有权”)。范围(“A3:L3”)。值=数组(1,2,3,4,5,6,7,8,9,10,11,12)
工作得很好。当我在FullRange
中设置断点时,它会在前两次到达,但在构建阵列时不会到达。我想问题出在范围上。尝试将数组放入数组变量Dim t()作为变量然后t=array(…
然后在下一行停止您的代码,看看t是否正确填充。有人能告诉我吗?我从来没有见过/听说过.PropertyRows()
(这似乎是Sheets集合的一个属性)。我试图在MSDN上找到它,但似乎没有类似的内容。在VBE库中(按F2
)我也找不到它。另外,与其不断调用函数来反复获取正确的列,不如将值放入它们自己的变量中。然后在数组中使用这些变量。这样可以避免代码不断调用同一个数字的工作表。这将加快过程。如果尝试设置一些修复,会发生什么情况将数组设置为该点的范围?如果将.FullRange
调用替换为某个常量会发生什么情况?即工作表(“所有权”).range
或数组内是否存在问题?您也可以在该行设置断点,并在即时窗口中自己测试。@arcadeprecinct,我的通用测试工作表(“所有权”)).Range(“A3:L3”).Value=Array(1,2,3,4,5,6,7,8,9,10,11,12)
工作得很好。当我在FullRange
中设置断点时,它会在前两次到达,但在构建数组时不会到达。我认为问题在于Range
。尝试将数组放入数组变量Dim t()作为variant
然后t=Array(…
然后在下一行停止您的代码,看看t是否正确填充。有人能告诉我吗?我从未见过/听说过.PropertyRows()
(这似乎是Sheets集合的一个属性)。我试图在MSDN上找到它,但似乎没有类似的内容。在VBE库中(按F2
)我也找不到它。另外,与其不断调用函数来反复获取正确的列,不如将值放入它们自己的变量中。然后在数组中使用这些变量。这样可以避免代码不断调用同一个数字的工作表。这将加快过程。
Public Sub MakeSheets(Optional ByVal SortSource As Boolean = False, Optional ByVal ExportSheets As Boolean = False)
On Error GoTo ErrorMsg
Dim r, n As Integer 'for looping through [r]ows and iterating [n]ew lines added to sheets
If SortSource Then 'This code never executes because I'm only using the default boolean values so far
Sheets("Buyers").UsedRange.Sort key1:=FullRange("NAME"), Header:=xlYes
Sheets("Properties").UsedRange.Sort key1:=Sheets("Properties").FullRange("STREET NAME"), key2:=Sheets("Properties").FullRange("NUMBER"), Header:=xlYes
End If
Sheets("Ownership").Rows("3:" & Sheets("Ownership").UsedRange.Rows.Count).Delete
n = 2 'last title row of target worksheet
With Sheets("Properties")
MsgBox .Cells(3, .FullRange("STREET NAME").Column).Value 'Successfully displays the appropriate cell value
For r = 2 To .PropertyRows()
If Not IsEmpty(.Cells(r, .FullRange("OWNER").Column).Value) Then
n = n + 1
MsgBox n 'displays "3", confirming this point is successfully reached once.
'Problem appears to be next line
Sheets("Ownership").Range("A" & n & ":L" & n).Value = Array( _
.Cells(r, .FullRange("MLS#").Column).Value, _
.Cells(r, .FullRange("LIST PRICE").Column).Value, _
.Cells(r, .FullRange("NUMBER").Column).Value & " " & .Cells(r, .FullRange("STREET NAME").Column).Value, _
.Cells(r, .FullRange("OWNER").Column).Value & " " & .Cells(r, .FullRange("OWNED").Column).Value, _
.Cells(r, .FullRange("SUBDIVISION").Column).Value, _
.Cells(r, .FullRange("COUNTY").Column).Value, _
.Cells(r, .FullRange("BED").Column).Value, _
.Cells(r, .FullRange("BATH").Column).Value, _
.Cells(r, .FullRange("YEAR BUILT").Column).Value, _
.Cells(r, .FullRange("TAXES").Column).Value, _
.Cells(r, .FullRange("TAX YEAR").Column).Value, _
.Cells(r, .FullRange("ACQUISITION DATE").Column).Value)
End If
Next r
End With
Exit Sub
ErrorMsg:
MsgBox Err.Description
End Sub