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