- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
背景
我有一个包含许多数据表的主文件,并且有一个不断更新的请求更改列表。我需要编写一个宏,以便它将沿着“更改”表中的每一行运行,并在实际数据表中找到其对应项。我需要将相关单元格从更改表复制到其特定表中存在的相应行。
信息
LOBID
)CourseCode
)每对都是唯一的,因为每个 CourseCode
可以存在于多个 LOBID
下的多个工作表中,但只能与 LOBID
配对> 一次。
Sub InputChanges()
Dim changeWS As Worksheet: Dim destWS As Worksheet
Dim rngFound As Range: Dim strFirst As String
Dim LOBID As String: Dim CourseCode As String
Dim i As Integer: Dim LastRow As Integer
Const SHEET_NAMES As String = "Sheet A, Sheet B, Sheet C, etc."
Set changeWS = Sheets("Changes")
Application.DisplayAlerts = False
Application.ScreenUpdating = False
For Each destWS In ActiveWorkbook.Worksheets
If InStr(1, SHEET_NAMES, destWS.Name, vbBinaryCompare) > 0 Then
For i = 4 To changeWS.Range("A" & Rows.Count).End(xlUp).Row
LOBID = changeWS.Cells(i, 2)
CourseCode = changeWS.Cells(i, 5)
Set rngFound = Columns("A").Find(LOBID, Cells(Rows.Count, "A"), xlValues, xlWhole)
If Not rngFound Is Nothing Then
strFirst = rngFound.Address
Do
If Cells(rngFound.Row, "E").Value = CourseCode Then
Cells(rngFound.Row, "AP").Value = changeWS.Cells(i, 24).Value
End If
Set rngFound = Columns("A").Find(LOBID, rngFound, xlValues, xlWhole)
Loop While rngFound.Address <> strFirst
End If
Next i
End If
Next
Set rngFound = Nothing
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
这是我到目前为止的尝试,我感觉它很不错,但我希望逻辑至少有意义。我试图遍历“更改”表中的每一行,在所有表(A、B、C、...L)中搜索 LOBID,然后搜索 CourseCode。当找到匹配对时,我希望将值从 ChangeWS 复制到数据表中的匹配单元格(有许多值需要复制,但为了代码简洁起见,我将它们省略了)。它不会抛出任何错误,但似乎根本没有做任何事情。如果有人至少可以将我推向正确的方向,我将不胜感激。
最佳答案
已编译但未测试:
Sub InputChanges()
Dim changeWS As Worksheet, rw As Range
Dim i As Integer
Set changeWS = ActiveWorkbook.Sheets("Changes")
Application.DisplayAlerts = False
Application.ScreenUpdating = False
For i = 4 To changeWS.Range("A" & Rows.Count).End(xlUp).Row
Set rw = GetRowMatch(CStr(changeWS.Cells(i, 2)), CStr(changeWS.Cells(i, 5)))
If Not rw Is Nothing Then
rw.Cells(1, "AP").Value = changeWS.Cells(i, 24).Value
changeWS.Cells(i, 2).Interior.Color = vbGreen
Else
changeWS.Cells(i, 2).Interior.Color = vbRed
End If
Next i
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Function GetRowMatch(LOBID As String, CourseCode As String) As Range
Dim arrSheets, s, sht As Worksheet, rv As Range, f As Range
Dim addr1 As String
arrSheets = Array("Sheet A", "Sheet B", "Sheet C") ', etc.")
For Each s In arrSheets
Set s = ActiveWorkbook.Sheets(s)
Set f = s.Columns(1).Find(LOBID, Cells(Rows.Count, "A"), xlValues, xlWhole)
If Not f Is Nothing Then
addr1 = f.Address()
Do
If f.EntireRow.Cells(5) = CourseCode Then
Set GetRowMatch = f.EntireRow 'return the entire row
Exit Function
End If
Set f = s.Columns(1).Find(LOBID, f, xlValues, xlWhole)
Loop While f.Address() <> addr1
End If
Next s
'got here with no match - return nothing
Set GetRowMatch = Nothing
End Function
关于VBA(Excel): Looped copy on multiple criteria in multiple worksheets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31797145/
我知道使用对象变量是良好的编码习惯。我正在尝试创建一个名为 wsc 的对象变量,该变量将使用对事件工作簿的工作表集合的对象引用进行初始化。请参阅下面的代码。 我尝试将对象变量数据类型设置为工作表,但它
我在遍历 for 循环中的一系列项目时遇到问题: 该程序应该如何工作- 我从工作表 1(“跟踪电子表格”)开始,根据工作表 1 的变化(在单元格中选择"is"),它会将您转移到工作表 2(“延期提交”
我现在在 Excel 中使用宏仅大约 4 个月,基本上是通过查找现有代码并弄清楚其工作原理来自学。我现在有点陷入困境。 我的 Excel 工作簿中有一份报告。我需要根据 D 列中出现的数据跨多个工作表
工作簿workbook = this.getWorkBook(文件,路径); 工作表sheet = workbook.getSheet("WorkArea"); //sheet.save(); //s
use strict; use warnings; use Spreadsheet::ParseExcel; use Spreadsheet::ParseExcel::SaveParser; my $
我有 2 个工作簿....OdysseyDeposit 我的源数据所在的位置和 Civil Bank Accnt Recon,其中包含 OdysseyDeposit 的 VLOOKUP。 这是我正在使
我正在使用 Excel for Mac 2011,我在一张纸上有几个复选框。我正在尝试使用以下代码使它们自动化: Private Sub CheckBox12_Click() Dim ws A
我有一个简单的类 calc 可以对输入进行平方和立方: object calc2 { def square(nmr: Int) = { calc.square(nmr) } def
对于以下代码,我收到此错误 Method or Data Member not found. Private Sub Workbook_Open() Dim ws1 As Worksheet:
我的第一个问题是 Cells(i, 4) 命令的作用是什么,一直到 Cells(i, 7)。 Option Explicit Sub batch1() Sheets("Batch").Acti
我可能是瞎子,但我已经使用 VBA 几年了,但仍然写出来 Workbook("Book1").Sheets("Sheet1").Range("A1").Value 或者(将 Book1 调暗为工作簿,
此正则表达式出现错误: Matcher worksheetMatcher = Pattern.compile(output).matcher("var worksheet = (.*)\\};");
如何在 PHPExcel (1.7.7) 中删除一行或多行以使 getHighestDataRow 值递减? removeRow() 的使用似乎并没有真正调整 getHighestDataRow 值。
使用 C# 编写一个方法,从工作簿中取出单个工作表并将其另存为 HTML。 我正在使用 MSDN 中描述的 Worksheet.SaveAs 方法. 但是,当我查看输出时,它已经消失并保存了工作簿中的
我有一个名为 Sheet1 的选项卡。它从名为 Data_Summary 的选项卡中过滤数据. 如果我在 Sheet1 的单元格 A2 中输入此 FILTER() 函数,然后按回车键: =FILTER
我正在尝试使用 xlsxwriter 将格式写入一系列单元格。 worksheet.write_blank('A4:B4',None,cell_formatwhite) 此 write_blank 方
函数之间有什么区别:Worksheet_BeforeDoubleClickWorkbook_SheetBeforeDoubleClick? 最佳答案 Worksheet_BeforeDoubleCli
我想知道您能否帮我弄清楚为什么 worksheet.activate 在下面的情况下什么都不做。我关掉 .ScreenUpdating = False .EnableEvents = False .D
在 Intellij Scala Worksheet 支持中,运行类型(即 PLAIN 与 REPL)之间有什么区别? 最佳答案 Plain 评估模型在评估表达式之前一次性编译整个工作表,而 REPL
如果我在 VBA 编辑器中编写此内容: Dim ws As Worksheet: set ws = ActiveSheet ws.Columns( IntelliSense 向我显示了一个看似不相关的
我是一名优秀的程序员,十分优秀!