Excel 正在寻找从主ws复制到工作簿中每个空工作表的循环解决方案

Excel 正在寻找从主ws复制到工作簿中每个空工作表的循环解决方案,excel,vba,Excel,Vba,我在这里完全不知所措。还不足以尝试编写此代码。以下是我希望实现的目标: 在工作簿中,我有一个宏,可以从CSV文件中提取数据,并将其复制到“主数据”工作表中,然后再复制到“临时”工作表中,同时将“临时”中的标题格式化为我所需的格式(a行和B行需要在所有工作表中保持不变。这已经过去了(在您的帮助下)好的。然后宏根据input.box创建x个数量的空工作表。现在我需要编写两个代码: 将“Temp”工作表的前两行复制到由input.box创建的所有空工作表中(数字未确定,因为它不是常量) 从C行剪切并粘

我在这里完全不知所措。还不足以尝试编写此代码。以下是我希望实现的目标:

在工作簿中,我有一个宏,可以从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
    

    这应该适用于您的第一个询问。它不需要知道输入框捕获的数字。它将在跳过
    主数据
    临时数据
    时在所有工作表中循环

    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
    
    Sub-Top2Rows()
    将临时设置为工作表:设置临时=此工作簿。工作表(“临时”)
    将ws设置为工作表
    对于工作表中的每个ws
    温度范围(“A1:Z2”)。副本
    如果ws.Name“Temp”和ws.Name“Master Data”,那么
    ws.Range(“A1”).Paste特殊XLPaste值和数字格式
    ws.Range(“A1”).Paste特殊XLPaste格式
    如果结束
    下一个ws
    端接头
    

    希望你能想出如何将类似的逻辑应用到下一张工作表中。如果我正确理解了ask for#2,我会做的是:

  • 确定您有多少行
  • 确定您有多少张目标工作表(
    thishworkbook.sheets.Count-2
  • 创建一些循环以将范围添加到
    联合体中
    (循环的数量由目标图纸的数量决定)
  • 复制/粘贴单元格的
    Union.EntireRow
    ,而不是逐行执行此操作
  • 你也可以创建一个编号系统,并使用一个过滤器来做同样的事情。无论哪种方式,你都希望避免一行一行地做这件事


    祝你好运!

    你的数据有一个最大列长吗?或者这个变量除了第1行是11,但在其中复制14个空单元格是非常好的,所以25是这个wb中所有行中的最大列数。这不是你所问的,抱歉。列长会随着数据的不同而变化niform。您创建的代码工作完全正确。我将尝试以某种方式对第二部分进行编码,但有一些棘手的地方。首先,我必须为宏实现一种方法,以检查我有多少张工作表,因为我的数字每天都会从1到10不等(每个工作人员一张)。第二,不幸的是,我不得不逐行复制数据,因为数据的排列方式是这样的,如果处理这些工作表的人只是按工作表的数量划分行,然后将整个块复制粘贴到其中,这对他们来说是不公平的。因为数据是按值降序排列的(必须是这样)循环必须给每个人一个大致相等的工作量。你可以一行一行地循环。你可以找出有多少张工作表带有我在第2步中提供的代码位(
    thishworkbook.sheets.Count-2
    )对于
    主数据
    临时工
    工作表,我将扣除2。你说得对,你提供了我实际需要的所有工具。感谢最后的提示,我才意识到我没有完全理解这段代码。(thishworkbook.Sheets.Count-2)。谢谢。