繁体   English   中英

参考 Excel VBA 中的新工作簿

[英]Referring to a new workbook in Excel VBA

在第一个工作簿的单元格 K2 中写入今天的日期,这是其他工作簿名称的参考。 我需要从文件名为今天日期(“13.06.2021.xlsx”)的第二个打开的工作簿中获取一些信息。

我创建了变量 second_workbook,它是日期。 然后我创建了名为“cellscopy”的变量(第一个工作簿中的活动单元格并在其右侧复制了另外 3 个单元格)。 然后宏在第一个工作簿的单元格 I2 中粘贴一个值(J2 中有一个重新排列帐号的公式),然后 J2 是从名为“Bank accounts.xlsx”的第三个工作簿中筛选的条件。

然后,我的宏从 I:I 列中的“Bank accounts.xlsx”中的第一个工作簿单元格 J2(“标准”)中找到值,并从该单元格向左复制一个值 5 列 - 对应于该批号的银行账户编号。

我创建了一个变量“accnumber”,然后将其粘贴到第二个工作簿(“13.06.2021.xlsx”)的表中的过滤器中。 然后,将表格中的过滤范围复制并粘贴到单元格 A12 的新工作簿 (NewWb) 中。 然后我需要 go 回到第一个工作簿并复制“cellscopy”范围并将其再次粘贴到在单元格 C7 处创建的新工作簿中。

但是,我收到运行时错误 438 Object 不支持此属性或方法突出显示我的 VBA 代码的最后一行。

你能帮我解决这个问题吗? 我希望我能尽可能清楚地向您解释我的问题。

    second_workbook = Range("K2").Value
    Dim wb As Workbook
    Dim actWb As Workbook, newWb As Workbook, shAct As Worksheet, shNew As Worksheet
    Dim cellscopy As Range
    Set cellscopy = Range(ActiveCell, ActiveCell.Offset(0, 3))
    Set actWb = ActiveWorkbook
    Set shAct = actWb.Sheets(1)
    Set newWb = Workbooks.Add
    Set shNew = newWb.Sheets(1)
    Set wb = Workbooks(Format(second_workbook, "dd.mm.yyyy") & ".xlsx")
    Dim batchnumber As Range
    Selection.Copy
    Range("I2").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Criteria = Range("J2").Value
    Windows("Bank Accounts.xlsx").Activate
    Set batchnumber = Range("I:I").Find(Criteria & "TT")
    If Not batchnumber Is Nothing Then
        batchnumber.Select
    End If
    ActiveCell.Offset(0, -5).Range("A1").Select
    accnumber = ActiveCell
    wb.Activate
    ActiveSheet.Range("$A$1:$G$654").AutoFilter Field:=5, Criteria1:=accnumber
    Range("C1").Activate
    Selection.CurrentRegion.Select
    Application.CutCopyMode = False
    Selection.Copy
    newWb.Activate
    Range("A12").Select
    ActiveSheet.Paste
    shAct.Range(cellscopy).Copy Destination:=newWb.Range("C7:F7")

我在最后一行收到错误 438。

我希望我尽可能清楚地解释我的问题。 如果你能帮助我,我将不胜感激

创建新工作簿时,将其设置为变量。
这样就很容易引用了。

Dim wb As Workbook
Set wb = Workbooks.Add

我还必须链接到如何避免使用 select帖子。

编辑
既然您完全改变了问题,那么这个 rest 就没有多大意义了。

请尝试下一个代码。 您需要了解您不能粘贴 IN A WORKBOOK 您应该粘贴在工作表范围内

 Sub testCopyFilterCopy()
  Dim shAct As Worksheet, wb2 As Workbook, sh2 As Worksheet, wb3 As Workbook, sh3 As Worksheet
  Dim value_for_filter As String, actCell As Range, rngFilt As Range, rngF As Range
  
  Set shAct = ActiveSheet
  Set actCell = ActiveCell
  value_for_filter = actCell.value
  
  Set wb2 = Windows(Format(Date, "dd.mm.yyyy") & ".xlsx")
   Set sh2 = wb2.Worksheets("My sheet") 'Plese use here the appropriate sheet name!!!
   Set rngFilt = sh2.Range("$A$1:$G$654")
   rngFilt.AutoFilter field:=5, Criteria1:=value_for_filter

 On Error Resume Next
   'set a range of the filtered cells only:
   Set rngF = rngFilt.SpecialCells(xlCellTypeVisible)
 On Error GoTo 0
 If Not rngF Is Nothing Then
    Set wb3 = Workbooks.Add
     Set sh3 = wb3.Worksheets(1)
     rngF.Copy Destination:=sh3.Range("A12")
     shAct.Range(actCell, actCell.Offset(0, 3)).Copy Destination:=sh3.Range("C10")
  Else
    MsgBox "No visible cells in the range..."
  End If
 End Sub
  1. 只能粘贴到工作表中,不能粘贴到工作簿中

  2. 如果要复制过滤范围,则需要使用VisibleCells 否则,将粘贴所有范围,而不仅仅是过滤的范围。

  3. 您应该将Option Explicit放在模块顶部,以便有义务声明所有变量

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM