Excel 2013 VBA – 以编程方式从工作表2上的一个单元格复制文本,粘贴到Sheet1模块

标题是不言自明的,目标是使用Sheet1上的VBA复制工作表2中单元格的内容,在此示例单元格“U6”中,并将复制的文本粘贴到Sheet1的模块中。

在这种情况下,从工作表复制文本到模块的原因( 我相信这可以用几种更有效的方式来完成,但为了尝试,我希望坚持这个方法来解决这个问题 )是Sheet2上的Cell包含一个公式,该公式将多行VBA语法与由WorkBook中的其他function确定的多个variables一起排列成简短的代码行(四行)。 在这种情况下,将Sheet2的结果复制到Sheet2的模块中是可取的。

对于尝试的方法,由于代码源位于Worksheet中,并且尚未存在于模块中,除非我错了,我不相信VBIDE是适用的解决scheme。

谢谢。

所以你可以通过2种方法来实现。 我已经写在下面。 你可以使用其中之一

Sub Copy() 'Method 1 Sheets("Sheet2").Range("U6").Copy Destination:=Sheets("Sheet1").Range("A1") 'Method 2 'Copy the data Sheets("Sheet2").Range("U6").Copy 'Activate the destination worksheet Sheets("Sheet1").Activate 'Select the target range Range("A1").Select 'Paste in the target destination ActiveSheet.Paste Application.CutCopyMode = False End Sub 

不知道为什么你想要,但…..

  • 在VBE中添加一个引用到Microsoft Visual Basic For Applications Extensibility 5.3.
  • 启用对VBA项目的编程访问。
    在Excel 2010中,select“ Developer选项卡并单击“ Macro Securitybutton。
    在macros设置下,勾选Trust访问VBA项目对象模型

使用与此类似的代码:

  Sub AddProcedureToModule() Dim VBProj As VBIDE.VBProject Dim VBComp As VBIDE.VBComponent Dim CodeMod As VBIDE.CodeModule Dim LineNum As Long Dim x As Long Set VBProj = ActiveWorkbook.VBProject Set VBComp = VBProj.VBComponents("Sheet1") Set CodeMod = VBComp.CodeModule x = 1 With CodeMod LineNum = .CountOfLines + 1 .InsertLines LineNum, "Public Sub MyProcedureName()" LineNum = LineNum + 1 Do While Sheet1.Cells(x, 1) <> "" .InsertLines LineNum, " " & Sheet1.Cells(x, 1) x = x + 1 LineNum = LineNum + 1 Loop .InsertLines LineNum, "End Sub" End With End Sub 

这将复制Sheet1列A中的任何内容到VBE中。
http://www.cpearson.com/excel/vbe.aspx

编辑:重新读取您的问题后,此代码将添加在U6中的值作为评论Sheet1模块中的任何代码的底部:

  Sub AddCommentModule() Dim VBProj As VBIDE.VBProject Dim VBComp As VBIDE.VBComponent Dim CodeMod As VBIDE.CodeModule Dim LineNum As Long Set VBProj = ActiveWorkbook.VBProject Set VBComp = VBProj.VBComponents("Sheet1") Set CodeMod = VBComp.CodeModule With CodeMod LineNum = .CountOfLines + 1 .InsertLines LineNum, "'" & Sheet1.Range("U6") End With End Sub 

注意 – 在这些情况下, Sheet1是表单代号,不一定是出现在工作表选项卡上的名称。 要使用ThisWorkbook.Worksheets("Sheet1"). 而不仅仅是Sheet1

编辑2 (因为我等待下午5:30回家):
将此代码添加到Sheet1模块中,只要您键入单元格U6,它就会自动更新注释:

 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$U$6" Then AddCommentModule End If End Sub