usedrange给出错误的列号

时间:2013-07-29 00:12:01

标签: excel vba excel-vba

 Sub testing()


    'start searching for address
    Set wb = ThisWorkbook
    Set ws1 = wb.Sheets("Sheet1")
    Set ws2 = wb.Sheets("Sheet2")

    IncNum = Sheets("Sheet2").UsedRange.Columns.Count
    ExcNum = Sheets("Sheet1").UsedRange.Columns.Count
    InrNum = Sheets("Sheet2").UsedRange.Rows.Count
    Exrnum = Sheets("Sheet1").UsedRange.Rows.Count

    Set sheet1Table = Sheets("Sheet1").UsedRange
    Set sheet2Table = Sheets("Sheet2").UsedRange
    'skip header
    For InrCounter = 2 To InrNum
        For ExrCounter = 2 To Exrnum
            If sheet1Table.Cells(InrCounter, 1) = sheet2Table.Cells(ExrCounter, 1) And sheet1Table.Cells(InrCounter, 2) = sheet2Table.Cells(ExrCounter, 2) And sheet1Table.Cells(InrCounter, 3) = sheet2Table.Cells(ExrCounter, 3) Then
                If IncNum = ExcNum Then
                    Exit For
                Else
                    Dim LastCofRowCounter, lastCofthisR As Integer
                    lastCofthisR = sheet1Table.Cells(ExrCounter, Columns.Count).End(xlToLeft).Column
                    For LastCofRowCounter = lastCofthisR + 1 To IncNum
                        Sheets("Sheet1").Cells(ExrCounter, LastCofRowCounter) = Sheets("Sheet2").Cells(InrCounter, LastCofRowCounter)
                    Next LastCofRowCounter
                End If
            ElseIf ExrCounter = Exrnum Then

        'fid the last row of mastersheet
        lrowEx = Sheets("Sheet1").Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
        For counterCofLastR = 1 To IncNum
           Sheets("Sheet1").Cells(lrowEx + 1, counterCofLastR) = Sheets("Sheet2").UsedRange.Columns(1).Cells(InrCounter, counterCofLastR)
        Next counterCofLastR
        End If
      Next ExrCounter

Next InrCounter
End Sub


    the table looks like  
        h1 h2 h3 h4
        x  x  x  x

行ExcNum = Sheets(“Sheet1”)。UsedRange.Columns.Count给我9而不是4,我不知道为什么在这种情况下...我尝试了另一个工作表与相同的表,它工作细

我试着打电话

  Sub ResetUsedRng()
    Application.ActiveSheet.UsedRange
  End Sub

在执行所有代码之前但这不起作用。我还阅读了你们链接的相关帖子,包括这个

    Private Sub Workbook_BeforeSave _
     (ByVal SaveAsUI As Boolean, Cancel As Boolean)
     For Each Sh In ThisWorkbook.Worksheets
      x = Sh.UsedRange.Rows.Count
      Next Sh
    End Sub

我调用了Call Workbook_BeforeSave(True,False),它也没有用。想法?

3 个答案:

答案 0 :(得分:2)

根据我的经验,唯一可靠的是使用

Lastcol =  Cells.Find("*", [A1], , , xlByColumns, xlPrevious).Column
Lastrow =  Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row

确定使用范围的最后一个单元格。涉及UsedRangeSpecialCells(xlLastCell)End(xlUp) may give you wrong results.

的所有其他方法

答案 1 :(得分:0)

Excel在更新.UsedRange属性方面非常糟糕。如果您的工作表在某些时候在列I中应用了数据或格式,那么.UsedRange属性可能永远不会更新。

由于.UsedRange在VBA中使用非常方便,我通常会通过制作一个子来检查表格中的最后一个被占用的列和行以及删除任何额外的行来解决这个问题。 Sheet.UsedRange中包含的列。这将强制更新财产。

答案 2 :(得分:-1)

这两行做了神奇的事。它使用特殊单元来查找最后一列和最后一行。

  usedCol = ThisWorkbook.ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
  usedRow = ThisWorkbook.ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row

有关详细信息,请访问Microsoft的网站

http://msdn.microsoft.com/en-us/library/office/ff196157.aspx