Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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,我有一个VBA程序,它需要根据表名复制和粘贴值。 图纸名称将在特定列(Bin列)上提取,并将作为添加工作表的名称基础。是否有一种方法可以复制这些值并根据它们的Bin值粘贴它们 例如,我的bin值是QWE、RTY、UIO,它们在原始工作表上重复,这就是我创建列表的原因。然后在创建列表后,SubCreateSheets()将创建工作表QWE、工作表RTY和工作表UIO。我的问题是如何根据工作表名称和设置编号粘贴值 样本数据表 这是我提取并创建一个箱子列表(删除重复值)的代码 Sub BIN\u

我有一个VBA程序,它需要根据表名复制和粘贴值。
图纸名称将在特定列(Bin列)上提取,并将作为添加工作表的名称基础。是否有一种方法可以复制这些值并根据它们的Bin值粘贴它们

例如,我的bin值是
QWE、RTY、UIO
,它们在原始工作表上重复,这就是我创建列表的原因。然后在创建列表后,Sub
CreateSheets()
将创建工作表
QWE
、工作表
RTY
和工作表
UIO
。我的问题是如何根据工作表名称和设置编号粘贴值

样本数据表

这是我提取并创建一个箱子列表(删除重复值)的代码

Sub BIN\u value\u List()
暗选择范围
将ws设置为工作表
范围(“F3:F”和范围(“F”和Rows.Count)。结束(xlUp.Row)。选择
设置rSelection=Selection
设置ws=工作表。添加
ws.Name=“BIN列表”
R选择,收到
带ws.Range(“A1”)
.Paste特殊XLPaste值
.Paste特殊XLPaste值
以
ws.UsedRange.RemoveDuplicates列:=数组(1),头:=xlGuess
出错时继续下一步
ws.UsedRange.SpecialCells(xlcelltypebanks)。删除移位:=xlShiftUp
错误转到0
ws.Columns(“A”).AutoFit
Application.CutCopyMode=False

End Sub
这似乎是您要编码的方案:-

循环浏览工作表“BIN列表”中的所有行,并将每个项目复制到“BIN”列指示其名称的工作表中。如果工作表不存在,请将其添加到工作簿中

您已经有了一个调用每一行的循环,但是您需要重新调整它的用途,以便执行所需的操作,即复制数据并粘贴到另一个工作表。使用下面的函数获取工作表。如果工作表不存在,它将以正确的名称创建工作表。我将其设置为
Private
,因为它将由您的主过程调用,该过程可能是
Public

Private Function CurrentSheet(ByVal SheetName As String) As Worksheet

    Dim Fun         As Worksheet            ' function return object
    Dim AppStatus   As Boolean              ' current setting of ScreenUpdating
    Dim Ws          As Worksheet            ' ActiveSheet

    With ThisWorkbook
        On Error Resume Next
        Set Fun = Worksheets(SheetName)
        If Err Then
            ' the error that occured results from the sheet not being available
            With Application
                AppStatus = .ScreenUpdating ' remember current setting
                .ScreenUpdating = False     ' disable updating
            End With
            Set Ws = ActiveSheet            ' remember the current ActiveSheet
            
            ' this will create a new sheet and activate it
            Set Fun = .Worksheets.Add(After:=.Worksheets(.Worksheets.Count))
            Fun.Name = SheetName
            
            ' return the status to what it was
            Ws.Activate
            Application.ScreenUpdating = AppStatus
        End If
    End With
    Set CurrentSheet = Fun
End Function
而且,更重要的是,您必须绝对避免激活工作表和选择任何内容。您可以读取和写入任何工作表,无论其是否处于活动状态或可见状态。您的工作应该放在保持工作表处于活动状态上,该工作表在用户启动宏时处于活动状态

上述函数将从循环中调用,并从BIN列表中获取所需的参数(工作表名称)。但是为了测试的目的,你可以使用这个小程序,就像我一样

Sub Test_CurrentSheet()

    Dim Ws      As Worksheet
    
    Set Ws = CurrentSheet("QWE")
    Debug.Print Ws.Name
End Sub