【发布时间】:2022-10-05 22:02:07
【问题描述】:
这样做的目的是找到具有标题“类型测试”的列并遍历该列,在本例中为 B 以查找所有唯一值单元格。如果 B 列中的字符串是唯一的并且不能替换,我需要它来制作名称与 A 列中的试验名称匹配的工作表的副本。因此对于行索引为 3 且列索引为 2 的测试 1 , 将在当前工作簿中创建一个名为 \"DEF\" 的工作表副本,并将副本重命名为 \"Test 1\"
例如这里是我的数据
-
A B -
Trial Type_Test -
DEF Test 1 -
ABC Test 3 -
ABC Test 10 -
DEF Test 14 -
ABC Test 10但是,如果 A 列的 B 列值重复,我不想复制工作表 ABC,所以由于第 3 行和第 5 行相同,我只想复制 ABC 工作表两次,一次用于第 2 行,一次对于第 3 行。第 5 行可以忽略,因为它与第 3 行相同。
我已经编写了一个代码,它完成了关于制作工作表和重命名它的第一部分,我只是无法获得另一个工作表部分的副本。
Public Sub Main() Dim srtsht As Variant, sysnum As Variant, arr As Variant, partnum As Variant Dim wsh As Worksheet srtsht = Sheets(\"Sheet1\").Range(\"E2:E15\") With CreateObject(\"scripting.dictionary\") \' store data in array where each item is associated with a unique key For Each sysnum In srtsht arr = .Item(sysnum) Next sysnum For Each value In .Keys On Error Resume Next If value <> \"\" Then Set wsh = Nothing \' clear the variable wsh Set wsh = Worksheets(CStr(value)) \' try to set wsh to the sheet with Value as name On Error GoTo 0 If wsh Is Nothing Then Call position If Worksheets(\"Sheet1\").Cells(A_row,A_col).Value = \"ABC\" Then Worksheets(\"ABC\").Copy After:=ActiveSheet wsh = Worksheets(\"Sheet1\").Cells(A_row,A_col).Values Worksheets(\"ABC (2)\").name = wsh wsh.name = CStr(Value) End If Else MsgBox \"Sheet\" & Values & \"already exists.\", vbInformation End If End If Next Value End With End Sub Sub position () Dim syswaivernum As Range, partnumber As Range For Each syswaivernum In Worksheets(\"Sheet1\").Range(\"A1:Z20\") If syswaivernum.value = \"Number(s)\" Then sysnumcol = syswaivernum.Column sysnumrow = syswaivernum.Row End If Next syswaivernum For Each partnumber In Worksheets(\"Sheet1\").Range(\"A1:Z20\") If partnumber.value = \"Part\" Then A_col = partnumber.Column A_row = partnumber.Row End If Next partnumber End Sub
-
我不确定您的问题与您的标题有何关系。可以将
Cell与行和列索引一起使用。你的问题到底是什么? -
@Sorceri 我已经添加了到目前为止我编写的代码。我可以制作名为 Test 1 Test 2 等的新工作表,但我无法制作 ABC 等工作表的副本
-
@BigBen 我试过做 If Worksheets(\"Sheet1\").Cells(A_row,A_column).Value = \"ABC\" Then Worksheets(\"ABC\").Copy After:= ActiveSheet,但它没有工作
-
你是如何给
A_row和A_column赋值的?请创建一个minimal reproducible example。 -
您创建了一个字典,然后立即调用
arr = .Item(sysnum)- 您的字典没有内容吗?你不打算在里面放任何内容吗?