我有一张主表,其中的每一行都分布到具有特定标签的不同表上。
我想根据 B 列中的信息将每一行分配到适当的选项卡(来自主选项卡)。
我使用代码来分配列,但如果列发生变化,则无法从主数据库中删除/更新列。然后我添加了一个 ID#,该 ID# 对于每个任务都是唯一的。
我尝试将代码更改为从 B 列读取,但最终得到的新工作表编号为 1-31。在我添加 ID# 列并有以下行之前,代码有效:Set rng = ActiveSheet.Range(ActiveSheet.Range("B3"), _
read A3
。
我的代码:
Sub ProcessRows()
Dim rng As Range, cell As Range
Set rng = ActiveSheet.Range(ActiveSheet.Range("B3"), _
ActiveSheet.Cells(Rows.Count, 1).End(xlUp))
For Each cell In rng.Cells
cell.EntireRow.Copy CopyTo(cell)
Next cell
End Sub
'Return a range object to which a row should be copied
' Range returned is determined by the value in "rng"
Function CopyTo(rng As Range) As Range
Dim s As Excel.Worksheet, sName As String
sName = Trim(rng.Value) 'just in case...
On Error Resume Next 'ignore any error
Set s = ThisWorkbook.Sheets(sName) 'see if we can grab the sheet
On Error GoTo 0 'stop ignoring errors
If s Is Nothing Then 'sheet didn't exist: create it
Set s = ThisWorkbook.Sheets.Add( _
after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
s.Name = sName
rng.Parent.Rows(1).Copy s.Range("a1") 'copy headers
End If 'needed a new sheet
'return the first empty cell in column 1
Set CopyTo = s.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
End Function
我遇到的问题是,如果没有唯一标识符,我不知道如何让宏解读某一行是否已更改并更新它,最终导致出现重复。我们全年都在向此工作簿添加内容,因此让宏更新各个工作表可以节省大量时间。
总而言之,我需要一个宏来:
- 将每个主表行分发到每个适当标记的工作表中。
- 如果有任何变化,我需要每个唯一的 ID# 来更新该行。
- 我还需要确保工作表上没有重复的内容。
如果有一种方法可以让宏在关闭文档时自动运行,那将是一个好处,但我可以接受手动运行宏。
答案1
修改此代码
Set rng = ActiveSheet.Range(ActiveSheet.Range("B3"), _
ActiveSheet.Cells(Rows.Count, 1).End(xlUp))
因为它正在读取第一列,所以是这样的:
Set rng = ActiveSheet.Range(ActiveSheet.Range("B3"), _
ActiveSheet.Cells(Rows.Count, 2).End(xlUp))