Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在工作表上进行更改后,为什么excel rowcount返回最大行数?_Excel_Vba - Fatal编程技术网

在工作表上进行更改后,为什么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)。行
。你能详细说明一下吗。