Excel Row Mixup

时间:2015-05-23 21:24:23

标签: excel excel-vba vba

首先,我在15年的Excel编程中从未见过这样的事情。

在较轻松的音符上,我觉得这个特殊的Excel文件是闹鬼的:P

严肃地说,我真的无法理解发生了什么。

问题

代码(我没有写它)根据条件运行并隐藏行。当您单击行59中C列以外的任何单元格时,它会显示它来自行58。仅在单元格C中,它显示正确的地址。

截图

enter image description here

我尝试了什么?

  1. 首先我认为这是一个ScreenUpdating问题,但正如您可以看到代码一样,这是排除在外的。
  2. 我手动进入从Col A到Col D的所有单元格,并在Immediate窗口中键入?Activecell.Row。我得到了58,59,58,58
  3. 检查Google是否有人遇到过此类问题。但无法找到一个实例!我不知道还有什么问题可以解决。
  4. 代码

    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
        Dim i, j, k, lastrow As Long
        Dim finlast As Long
    
        Application.ScreenUpdating = False
    
        'Income_Disc
        lastrow = Sheets("Financial_Disc1").Range("E65536").End(xlUp).Row
        finlast = Sheets("Financial_Disc").Range("A65536").End(xlUp).Value + 1
    
        If Target.Column = 9 And Target.Row = 1 Then
            'Unhide Rows if I1 is double clicked
            Sheets("Financial_Disc1").Rows("1:65536").EntireRow.Hidden = False
        Else
            If Target.Row > 7 And Target.Row < lastrow Then
                If Target.Column = 9 Then
                    'Hide Rows
                    For j = Target.Row To lastrow
                        If Sheets("Financial_Disc1").Range("B" & CStr(j + 1)) <> "" Then
                            'Hide Rows
                            Sheets("Financial_Disc1").Range("A" & CStr(j)).EntireRow.Hidden = True
                            Exit For
                        Else
                            'Hide Rows
                            Sheets("Financial_Disc1").Range("A" & CStr(j)).EntireRow.Hidden = True
                        End If
                    Next j
                End If
            End If
        End If
    
        Sheets("Financial_Disc1").Range("A8:A65536").ClearContents
    
        For i = 8 To lastrow
            If Sheets("Financial_Disc1").Range("A" & CStr(i)).EntireRow.Hidden = True Then
                If Sheets("Financial_Disc1").Range("B" & CStr(i)) <> "" Then
                    Sheets("Financial_Disc1").Range("A" & CStr(i)) = ""
                End If
            Else
                If Sheets("Financial_Disc1").Range("B" & CStr(i)) <> "" Then
                    Sheets("Financial_Disc1").Range("A" & CStr(i)) = finlast
                    finlast = finlast + 1
                End If
            End If
        Next i
        Application.ScreenUpdating = True
    End Sub
    

    其他积分

    正如您所看到的,这个文件的列是反向的,因为它来自我在沙特阿拉伯的一个客户。

    我的问题

    任何人都可以看到可能出现的问题吗?或者我应该简单地将其视为&#34; Rare&#34;错误?

1 个答案:

答案 0 :(得分:6)

请检查合并单元格的行 - 遍历它们会导致行&#34;转移&#34;