VBA循环创建工作表时如何设置同行不同列的变量并写入指定单元格
修正实现方式
核心逻辑
不需要为b单独编写遍历循环,当前遍历的c已经是List表B列的逐行单元格,直接通过单元格偏移即可拿到同一行目标列的值,完全避免行匹配错位。原代码中直接引用b.Value会触发变量未定义错误,绑定后即可正常取值。
修正后代码
Sub CopyIndTemplate() Dim sh1 As Worksheet, sh2 As Worksheet, c As Range, b As Range, newSh As Worksheet Set sh1 = Sheets("Individual Template") Set sh2 = Sheets("List") ' 遍历范围显式指定sh2的行范围,避免依赖活动工作表 For Each c In sh2.Range("B1", sh2.Cells(sh2.Rows.Count, 2).End(xlUp)) ' 绑定b为c同行的目标列,根据实际列调整偏移参数: ' 偏移规则:目标列在c右侧填正数,左侧填负数 ' 例:c在B列,取同行C列值偏移量为1,取同行A列值偏移量为-1 Set b = c.Offset(0, 1) ' 可选:跳过空行,避免生成无效工作表 If c.Value = "" Then Exit For sh1.Copy After:=Sheets(Sheets.Count) ' 用对象引用替代ActiveSheet,避免活动表变动导致写入位置错误 Set newSh = ActiveSheet newSh.Name = c.Value newSh.Range("A1") = c.Value newSh.Range("B9") = b.Value Next End Sub
调整说明
Set b = c.Offset(0, 1)中的第二个参数为列偏移量,按实际b对应的列修改即可- 如果存在c列值重复的场景,需额外新增工作表重名判断逻辑,否则会触发运行时1004错误
内容的提问来源于stack exchange,提问作者Matt Simms
相关产品推荐
相关产品推荐

