我无法弄清楚如何标题,但这里有更深入的描述。我已经创建了一个VBA代码,它将根据某些条件过滤excel文件,然后在单元格A(无论是什么行)中重命名Criteria的任何“匹配”,然后我的宏到达Criteria的末尾,然后到左边,并将其更改为需要重命名的任何内容,然后复制并粘贴到上面。
问题:截至目前,如果没有任何符合该标准的代码,代码会使我的光标或其他任何内容一直到文档的底部,并从电子表格的底部粘贴重命名的方式顶端。这显然是一个大问题,我觉得有一个简单的解决方案。
这是我的代码。在此先感谢,这个论坛很棒。
更新:我还附上了一个示例excel表,如果你运行这段代码(F8一直通过),你将能够看到错误发生的位置和方式。先谢谢你们。
以下是下载我的文件(Dropbox)的链接:https://www.dropbox.com/s/bx4ogcsdbmmzs59/ExcelExample11.xlsm?m
更新:我目前已经编辑了代码:大部分时间它都不会转到Else ...为什么当header列下面的单元格什么都没有时它会继续?我很困惑。
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
答案 0 :(得分:1)
我现在无法下载您的代码,但我99%肯定您可以通过查看这两个语句来解决问题:
Selection.End(xlToLeft).Select
Selection.End(xlDown).Select
当过滤器未返回任何内容时,其中第二个将带您一直到电子表格的底部。因此,在此声明之后,您需要测试行号 - 如果您的行号大于所使用的行数,则表示“已经完成了”。
首先,您需要知道电子表格中的最后一个“有效行”。你模块中的某个地方(或新模块)定义了一个这样的函数lastRowUsed
(注意 - 你不能只使用ActiveSheet.UsedRange.Rows.Count
,因为如果第一行是第一行,它将返回一个数字< last row如果对你来说情况绝非如此,你可以稍微简化一下你的生活:
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"
在这里,您可以处理想要陷阱的案例。