Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 创建一个按钮,用于为新工作表生成指定列_Excel_Vba - Fatal编程技术网

Excel 创建一个按钮,用于为新工作表生成指定列

Excel 创建一个按钮,用于为新工作表生成指定列,excel,vba,Excel,Vba,上周我刚刚发布了一个问题。问题是如何在列表中找到丢失的单元格。这是帖子链接 基于前面的问题,我想添加一些新功能。 红色列为必填字段,绿色列为可选字段。 我想添加一个新列并创建一个按钮,该按钮可以将所有必填字段生成到新工作表中。 如您所见,创建了一个新列和一个新按钮。 现在,我想使用“生成按钮”将所有必填(红色)字段生成到一个新的工作表调用“重要”中。然而,我有一个条件依赖于列K来决定我将生成哪一行数据。如果第K列为是,则它将生成该行数据。如果第K列为否,则我将不会将该行生成到新工作表 我的问题

上周我刚刚发布了一个问题。问题是如何在列表中找到丢失的单元格。这是帖子链接 基于前面的问题,我想添加一些新功能。 红色列为必填字段,绿色列为可选字段。 我想添加一个新列并创建一个按钮,该按钮可以将所有必填字段生成到新工作表中。

如您所见,创建了一个新列和一个新按钮。 现在,我想使用“生成按钮”将所有必填(红色)字段生成到一个新的工作表调用“重要”中。然而,我有一个条件依赖于列K来决定我将生成哪一行数据。如果第K列为,则它将生成该行数据。如果第K列为,则我将不会将该行生成到新工作表

我的问题是如何生成新的工作表,并在第K列中使用是或否条件将这些必填字段提取到新工作表中 多谢各位

这是我的代码:

Private Sub CommandButton2_Click()

Dim rng As Range
Dim selected As Range
Dim newws As Worksheet
Dim yesno As Range
Dim lastrow As Long
Dim justify As Boolean

lastrow = Range("B3").End(xlDown).Row

Set rng = Range("B3:J" & lastrow)
Set yesno = Range("K3:K" & lastrow)

Worksheets("Important").Add after:=Sheets(Worksheets.Count)
Set wks = ActiveSheet
 For Each selected In rng
If rng.Cells.Value = "Yes" Then
justify = True
Worksheets("Important").Copy
Else
If rng.Cells.Value = "No" Then
justify = False

Set newws = Nothing
End If
End If
Next
End Sub
有几件事:

  • 您在B列而不是K列中循环。每个循环的
    应该是在yesno
    not rng中选择的每个循环的

  • 创建图纸的方法将不起作用。我喜欢把它们分成两行。我声明了一个工作表变量“tws”

    设置tws=工作表.Add(之后:=工作表(Worksheets.Count)) tws.Name=(“重要”)

  • 复制/粘贴行不正确。语法为
    范围(源)。复制范围(目标)

  • 因此,以下内容将共同完成要求:

    Private Sub CommandButton2_Click()
    
    Dim rng As Range
    Dim ss As Range, cel As Range
    Dim yesno As Range
    Dim lastrow As Long
    Dim justify As Boolean
    Dim tws As Worksheet
    Dim tlr&, i&
    
    Set wks = Sheets("Sheet1") 'Change this to the worksheet with the data
    With wks
        lastrow = .Range("B3").End(xlDown).Row
    
        Set yesno = .Range("K3:K" & lastrow)
    
        Set tws = Worksheets.Add(after:=Sheets(Worksheets.Count))
        tws.Name = ("Important")
        Set rng = Union(.Range("B3"), .Range("D3"), .Range("E3"), .Range("H3"), .Range("I3"))
        rng.Copy tws.Range("B1")
        For Each ss In yesno
            If LCase(ss.Value) = "yes" Then
                'set rng to the 5 cells desired.
                Set rng = Union(.Range("B" & ss.Row), .Range("D" & ss.Row), .Range("E" & ss.Row), .Range("H" & ss.Row), .Range("I" & ss.Row))
                tlr = tws.Range("B" & tws.Rows.Count).End(xlUp).Offset(1).Row 'find next empty row on target sheet
                rng.Copy tws.Cells(tlr, "B") 'Change to starting column desired.
                justify = True 'not sure what this is for.
            ElseIf LCase(ss.Value) = "no" Then
                justify = False 'not sure what this is for.
            End If
        Next
    End With
    End Sub
    
    我将
    选择的
    更改为
    ss
    ,只是为了避开
    选择
    ,因此我不需要输入太多

    我还声明
    rng
    为需要复制的单元格


    编辑以添加标题

    Hi scott我已经尝试了代码它可以生成新的工作表,但在新的工作表中它是空的如果我也要复制标题怎么办?发生了两种情况之一。运行宏时,包含数据的页面不是活动页面,或者K列中没有与大写字母Y拼写完全相同的“是”。我稍微更改了代码,让我们尝试直接命名工作表。有一个地方,你将需要提供一个实际的表名,我已经评论在哪里。试试看。我试过代码,它只生成最后一行数据,我花了大约一个小时,但仍然不知道如何解决:(@NicholasAggerLui)给我发电子邮件给工作簿,我会看的。scott。craner@gmail.com