【问题标题】:Method Range of Object_Worksheet i can only make the first or 2nd part workObject_Worksheet 的方法范围我只能使第一部分或第二部分工作
【发布时间】:2021-11-22 04:38:12
【问题描述】:

对不起我的英语。

我有一个代码问题,我从不同的工作表中获取信息到一张工作表。使用切片器,我只能获得必要的信息。一切都很好,直到我需要在复制数据之前对数据进行排序。使用表格并过滤并在列表中执行各种操作的人。当我在写这篇文章时,我在想也许我可以把它分成两部分,因为它以前工作得很好,所以为什么不只是一个过滤代码..我仍然想知道我的代码中的解决方案,因为我只是不明白为什么它不起作用。问题是(现在)在“复制粘贴”之后的代码的第二部分。

所有命名的引用都经过检查并正确(在过滤器部分之前它工作正常)但不知何故在过滤器部分它做了一些事情,所以复制粘贴的代码不会工作。

Option Explicit

Sub GetDataForSlicersSel()
Dim wsAF As Worksheet
Dim wsEM As Worksheet
Dim wsEI As Worksheet
Dim wsOP As Worksheet
Dim wsPG As Worksheet
Dim wsRK As Worksheet
Dim wsKM As Worksheet
Dim wsBK As Worksheet
Dim wsVE As Worksheet
Dim wsRE As Worksheet
Dim wsCP As Worksheet

Set wsAF = Sheets("afblijven")
Set wsEM = Sheets("1721 Energiemeters")
Set wsEI = Sheets("2704 E-installatie OA")
Set wsOP = Sheets("output")
Set wsPG = Sheets("Projectgegevens")
Set wsRK = Sheets("2601 Regelkast-OVK")
Set wsKM = Sheets("2611 Klein Materiaal")
Set wsBK = Sheets("2614 Bekabeling OA")
Set wsVE = Sheets("2621 Veldapparatuur")
Set wsRE = Sheets("2634 Regelinstallatie OA")
Set wsCP = Sheets("1711 Circulatiepompen")

Application.ScreenUpdating = False

'filter
wsEM.Select
wsEM.Sort.SortFields.Clear
Range("EMtabel").Sort key1:=Range("a2"), Header:=xlYes
ActiveSheet.Sort.SortFields.Clear
wsOP.Select

'copy paste
wsEM.Range("EMtabel[#All]").AdvancedFilter _
 Action:=xlFilterCopy, _
 CriteriaRange:=wsAF.Range("Critslicers"), _
 CopyToRange:=wsOP.Range("ExtractSlicersEM"), _
 Unique:=False

Application.ScreenUpdating = True


End Sub

【问题讨论】:

  • 此范围不符合工作表。 Range("EMtabel").Sort 这个也不是Key1:=Range("a2")
  • 阅读How to avoid using Select in Excel VBA可能会让您受益。
  • “问题是(现在)在‘复制粘贴’之后的代码的第二部分。”高级过滤器复制粘贴后我没有看到任何代码 - 那么到底是什么问题? ...(顺便说一句:您不需要在代码中定义所有工作表 - 使用代号(在工作表的 VBA 编辑器属性窗口中)
  • 使用CopyToRangeCriteriaRange,您似乎正在指定命名范围 - 这些命名范围是否存在?尝试为有问题的工作表设置正确的范围(例如“A1:D34”)。如果“Critslicers”真的是一个你已经确定了尺寸的变量,那么删除它周围的“s”,否则它将把变量当作那个字符串。
  • @Ike 问题出在代码上:``` wsEM.Range("EMtabel[#Al​​l]").AdvancedFilter _ Action:=xlFilterCopy, _ CriteriaRange:=wsAF.Range("Critslicers "), _ CopyToRange:=wsOP.Range("ExtractSlicersEM"), _ Unique:=False Application.ScreenUpdating = True ```不知何故它不再起作用了,因为我在它前面放了新代码``` wsEM.Select wsEM.Sort.SortFields.Clear Range("EMtabel").Sort key1:=Range("a2"), Header:=xlYes ActiveSheet.Sort.SortFields.Clear wsOP.Select ```

标签: excel vba filter copy-paste


【解决方案1】:

由于我的一个愚蠢错误而解决了。此代码不适用于 VBA 中的 F5 或 F8,但可用于按钮。感谢建议,我还稍微重写了代码。现在的代码(我仍然有暗淡和设置的部分,但由于帖子的长度我排除了这个):

    'filter
With wsEI.Sort
.SortFields.Add Key:=Range("a2"), Order:=xlAscending
.SetRange Range("E_installaties")
.Header = xlYes
.Apply
End With

'copy paste
With wsEI
.Range("E_installaties[#All]").AdvancedFilter _
  Action:=xlFilterCopy, _
  CriteriaRange:=wsAF.Range("Critslicers"), _
  CopyToRange:=wsOP.Range("ExtractSlicersEI"), _
  Unique:=False
End With

感谢大家的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-16
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-30
    相关资源
    最近更新 更多