【问题标题】:VBA error or bug? Sheet 2 data showing in sheet 1VBA 错误或错误?表 1 中显示的表 2 数据
【发布时间】:2016-11-30 01:26:58
【问题描述】:

我有一个 Excel 电子表格,在过去几天开始出现异常,我不确定这是我的 VBA 代码还是错误。在运行宏以将工作表 1 中的新数据行添加到工作表 2 中的表格后,可以“通过”工作表 1 看到工作表 2 - 这就像单元格“不填充”但实际上显示到工作表 2 而不是是白人。

Here's the spreadsheet, stored in Google Drive,欢迎下载看代码等。

这是我的 VBA 代码造成的还是错误,我该如何解决?

编辑:这是代码。第一个 sub 在按钮按下时调用,最后调用 sortTable

Sub addRows()

    Dim rowLast As Long
    rowLast = Worksheets("Inventory").Cells(Rows.Count, "C").End(xlUp).row
    Dim relevantRow As Integer
    relevantRow = rowLast + 1

    Dim numRepeats As Integer
    Dim numRepeatsRange As Range
    Set numRepeatsRange = Range("newInv")
    numRepeats = numRepeatsRange.Count

    Dim relevantColumn As Integer
    Dim relevantColumnRange As String
    Dim copyFromCell As Range
    Dim copyToCell As Range

    Dim counter As Integer
    For counter = 1 To numRepeats
        relevantColumn = Worksheets("Index Lookup").Cells(counter + 1, 2).Value
        Set copyFromCell = Worksheets("Input").Cells(16, counter + 1)
        Set copyToCell = Worksheets("Inventory").Cells(relevantRow, relevantColumn)
        copyToCell.Value = copyFromCell.Value
    Next counter

    Call sortTable
    Worksheets("Input").Range("newInv").ClearContents
    Worksheets("Input").Range("C16").Select

End Sub


Sub sortTable()

    ActiveWorkbook.Worksheets("Inventory").ListObjects("Table14").Sort.SortFields. _
        Clear
    ActiveWorkbook.Worksheets("Inventory").ListObjects("Table14").Sort.SortFields. _
        Add Key:=Range("C15"), SortOn:=xlSortOnValues, Order:=xlAscending, _
        DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Inventory").ListObjects("Table14").Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

End Sub

EDIT2:有问题的单元格在采取任何直接影响它们的操作后重置为正常 - 更改工作表,选择它们(甚至将选择拖到它们上面但实际上没有选择它们),编辑受影响的单元格之一。视觉干扰出现在我的按钮前面,但如果我单击该区域,它们的宏就会运行 - 这只是一个视觉问题。

我找到了一个临时解决方法:在子 addRows 中的上述代码下方,我选择单元格 A1:Z500,然后选择 C16(全选会清除视觉错误,但看起来很糟糕,所以我将选择重置为 C16) .随机信息仍然在屏幕上闪烁,但很快就消失了。 我仍然希望不必这样做 - 有什么想法吗?

EDIT3:我进一步调查并取出对 sortTable 的调用消除了问题。 sortTable 中的某些内容(仅作用于工作表 2)导致工作表 1 出现这种奇怪的视觉错误

【问题讨论】:

  • 没有您的代码就无法判断 - 请edit your question 包含它。
  • “我的 VBA 代码或错误。”作为一般经验法则 - 这是您的代码。在我的一生中,我犯过成千上万的编程错误,但只遇到过少量出现在编程语言实现或主要软件工具中的错误的情况。
  • 尝试“编辑” sheet1 上应该为空白但似乎正在显示某些内容的单元格之一 - 在您编辑时它是否在单元格中显示现有值?保存文件然后重新打开后问题会消失吗? (我的直觉是这是一个内存问题,甚至可能与 Excel 本身无关。)
  • 另一件可能值得尝试的事情是在代码开头插入Application.ScreenUpdating = False,并在结尾插入Application.ScreenUpdating = True

标签: excel vba excel-2010


【解决方案1】:

可能还有其他原因导致先前选择的工作表“渗出”到当前可见的工作表。

在我的例子中,它有助于确保执行宏后的最后一个可见工作表是使用Sheets("Name").ActivateSheet.Activate 的宏中最后一个激活的工作表,而不仅仅是选中。

【讨论】:

    【解决方案2】:

    当我使用另一台比最初出现问题的计算机更快的计算机时,问题得到了解决。

    看起来 YowE3k 是正确的,它是特定于我的计算机的

    【讨论】:

      【解决方案3】:

      对我来说,启动宏很有效

      Application.ScreenUpdating = False
      

      结束宏

      Application.ScreenUpdating = True
      

      【讨论】:

        猜你喜欢
        • 2018-04-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-24
        • 1970-01-01
        相关资源
        最近更新 更多