这个论坛的新手,希望有人能提供帮助!
我正在为一个项目创建资源数据库。我创建了一个名为“摘要”的工作表,以输入资源的详细信息(组织,类型,位置,联系方式等)。该列表是垂直组织的,并且具有一些下拉数据验证字段。 see summary
我要执行的操作是将宏附加到“添加到数据库”按钮,该按钮将根据下拉列表中的值将“摘要”表中的数据复制到其他工作表之一中:E4)并水平转置,然后清除该字段。
我已经创建了单个宏来执行此操作(共9个),例如:
Sub EMPTADD()
Application.ScreenUpdating = False
Range("E2:E19").Select
Selection.Copy
Sheets("Employability & Training").Activate
Range("A750").End(xlUp).Select
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
Sheets("Summary").Activate
Range("E2:E19").Select
Application.CutCopyMode = False
Selection.ClearContents
Range("E2").Select
Application.ScreenUpdating = True
End Sub
我只是想不出从那里去哪里。我可以使用IF函数确定E4是否保持特定值并调用相关的宏吗?任何帮助,不胜感激:)
答案 0 :(得分:0)
您不需要使用激活/选择类型命令。 VBA的工作能力远不止于此。使用激活/选择类型的命令还可以打开您的编码,从而产生许多意想不到的后果。有时您认为很活跃,而excel认为很活跃,可能是两件事。最好的方法是完全确定范围,因此毫无疑问。
就编码而言,似乎您正在尝试手动复制单击特定范围并操作数据的方式(也许是基于记录宏的方法?)。我们可以更加动态地使用VBA!我会用这样的东西:
Sub CopyPasteData()
'Declare your variables
Dim wb As Workbook
Dim criteria As String
Dim i As Long
Application.ScreenUpdating = False
'Set values for your variables.
Set wb = ThisWorkbook
criteria = wb.Sheets("Summary").Range("E4")
i = wb.Sheets(criteria).Range("A" & Rows.Count).End(xlUp).Row
'Tell excel where to copy and paste your data
wb.Sheets("Summary").Range("E1").Copy
wb.Sheets(criteria).Range("A" & i + 1).PasteSpecial xlPasteValues
wb.Sheets("Summary").Range("E2").Copy
wb.Sheets(criteria).Range("B" & i + 1).PasteSpecial xlPasteValues
wb.Sheets("Summary").Range("E3").Copy
wb.Sheets(criteria).Range("C" & i + 1).PasteSpecial xlPasteValues
wb.Sheets("Summary").Range("E4").Copy
wb.Sheets(criteria).Range("D" & i + 1).PasteSpecial xlPasteValues
Application.ScreenUpdating = True
End Sub
如果使用变量设置一些值,则可以对所有工作簿使用一个宏。否如果需要声明! wb变量创建一个快捷方式,用于声明该宏应在哪个工作簿中运行。将标准值设置为在Summary工作表中的单元格E4中输入的任何值。只要您的工作表名称与E4中的下拉列表匹配,它就会告诉excel将数据放入哪个工作表。i变量计算包含数据的行数(这样我们就可以在这些数据的底部粘贴新数据行)。
然后,最后的代码只是告诉Excel在哪里复制数据,以及在哪里粘贴数据。根据需要调整范围以完成所需的操作。