首页 > 解决方案 > 如何根据 VBA 中的选定变量修复复制和粘贴可见单元格 - Excel

问题描述

我有一个宏,它只复制与我们在报告表中选择的客户相关的信息(通过数据验证选项 - 基于客户名称),然后将链接到该客户的所有信息(不包括标题)从数据表粘贴到复制表。

数据表包含全年的数据,但我们只对最近几天感兴趣,所以我过滤了日期列和 A1 单元格之后的第一个活动单元格的位置(例如 A1556)。效果很好 - 它从我们选择的客户那里复制数据并创建报告。唯一的问题:我只想从 VISIBLE CELLS 复制数据,但是当我排除(过滤)另一个变量(例如,排除一个地址)链接到所选客户并且位于第一个可见单元格之后(即 A1558 在此case) 宏仍然会从我们放置单元格的第一个活动单元格(在本例中为 A1556 单元格)复制链接到所选客户的所有数据。

我尝试使用 PasteSpecial Paste:=xlCellTypeVisible 仅选择可见单元格,但它会复制与我们在活动单元格之后选择的客户相关的所有数据。甚至通过过滤器选项排除的数据。

Set erange = Sheet3.Range("A2:B60") ' email range for a given customer
Set datasheet = Sheet1
Set reportsheet = Sheet2
Set copysheet = Sheet5


customer = reportsheet.Range("A1").Value  'picks up the name of the client
edress = Application.WorksheetFunction.VLookup(customer, erange, 2, False)

reportsheet.Range("B1").Value = edress
copysheet.Range("A2:N1000").Clear  ' clears data from sheet5 
reportsheet.Range("A2:N1000").ClearContents 'clears data from sheet2 

datasheet.Select 'sheet1

finalrow = Cells(Rows.Count, 1).End(xlUp).Row 

For i = ActiveCell.Row To finalrow
If Cells(i, 5) = customer Then  
Range(Cells(i, 1), Cells(i, 14)).Copy 
copysheet.Select 'selcts sheet5 to copy the data
Range("A200").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlCellTypeVisible  
Range("A200").End(xlUp).Offset(0, 0).PasteSpecial Paste:=xlFormats 
datasheet.Select

  End If
Next i

copysheet.Select
Set outlookapp = CreateObject("Outlook.Application")
Set outlookmailitem = outlookapp.createitem(0)
Set myAttachments = outlookmailitem.Attachments

我希望宏仅从可见单元格中复制所选客户的可见单元格(不包括标题)。不包括排除的单元格 - 即使它们来自同一客户。

标签: excelvba

解决方案


推荐阅读