Excel 基于单元格值将数据复制到新制作的图纸中

Excel 基于单元格值将数据复制到新制作的图纸中,excel,vba,Excel,Vba,我有一个操作日志,用户可以通过带有组合框的用户表单选择会议名称、用户名等。我还创建了一个按钮,用户可以在其中向组合框列表添加新会议 目前,我有一个vba代码,它将检查从userform输入的sheet173数据上的单元格值,创建一个以单元格值命名的新工作表,并将sheet173中的数据复制到新工作表中。我的问题是,如果添加了一个操作,并且已经为此创建了一个工作表,我需要将数据添加到该工作表的下一行 我已经让代码一直工作到工作表已经创建,但是需要添加额外的行。我知道退出潜艇需要出来,但我不知道用什

我有一个操作日志,用户可以通过带有组合框的用户表单选择会议名称、用户名等。我还创建了一个按钮,用户可以在其中向组合框列表添加新会议

目前,我有一个vba代码,它将检查从userform输入的sheet173数据上的单元格值,创建一个以单元格值命名的新工作表,并将sheet173中的数据复制到新工作表中。我的问题是,如果添加了一个操作,并且已经为此创建了一个工作表,我需要将数据添加到该工作表的下一行

我已经让代码一直工作到工作表已经创建,但是需要添加额外的行。我知道退出潜艇需要出来,但我不知道用什么来取代它

Sub copy_newsheet()

Dim pname
Dim ws As Worksheet

pname = Sheets("Sheet173").Range("A1").Value

For Each ws In ActiveWorkbook.Sheets

    If ws.Name = pname Then
        Exit Sub
    End If

Next ws

Sheets("Sheet173").Range("A1:E1").Copy
Sheets.Add After:=ActiveSheet
ActiveSheet.Range("A" & Rows.Count).End(xlUp).Offset(1).PasteSpecial xlPasteValues
ActiveSheet.Name = pname

End Sub

您已经非常接近了,请尝试以下代码:

Sub smth()

Dim pname As String
Dim ws As Worksheet, sh As Worksheet

pname = Sheets("Sheet173").Range("A1").Value

For Each sh In ActiveWorkbook.Sheets
    If sh.Name = pname Then
        Set ws = sh
        GoTo Found
    End If
Next sh

    Set ws = Sheets.Add(After:=ActiveSheet)
    ws.Name = pname
Found:
    Sheets("Sheet173").Range("A1:E1").Copy
    ws.Range("A" & Rows.Count).End(xlUp).Offset(1).PasteSpecial xlPasteValues
End Sub
解释:如果For循环找到具有指定名称n的工作表,它会将ws设置为该工作表,并跳转到Found:,实际的复制和粘贴发生在这里。如果For循环找不到任何内容,它会将ws设置为新的工作表

请注意,ActiveWorkbook和ActiveSheet可能会导致不必要的错误。

这应该可以做到:

Option Explicit
Sub Test()

    Dim pname As String
    'full quallify your ranges, include the workbook
    pname = ThisWorkbook.Sheets("Sheet173").Range("A1").Value 'thisworkbook means the workbook which contains the code

    'with this variable we can know if the worksheet exists or not
    Dim SheetExists As Boolean
    SheetExists = False

    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
        If ws.Name = pname Then SheetExists = True
    Next ws

    'check if it doesn't exist
    If Not SheetExists Then
        'if it doesn't exist, then create the worksheet and give it the name from pname
        With ThisWorkbook
            .Sheets.Add After:=.Sheets(.Sheets.Count)
            .Sheets(.Sheets.Count).Name = pname
        End With
    End If

    'with this variable we can find the last row
    Dim LastRow As Long
    With ThisWorkbook.Sheets(pname)
        'calculate the last row on the pname sheet
        LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
        'equal the value from the pname sheet Range A:E to the sheet173 range A1:E1
        .Range(.Cells(LastRow, "A"), .Cells(LastRow, "E")).Value = ThisWorkbook.Sheets("Sheet173").Range("A1:E1").Value
    End With

End Sub

谢谢你。它出现了一个编译错误:下一个控制变量引用无效。我应该更改ActiveWorkbook和ActiveSheet吗?你是对的,很抱歉我的打字错误。您需要下一个sh而不是下一个ws。我在回答中更正了。您也缺少sh声明=P@Damian你说得对,那样练习会更好。但据我所知,这不会造成任何问题。你是对的@M.Schalk,但这总是会导致错误。最好使用“显式”选项并始终声明所有变量。@kirsten2911如果有帮助,请将其标记为“答案”,以便其他人更容易找到。