【问题标题】:Excel/VBA - Userform overwriting existing dataExcel/VBA - 用户窗体覆盖现有数据
【发布时间】:2017-03-25 06:15:24
【问题描述】:

我已经为工作人员编写了一个用户表单,用于输入被没收物品的数据,打印出该表单的副本并保存所有输入的数据。

这 2 年来一直运作良好,但现在宇宙为我提供了一个更大更好的白痴。显然,行已从工作表中删除,以便某人可以将项目退回给某人而无需留下任何记录。

现在 - 任何输入到表单的数据都会覆盖之前的行。每个新输入都会覆盖更高(旧)的另一行。我正在使用以下几行来查找下一个空行并在工作表上输入数据。它写了 5 行相同的数据,因为下面的代码现在连续写了 5 次。

我看不到错误在哪里 - 或者不了解删除工作表上的行会产生什么影响或更改用户窗体上的代码?

' WRITE DATA TO SPREADSHEET    

emptyRow = WorksheetFunction.CountA(Range("F:F")) + 1

RowCount = Worksheets("Sheet1").Range("A2").CurrentRegion.Rows.Count
With Worksheets("Sheet1").Range("A2")
.Offset(emptyRow, 0).Value = Me.txtSurname.Value
.Offset(emptyRow, 1).Value = Me.numCRN.Value
.Offset(emptyRow, 2).Value = Me.cboUnit.Value
.Offset(emptyRow, 3).Value = DateValue(Me.txtDateConf.Value)
.Offset(emptyRow, 4).Value = Me.numBoxnum.Value
.Offset(emptyRow, 5).Value = Me.txtItem6.Value
.Offset(emptyRow, 6).Value = Me.txtItemDesc6.Value
.Offset(emptyRow, 7).Value = Me.numQTY6.Value
.Offset(emptyRow, 8).Value = Me.cboCondition6.Value
.Offset(emptyRow, 9).Value = Me.cboReason6.Value
If Me.chkHistCheck6.Value = True Then
.Offset(emptyRow, 10).Value = "Yes"
Else
.Offset(emptyRow, 10).Value = "No"
End If

If Me.chkHistCheck6.Value = "" Then
    .Offset(emptyRow, 10).Value = "No"
End If

.Offset(emptyRow, 11).Value = Format(Now, "dd/mm/yyyy hh:nn:ss")
End With

【问题讨论】:

  • 不要依赖CountA 来查找最后使用的行。通常建议使用Range.End(xlUp),所以在你的情况下:emptyRow = Cells(Rows.Count, "F").End(xlUp).Row + 1
  • 然后不是偏移到emptyRow,而是直接使用它:With Worksheets("Sheet1").Cells(emptyRow, "A"),然后您的偏移线变为.Offset(, 0)... .Offset(, 1)....
  • 或者,如果你像我一样,永远不记得一列从 A 列偏移了多少列,你可以使用With Worksheets("Sheet1").Cells(emptyRow, "A")(或只是With Worksheets("Sheet1").Rows(emptyRow))并将偏移量替换为@ 987654329@、.Cells(1, "B").Value = ...Cells(1, "C").Value = ..
  • 您的代码似乎没有问题。但是,我猜您的列“F:F”中可能有一个空白,用作WorkSheetFunction.CountA 中的范围。确保标题和最后一个单元格之间没有任何空单元格(只需使用Ctrl + Arrow Up/Down)。
  • 作为另一种选择,在 VBA 即时窗口 (Ctrl + G) 中运行代码 WorksheetFunction.CountA(Range("F:F")) + 1 并检查结果是否与工作表中的正确行索引匹配。

标签: vba excel userform


【解决方案1】:

抱歉,延迟回复。我们发现代码虽然很笨重,但仍然没问题,但存在一些内存问题。

写入的工作表有 1400 行,包含 2 年的数据输入。发现如果我们只是将所有内容归档(剪切和粘贴)到一个新文件中,表单和工作表就会再次完美运行。

当然,这里有人在查看整个文件但共享数据或晚上整个代码时会在几秒钟内弄清楚。感谢大家的宝贵时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    相关资源
    最近更新 更多