excel - 寻找一个循环解决方案,从主 ws 复制到工作簿中的每个空工作表
问题描述
我在这里完全不知所措。还不够好,甚至无法尝试对此进行编码。这是我希望实现的目标:
在工作簿中,我有一个宏,它从 CSV 文件中提取数据并将其复制到“主数据”工作表中,然后再次复制到“临时”工作表中,同时将“临时”中的标题格式化为我需要的内容(A 行和 B 行将需要在所有工作表中保持不变。这已经过去了(在你们自己的帮助下)。然后宏根据 input.box 创建 x 数量的空工作表。现在我需要编写两件事:
将“Temp”工作表中的前两行复制到由 input.box 创建的所有空工作表中(数字未确定,因为它不会保持不变)
将 C 行中的数据范围剪切并粘贴到“Temp”工作表中的数据末尾,逐行粘贴到 input.box 创建的所有工作表中,以便将 C 行复制到 sheet2 中的第一个空行,将 D 行复制到第一个空行在 sheet3 中的行,依此类推,直到不再需要剪切和粘贴数据。它将需要遍历工作簿中具有默认名称(sheet2、sheet3 等)的所有工作表。工作簿中的此类工作表不会超过 10 个。
老实说,我什至不知道从哪里开始,我不擅长循环,尤其是那些看起来如此复杂的循环。
到目前为止,这是我设法整理的内容。只有几个模块可以让我写到上面的内容。我意识到我的代码并不优雅,它的一部分也不是我自己的,因为我已经在这里寻求帮助并收到了它。
Sub Import_CSV_File()
Dim ws As Worksheet, strFile As String
Set ws = ActiveWorkbook.Sheets("Sheet1")
strFile = Application.GetOpenFilename("Text Files (*.csv),*.csv", ,
"Please select .csv file...")
With ws.QueryTables.Add(Connection:="TEXT;" & strFile,
Destination:=ws.Range("A1"))
.TextFileParseType = xlDelimited
.TextFileCommaDelimiter = True
.Refresh
ActiveSheet.Name = "Master Data"
Worksheets("Master Data").Rows(2).EntireRow.Delete
End With
End Sub
Sub Sort_Data_by_Price_Descending()
Columns("A:Q").Sort key1:=Range("G:G"), order1:=xlDescending,
Header:=xlYes
End Sub
Sub Create_Sheet_and_Copy_Master_Data()
Dim ws As Worksheet
With ThisWorkbook
Set ws = .Sheets.Add(After:=.Sheets(.Sheets.Count))
ws.Name = "Temp"
Sheets("Master Data").Cells.Copy Destination:=Sheets("Temp").Range("A1")
Range("A1:Z1") = Array("Code", "Carrier", "Operator", "CardNo", "ExpDate", "Comment1", "OrdAmount", "OrdNo", "OrdDate", "CustNo", "DOB", "Name", "Add1", "Add2", "Add3", " ", " ", " ", "Redline", "ISS", "CCN", "Add Links", "AVS", "Referrals", "Comments", "Verified?")
Rows("1:1").Insert Shift:=xlDown, _
CopyOrigin:=xlFormatFromLeftOrAbove
Range("A1:K1") = Array("Batch No.", " ", "Carrier", " ", "Orders", " ", "Start Time", " ", "End Time", " ", "Batch ID")
End With
End Sub
Sub AddSheets_via_Input_Box()
Dim numberOfSheets As Integer
numberOfSheets = CInt(Trim$(InputBox("...how many people are working Fraud Today?", "Tell me…", 1)))
If IsNumeric(numberOfSheets) Then
With ActiveWorkbook
.Sheets.Add After:=.Sheets("Temp"), Count:=numberOfSheets
End With
Else
MsgBox "Invalid parameter supplied - use numbers only"
End If
解决方案
这应该适用于您的第一个问题。它不需要知道输入框捕获的数字。它将在跳过Master Data
和时循环遍历所有工作表Temp
。
Sub Top2Rows()
Dim Temp As Worksheet: Set Temp = ThisWorkbook.Sheets("Temp")
Dim ws As Worksheet
For Each ws In Worksheets
Temp.Range("A1:Z2").Copy
If ws.Name <> "Temp" And ws.Name <> "Master Data" Then
ws.Range("A1").PasteSpecial xlPasteValuesAndNumberFormats
ws.Range("A1").PasteSpecial xlPasteFormats
End If
Next ws
End Sub
希望您能弄清楚如何将类似的逻辑应用于您的下一张纸。我会做什么(如果我正确理解了#2的要求)是:
- 确定您有多少行
- 确定您有多少目标工作表 (
ThisWorkbook.Sheets.Count - 2
) - 创建一些循环以将范围添加到
Union
(循环数由您拥有的目标工作表数量决定) - 复制/粘贴
Union.EntireRow
单元格,而不是逐行执行此操作。
您还可以创建一个编号系统并使用过滤器来做同样的事情。无论哪种方式,您都希望避免逐行执行此操作。
祝你好运!
推荐阅读
- assembly - 这段代码在哪里切换到 32 位保护模式
- angular - 在 Angular 项目的选择标签中加载大数据时出现问题
- javascript - 如何摆脱角度中的highcharts 13错误?
- ios - iPhone 11 和 iPhone 11 Pro Max 上的 UICollectionViewCell 大小不同
- git - 为什么 git-filter-branch 没有链接?
- etl - Pentaho - 将两列转换为表,第一列作为列名,第二列作为值
- python - 登录帐户时Django的凭据无效
- node.js - 是否可以将 2 列引用到 Postgres 中的同一表列?
- c# - 需要帮助找出为什么任务永远不会完成
- php - 需要将自定义 id 设置为 WHMCS 中的挂钩无法使其正常工作