在我不断寻求为工作场所安排随叫随到的日程安排工作的过程中,我遇到了另一个道路颠簸 .
在我看到这样的情况之前,我得到了很好的帮助,安排了一个编号的时间表:
这些数字中的每一个都对应于列表中的特定名称,右侧为绿色,称为“个人” .
现在我想用绿色列表中的名称替换这些数字 .
我尝试这样做,通过选择带有数字的单元格范围,然后循环使用列表中的名称替换所有单个数字:
Sub FindReplaceAllTest(numOfEmployees As Integer)
Dim sht As Worksheet
Dim fnd As Integer
Dim rplc As Variant
fnd = 1
rplc = ThisWorkbook.Sheets("Duty Roster").Cells("17, fnd + 1").Value
For Each sht In ActiveWorkbook.Worksheets
Range("B2:F54").Select
Selection.Replace What:=fnd, replacement:=rplc, _
LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=False, _
SearchFormat:=False, ReplaceFormat:=False
If fnd < numOfEmployees Then
fnd = fnd + 1
ElseIf fnd = numOfEmployees Then
fnd = 0
End If
Next sht
End Sub
变量 numOfEmployees
收集在较早的SUB中,其中绿色列表中的名称被计数并传递到此变量中,这是为了创建编号列表的过程 .
不幸的是,它没有产生预期的结果 . 我在行上收到错误'1004':
rplc = ThisWorkbook.Sheets("Duty Roster").Cells("17, fnd + 1").Value
这似乎是由该行中的 fnd
变量引起的 . 当我取出 fnd
并用常规行引用替换它时,我得到如下结果:
"Fnd" switched out for "2": "rplc = ThisWorkbook.Sheets("Duty Roster").Cells("17, 2").Value"
即使我在行中加上“2”,我仍然得到列表的名称作为替代 .
2 回答
正确的sintax如下
rplc = ThisWorkbook.Sheets(“Duty Roster”) . Cells(17,fnd 1).Value
这将获得列“fnd 1”和第17行中单元格的值
此外,你循环遍历工作表但从未实际使用它们,因为你既没有使用“sht”也没有使用“点”为任何范围对象添加前缀,以将其引用为“统治”sht . 如下:
对于每个sht在ActiveWorkbook.Worksheets中
来自这个:
Schedule before numbers been replaced by the green list of employees
这段代码:
产生了这些结果:
Schedule after numbers been replaced by the green list of employees
非常感谢user3598756为我提供了解决这个问题的方法!她/他指出我正在编写我不需要的代码中的部分所以我用
Do Until Loop
切换了我的For Each Loop
并用n
替换了sht
变量(并根据我的需要重写了它们)以使其工作 . 他还让我意识到我混淆了列/行引用的位置 . 编辑之后,我的代码也开始产生我想要的结果 .所以我的代码现在做的是将变量
n
与变量numOfEmployees + 1
进行比较,以确保当n
>而不是numOfEmployees
时循环停止 . 确保包含所有数字 . 此外,循环在我指定的范围内查看fnd
,并使用变量rplc
中找到的单元格中的值切换该数字的所有实例 .这是我的(我希望是正确的,我对此很新)简化了对我所做的事情的回答 .
非常感谢帮助!