在工作表上进行更改后,为什么excel rowcount返回最大行数?
代码运行得很“漂亮”(需要清理等),但如果我删除或修改在工作表上进行更改后,为什么excel rowcount返回最大行数?,excel,vba,Excel,Vba,代码运行得很“漂亮”(需要清理等),但如果我删除或修改工作表(“报价材料”)中的行,然后重新运行代码,则默认为最大行数(1048576)。我到处搜索,读了微软的东西,但我想不出来。让我感到困惑的是,代码应该独立于工作表中的内容运行,但在我删除或修改工作表行数的那一刻就不起作用了 有人有洞察力吗 Sub QuoteToMaterial() Dim wb As Workbook Dim ws, wscheck, ws1, ws2 As Worksheet Dim i, j, k, l As In
工作表(“报价材料”)中的行,然后重新运行代码,则默认为最大行数(1048576)。我到处搜索,读了微软的东西,但我想不出来。让我感到困惑的是,代码应该独立于工作表中的内容运行,但在我删除或修改工作表行数的那一刻就不起作用了
有人有洞察力吗
Sub QuoteToMaterial()
Dim wb As Workbook
Dim ws, wscheck, ws1, ws2 As Worksheet
Dim i, j, k, l As Integer
Dim dict As New Dictionary
Dim Str As String
Dim key As Variant
Set wb = ThisWorkbook
Set ws1 = wb.Worksheets("Material For Quotation")
i = ws1.Cells(Rows.Count, 2).End(xlUp).row
j = 1
'init dictionary
For j = 2 To i
If dict.Exists(Trim(UCase(ws1.Cells(j, 3).value))) = True Then
dict(Trim(UCase(ws1.Cells(j, 3).value))) = dict(Trim(UCase(ws1.Cells(j, 3).value))) + ws1.Cells(j, 4).value
Else
dict.Add ws1.Cells(j, 3).value, ws1.Cells(j, 4).value
End If
Next j
i = wb.Worksheets.Count
j = 1
For k = 1 To i
Set wscheck = wb.Worksheets(k)
Select Case True
Case wscheck.Name = "Summary"
GoTo Loopiter 'loop iterate
Case wscheck.Name = "Material For Quotation"
GoTo Loopiter
Case wscheck.Name = "Pricing Summary"
GoTo Loopiter
Case wscheck.Name = "Installation 1"
GoTo Loopiter
Case wscheck.Name = "Installation 2"
GoTo Loopiter
Case wscheck.Name = "Inst Worksheet 1"
GoTo Loopiter
Case wscheck.Name = "Inst Worksheet 2"
GoTo Loopiter
Case Else
Set ws = wb.Worksheets(k)
'inserts $ per unit into the right place
For l = 4 To 101
If dict.Exists(ws.Cells(l, 9).value) = True Then
ws.Cells(l, 11).value = dict(ws.Cells(l, 9).value)
End If
Next l
j = j + 1
End Select
Loopiter:
Next k
End Sub
抱歉,伙计们,这个问题的答案是,我们最终将表格式设置在第1-4列的第1048576行。因此,使用ws.cells(rows.count,2)
将位于底部,因为它们都被一个表占用
要更正,请删除表格格式并仅填充单元格以获得外观,或者使用listobject
并获取其中填充的行数
很抱歉,直到大家都把注意力集中在乱七八糟的代码上,我才意识到这个问题
Thx.您的意思是i
被设置为该计数?侧节点:我发现看起来“不对”的地方是:dict(Trim(UCase(ws1.Cells(j,3.value))=dict(Trim(UCase(ws1.Cells(j,3.value))
。你是想添加单元格(j,4)吗
相反?另一个小提示是,您可以将Select Case
重写得更短。此外,您对变量进行调暗处理的方式……您会发现您使用了许多默认指定变量,因为您实际上没有对这些变量进行调暗处理。i
不太可能大于32767,因为您将其声明为Integer、 应该是Long
。因此,不确定是什么重置为最大行数。@DarrellH,根据我之前的评论,i
实际上不是声明为整数,而是声明为Variant/Empty
。Long
类型上的有效点=)@JvdV,您是正确的,如果他能够成功地将它们调暗,那么他就会遇到Integer
与Long
的问题。目前还不清楚行数“默认”为1048576的方式和时间,当i
在开始时仅计算一次i=ws.Cells(rows.count,2)。结束(xlUp)。行
。你能详细说明一下吗。