2

我真的不知道如何命名,但这里有更深入的描述。我创建了一个 VBA 代码,它将根据某些条件过滤一个 excel 文件,然后在单元格 A 中重命名该条件的任何“匹配项”(无论它是什么行),我的宏转到条件的末尾,然后到左侧,并将其更改为需要重命名的任何内容,然后一直复制并粘贴到上面。

问题:截至目前,如果没有符合该标准的代码,则代码会使我的光标或任何内容一直到文档的底部,并将重命名从电子表格的底部一直粘贴到顶部。这显然是一个大问题,我觉得有一个简单的解决方案。

这是我的代码。在此先感谢,这个论坛很棒。

更新:我还附上了一个示例 excel 表,如果您运行此代码(一直按 F8),您将能够看到错误发生的位置和方式。提前谢谢各位。

这是下载我的文件(Dropbox)的链接:https ://www.dropbox.com/s/bx4ogcsdbmmzs59/ExcelExample11.xlsm?m

更新:我目前已将代码编辑为:而且大多数情况下它不会转到其他...为什么当标题列下方的单元格不包含任何内容时它会继续?我很困惑。

Range("M1").Select
ActiveSheet.Range(Selection, Selection.End(xlUp)).AutoFilter Field:=13, Criteria1:="=BCC*"
If Not Selection.Offset(0, 1) = "" Then
Selection.End(xlToLeft).Select
Selection.End(xlDown).Select
ActiveCell.FormulaR1C1 = "CLO"
Selection.Copy
Range(Selection, Selection.End(xlUp)).Select
ActiveSheet.Paste
Selection.End(xlUp).Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "'Subtype"
Else
ActiveSheet.ShowAllData
Range("A1").Select
ActiveSheet.Range(Selection, Selection.End(xlUp)).AutoFilter Field:=1, Criteria1:="#N/A"
End If
4

1 回答 1

1

我现在无法下载您的代码,但我 99% 确信您可以通过查看以下两个语句来解决问题:

Selection.End(xlToLeft).Select
Selection.End(xlDown).Select

当过滤器不返回任何内容时,其中的第二个将带您一直到电子表格的底部。因此,在此语句之后,您需要测试行号 - 如果您的行号大于使用的行,则您“跑完了”。

首先,您需要知道电子表格中的最后一个“有效行”是什么。在您的模块中(或在新模块中)的某处定义这样的函数lastRowUsed(注意 - 您不能只使用ActiveSheet.UsedRange.Rows.Count,因为如果第一行为空白,它将返回一个数字 < 最后一行。如果您从来不是这种情况,您可以简化你的生活):

Option Explicit

Function lastRowUsed()
' returns last row used on Active Sheet
  Dim address As String
  Dim lastRow As String
  Dim ii As Integer

  ' address of range has form $A$2:$C$10
  address = ActiveSheet.UsedRange.address
  lastRow = ""

  ' start at the end and work back until you find a "$"
  For ii = Len(address) To 1 Step -1
    If Mid(address, ii, 1) = "$" Then Exit For
    lastRow = Mid(address, ii, 1) + lastRow
  Next ii

  lastRowUsed = Val(lastRow)

End Function

Selection.End(xlDown).Select一旦你定义了这个函数,你可以用一个简单的方法来测试你是否从边缘掉下来(就在上面)

if Selection.Row > lastRowUsed Then Goto NothingFound

在代码的底部创建一个标签

NothingFound:
  ' code you run when you had "nothing found"

在这里,你处理你想陷害的案件。

于 2013-06-26T13:59:06.867 回答