excel :How .End(xlup).Row在合并范围上的行为(已编辑)

k10s72fa  于 2023-10-22  发布在  其他
关注(0)|答案(1)|浏览(102)

这是我现在的案子我有以下函数调用:

Call function_1(name_sheet)
Call check_sheet_exist(name_sheet)
Call function_3(name_sheet)

如果一个条件为真并且这个条件在循环中,则调用此函数。在这个循环的开始,我有Workbooks(main).Worksheets(mask_1).Activate。所以function_1是用这个表调用的,它在这个表上做操作,这是我想要的。然后在check_name_sheet函数中,我这样做:

Windows(main).Activate
For Each check_sheet In Workbooks(secondary).Sheets
    'some code
Next check_sheet
Workbooks(main).Sheets(mask1).activate '(mask2 can also be activated depending on what parameter is passed)

既然你有了背景,问题就来了。在function_3中,我尝试这样做:

Workbooks(secondary).Sheets(name_sheet).Activate 'name_sheet passed as parameters
MsgBox Range("AQ100").End(xlUp).Row

我在Msgbox中等待的值是21,但我得到了19。这是因为代码搜索工作表Workbooks(main).Sheets(mask1)中的最后一个空行。但我不知道问题出在哪里,因为我已经在第一行指定了要搜索的工作表。
我试着打印我使用的每个变量的值,一切都是定义和正确的。我也在function_3中尝试了这个:

Msgbox Workbooks(secondary).Sheets(name_sheet).Range("AQ100").End(xlUp).Row

name_sheet包含check_sheet_exist函数复制的名称,因此工作表显然在工作簿中。工作簿已打开,存在且工作表的名称正确。
我唯一看到的可能是Windows(主).激活,这是我的问题的目的,是否windows.激活拒绝工作簿的变化?

编辑:

下面是我创建secondary工作簿的函数:

Dim secondary as New Workbook 'outside the function

Sub example ()

Set new_file = Workbooks.Add
With new_file
    .SaveAs Filename:=secondary
End With
secondary = ActiveWorkbook.name

End Sub

下面是调用上面3个函数的main函数:

For i = 1 To Collection_1.Count
 For j = 1 To 5  
  Workbooks(main).Worksheets(mask_1).Activate
   If Collection_1(i).Length(j) = 5 Then
            Call function_1(name_sheet)
            Call check_sheet_exist(name_sheet)
            Call function_3(name_sheet)
   End If

Function_1不会修改活动工作簿或活动工作表。
下面是为什么最后一行应该是21的图像:

djmepvbi

djmepvbi1#

想象一下我的测试表:

由于你的问题是合并了单元格,并且对你的最后一行之后的下一个空行有误解:

Sub nextEmptyRow()
    Dim lRow As Long
    lRow = ActiveSheet.Range("B" & Rows.Count).End(xlUp).Row
    Debug.Print lRow 'gives 9
    Dim rng As Range
    Set rng = ActiveSheet.Range("B" & lRow)
    Debug.Print rng.Offset(1).Row 'this is the actual next empty row
    'gives 11
End Sub

偏移量(我自己测试过,实际上知道这一点)考虑了合并的单元格,所以它比合并单元格的最后一行多1。
在你的情况下,那就是:

Msgbox Workbooks(secondary).Sheets(name_sheet).Range("AQ100").End(xlUp).Offset(1).Row

相关问题