excel - 迭代一列并在多个工作表中设置值
问题描述
我是一个编程新手,所以请多多包涵。
我目前有一个工作表,Sheet1“DataSheet”,在 A、B 和 C 列中未定义数量的行上保存字符串(文本)数据。Sheet2“BlankSheet”是一个模板“记分卡”,我必须根据总数无限期地复制它“DataSheet”中的数据输入行。我使用命令按钮做到了这一点。
Sub Button2_Click()
Dim i As Long
Dim xNumber As Integer
Dim xName As String
Dim xActiveSheet As Worksheet
On Error Resume Next
Application.ScreenUpdating = False
Set xActiveSheet = ThisWorkbook.Worksheets("BlankSheet")
xNumber = Range("J2")
For i = 1 To xNumber
xName = ActiveSheet.Name
xActiveSheet.Copy after:=ActiveWorkbook.Sheets(xName)
ActiveSheet.Name = "Individual Score Sheet" & i
Next
xActiveSheet.Activate
Application.ScreenUpdating = True
CommandButton1.Enabled = False
End Sub
创建适当数量的计分表后,我需要将 A、B 和 C 列的“数据表”中的个人数据导出到每个计分卡。
前任:
“DataSheet”单元格 A2 需要转到“Individual Score Sheet1”范围 A6:E6(合并单元格),“DataSheet”单元格 B2 到“Individual Score Sheet1”范围 F6:I6(合并单元格)和“DataSheet”单元格 C2 到个人评分表 1" 范围 J6:N6(合并单元格)
“DataSheet”单元格 A3 需要转到“Individual Score Sheet2”范围 A6:E6(合并单元格),“DataSheet”单元格 B3 到“Individual Score Sheet2”范围 F6:I6(合并单元格)和“DataSheet”单元格 C3 到个人评分表 2" 范围 J6:N6(合并单元格)
等等,等等。直到行为空白。
到目前为止,我有:
Sub Button3_Click()
Dim ws As Worksheet
Application.ScreenUpdating = False
With Sheet1
For Each r In .Range("A1", .Range("A1").End(xlDown))
For Each ws In Sheets
Select Case ws.Name
Case "DataSheet", "BlankSheet"
Case Else
ws.Select
ws.Range("A6") = r
End Select
Next ws
Next r
End With
Application.ScreenUpdating = True
End Sub
该程序准确地忽略“DataSheet”和“BlankSheet”,向下迭代A列中的数据并在没有数据时结束,并遍历其他工作表,但是它只将每个工作表的值设置为数据的最终迭代A 列。
我还没有尝试让 B 列或 C 列工作。目标是自动生成“x”数量的“记分卡”以进行打印。
当它沿 A、B 和 C 列中的行向下工作时,我如何对其进行修改以将数据迭代到“个人评分表#”工作表中?
是否可以将这两个按钮组合成一个命令?
提前致谢!
解决方案
这段代码应该在一个子程序中完成所有事情,并且可以从一个单独的按钮调用。
Option Explicit
Sub Button2_Click()
Dim wsData As Worksheet
Dim wsScore As Worksheet
Dim wsTemp As Worksheet
Dim rngSrc As Range
Dim idx As Long
Application.ScreenUpdating = False
Set wsData = ThisWorkbook.Sheets("DataSheet")
Set rngSrc = wsData.Range("A2")
Set wsTemp = ThisWorkbook.Worksheets("BlankSheet")
Do
wsTemp.Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
Set wsScore = ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
idx = idx + 1
With wsScore
.Name = "Individual Score Sheet" & idx
rngSrc.Copy .Range("A6:E6")
rngSrc.Offset(, 1).Copy .Range("F6:I6")
rngSrc.Offset(, 2).Copy .Range("J6:N6")
End With
Set rngSrc = rngSrc.Offset(1)
Loop Until rngSrc.Value = ""
Application.ScreenUpdating = True
CommandButton1.Enabled = False
End Sub
推荐阅读
- python - 如何使用列表索引返回数据列而不是行?
- reactjs - 请求失败,状态码 401 - 反应单元测试
- excel - Excelfollowhyperlink方法-屏幕闪烁
- python - 在python中将军事时间转换为常规时间
- postgresql - 从 postgresql 中的仅 SQL 存储函数引发异常
- linux - 模块“http.client”没有属性“HTTPSConnection”
- python - 在网络抓取中获得“无”
- python - 使用 pip 安装 quickfix 会一直运行
- python - 新的 Anaconda3 安装,ModuleNotFoundError: No module named 'conda'
- powershell - 添加文件夹中的新项目时,如何自动运行 bat 文件?