- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用具有 11 个工作表的 EXCEL 文件,在此配置中:
VOL_CODE = 我要查找的代码。如果存在于工作表中,则应删除包含 VOL_CODE 的整行。
工作表:
Private Sub CommandButton3_Click()
'--- Remove VOL_CODE line from all worksheets -----
Dim ws1, ws2 As Worksheet
Dim VOL_CODE As String
Dim PLA, LIN As Integer
Set ws1 = Worksheets("NEW VOL DATA") '--- This is the Working Worksheet -----
VOL_CODE = “RS_123456” ‘--- This is the code to search for -----
For PLA = 1 To 10
If UCase(Range("K" & PLA)) <> "X" Then GoTo JUMP_PLA:
Set ws2 = Worksheets("DESTINATION" & Trim(Str(PLA)))
Do While True
On Error GoTo JUMP_PLA:
LIN = Application.WorksheetFunction.Match(VOL_CODE, ws2.Range("B:B"), 0)
ws2.Cells(LIN, 1).EntireRow.Delete
Loop
JUMP_PLA:
Next PLA
End Sub
问题是,当我执行代码时,它在
DESTINATION1 工作表中运行良好,包含或不包含 VOL_CODE(如果包含,它会循环删除 VOL_CODE 的行,直到不再有),然后,当找不到更多 VOL_CODE 条目时,它转到“JUMP_PLA:”和“下一个 PLA”...从那里重新开始,现在转到下一个“
DESTINATIONx ”工作表(下一个选择)...并且出现错误(找到或不是有效条目)当 Application.WorksheetFunction.Match 命令执行时:
最佳答案
Application.WorksheetFunction.Match 删除行
doDest
最好复制到标准模块(例如 Module1
)中,然后在您的按钮代码中调用:Private Sub CommandButton3_Click()
doDest
End Sub
Match
用于删除行。 NEW VOL DATA
。在它的 K1:K10
范围内,在几个单元格中输入一个 x
就可以了。 Option Explicit
Sub doDest()
'--- Remove VOL_CODE line from all worksheets -----
' Speed up the code (you won't see what the macro is doing).
Application.ScreenUpdating = False
Dim ws1 As Worksheet, ws2 As Worksheet 'Dim ws1, ws2 As Worksheet
Dim VOL_CODE As String
Dim PLA As Long, LIN As Long ' Dim PLA, LIN As Integer
Dim wb As Workbook: Set wb = ThisWorkbook ' The workbook with this code.
Set ws1 = wb.Worksheets("NEW VOL DATA") 'Set ws1 = Worksheets("NEW VOL DATA") '--- This is the Working Worksheet -----
VOL_CODE = "RS_123456" '--- This is the code to search for -----
For PLA = 1 To 10
'If StrComp(ws1.Range("K" & PLA).Value, "X", vbTextCompare) <> 0 _
Then GoTo JUMP_PLA
If UCase(ws1.Range("K" & PLA).Value) <> "X" Then GoTo JUMP_PLA ' If UCase(Range("K" & PLA)) <> "X" Then GoTo JUMP_PLA:
Set ws2 = wb.Worksheets("DESTINATION" & PLA) ' Set ws2 = Worksheets("DESTINATION" & Trim(Str(PLA)))
Do ' Do While True
' On Error GoTo JUMP_PLA:
' LIN = Application.WorksheetFunction.Match(VOL_CODE, ws2.Range("B:B"), 0)
' ws2.Cells(LIN, 1).EntireRow.Delete
On Error Resume Next ' Turn ON error trapping.
' "ws2.Columns("B")" is just an option, you can stick with
' "ws2.Range("B:B")".
LIN = Application.WorksheetFunction _
.Match(VOL_CODE, ws2.Columns("B"), 0)
If Err.Number <> 0 Then
On Error GoTo 0 ' Turn OFF error trapping.
'Debug.Print "Done with worksheet '" & ws2.Name & "'."
Exit Do ' or: GoTo JUMP_PLA
Else
On Error GoTo 0 ' Turn OFF error trapping.
ws2.Cells(LIN, 1).EntireRow.Delete
End If
Loop
JUMP_PLA:
Next PLA
Application.ScreenUpdating = True
MsgBox "Deleted rows containing '" & VOL_CODE & "'.", _
vbInformation, "Success"
End Sub
' Deletes all sheets named "DESTINATIONx", where x is from 1 to 10.
Sub deleteDest()
Dim wb As Workbook: Set wb = ThisWorkbook
Dim i As Long
For i = 1 To 10
Application.DisplayAlerts = False ' To prevent Excel from 'complaining'.
On Error Resume Next ' If a sheet does not exist.
wb.Sheets("DESTINATION" & i).Delete
On Error GoTo 0
Application.DisplayAlerts = True
Next i
End Sub
' Adds worksheets named "DESTINATIONx", where x is from 1 to 10.
' In each of those worksheets, adds "RS_123456" to up to 100 cells
' in 'random' rows from 1 to 1000 in column 'B'.
Sub createDest()
' Speed up the code (you won't see what the macro is doing).
Application.ScreenUpdating = False
Dim wb As Workbook: Set wb = ThisWorkbook
Dim ws As Worksheet, i As Long, j As Long, CurrName As String
For i = 1 To 10
CurrName = "DESTINATION" & i
On Error Resume Next ' Turn ON error trapping.
Set ws = wb.Worksheets(CurrName)
If Err.Number <> 0 Then
' Sheet with current name does not exist.
Set ws = wb.Worksheets _
.Add(After:=wb.Worksheets(wb.Worksheets.Count))
ws.Name = CurrName
'Else ' Sheet with current name exists.
End If
On Error GoTo 0 ' Turn OFF error trapping.
ws.Columns("B").Clear ' Ensures new data if sheets already exist.
For j = 1 To 100
ws.Cells(Application.WorksheetFunction.RandBetween(1, 1000), "B") _
.Value = "RS_123456"
Next j
Next i
wb.Sheets(1).Select
Application.ScreenUpdating = True
End Sub
' Counts the number of cells in column 'B' containing a value.
Sub countDest()
Dim wb As Workbook: Set wb = ThisWorkbook
Dim i As Long
For i = 1 To 10
On Error Resume Next
Debug.Print "DESTINATION" & i, wb.Worksheets("DESTINATION" & i) _
.Columns("B") _
.SpecialCells(xlCellTypeConstants) _
.Cells.Count
If Err.Number <> 0 Then
Debug.Print "DESTINATION" & i, "No cells found."
End If
Next i
End Sub
' Ultimate test
Sub testDest()
deleteDest ' Deletes the sheets.
createDest ' Creates the worksheets with random data.
countDest ' Counts the cells containing "RS_123456" (Debug.Print).
doDest ' Deletes the rows containing "RS_123456" in column 'B'.
countDest ' Counts the cells containing "RS_123456" (Debug.Print).
MsgBox "Ultimate: deleted, created, counted, done and counted again."
End Sub
' Initialize
Sub initCreateAndCount()
deleteDest ' Deletes the sheets.
createDest ' Creates the worksheets with random data.
countDest ' Counts the cells containing "RS_123456" (Debug.Print).
MsgBox "Initialized: Sheets deleted and created, and cells counted."
End Sub
' Shows how even when the 'dest' sheets exist, new values are generated.
Sub testCreateCount()
createDest ' Creates the worksheets with random data.
countDest ' Counts the cells containing "RS_123456" (Debug.Print).
MsgBox "Sheets created and cells counted."
End Sub
关于excel - Application.WorksheetFunction.Match 没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63662687/
这是一个相当短的问题,可能很容易回答,但我自己目前无法回答: 示例数据: A B C 示例代码: With Sheet1 Debug.Print Application.WorksheetF
我想知道是否有人可以帮助我。我创建了一个非常简单的用户表单来记录信息。然而,我的问题是,当其中一个字段为空时,我收到一条错误消息: Sub or Function not defined. Priva
我正在尝试对 Sheet2 上的记录进行计数。 Dim wksdata As Worksheet Dim xyz as String Dim Time as String Set wksdata =
我在一大堆工作表上有一大堆数据,对于每个工作表,我想找到给定列中唯一值的计数。 当我在工作表中使用以下命令时,它可以完美运行 =SUM(IF(FREQUENCY(MATCH(REST!D2:D2225
因此,作为我正在处理的更大宏的一部分,我正在比较两个列表(简称 Omni 和 MV)。如果 Omni 列表中的值也在 MV 列表中,我想将该行从 Omni 复制到新的工作表中。我计划使用嵌套的 for
我在显示之前做了一些计算。 尽管值在范围内,“sum”函数仍输出 0。 sub CompileDashboard() For i = 3 To 100 If Sheets(1)
第一次发帖,请多多包涵。 我确定以前有人问过这个问题,但我找不到任何解决方案。 我正在尝试获取其中任何一个 If在 VBA 中工作的公式: ActiveCell.Value = Application
我要做的是遍历包含工作表名称的范围,如果单元格不为空,则添加 CountA 的结果count 变量的函数。 所以计数变量应该等于B9:B28范围内的非空白单元格的数量。在我正在迭代的工作表上,但奇怪的
我正在使用以下代码创建唯一电子邮件的电子邮件列表。该列表有很多重复项,但我只想要一次。有些行没有分配电子邮件,所以它们显示为 我想忽略这些。 我已经在另一个工作良好的工作表中使用了它,不同之处在于在这
Sub checkMe() Dim lastRow As Long Dim cell As Range lastRow = Range("A" & Rows.Count).End(xlUp).Row
这个问题在这里已经有了答案: VBA WorksheetFunction.Sum doesn't work with array but works with range? (2 个回答) 2年前关闭
我正在使用 WorksheetFunction.Transpose在 VBA 中将混合日期/字符串的一维数组转换为二维数组以写入工作表。 将我的 Windows 区域设置设置为 DMY ,被写回的日期
我正在尝试创建一个函数 MonstersInLevel(),它根据第一列的值过滤我的“LevelMonsters”命名范围的第二列。范围的第一列表示游戏关卡 ID,第二列表示出现在该关卡中的怪物 ID
我正在使用Application.match函数来查找我要查找的列标题的列号。如果所有标题都不匹配,我想要一个自定义的 pop MsgBox。 在到达IfError语句之前,Excel停止了我的程序并
鉴于 B2:D10 中的数据,我想使用 VBA 数组公式找到每行的平均值。遵循 Bill Jelen 编写的书籍示例 VBA Queue。 Name A B C Answer Ma
我正在尝试将文件保存到具有动态名称的文件夹和子文件夹中。 我的文件夹和子文件夹的结构是 Shared Drive -> Main -> Year (i.e. 2018) -> Month (i.e.
当我使用 Application.WorksheetFunction.max 时,我有一个填充了各种 double 值的数组函数 我收到一个值,但是当我查看数组的各个值时,我可以找到多个值,这些值大于
我需要申请MATCH函数到日期范围( 在 VBA 中。标准 MATCH 以单元格公式编写的函数确实按预期工作。)寻找对应日期为 <= 的最大可能索引查到的日期。这是我的代码和一个最小的工作示例: Fu
我有一个函数应该计算单元格数组中的总和。这个函数经常在另一个子程序中被调用,因此必须非常快。首先,我使用了一个 for 循环来获取数字,但它太慢了。然后我想使用一个工作表函数,但由于未知原因这不起作用
我正在使用具有 11 个工作表的 EXCEL 文件,在此配置中: VOL_CODE = 我要查找的代码。如果存在于工作表中,则应删除包含 VOL_CODE 的整行。 工作表: “ NEW VOL DA
我是一名优秀的程序员,十分优秀!