自动填充活动工作表后,另一张工作表上的自动填充不起作用(无错误)

Posted

技术标签:

【中文标题】自动填充活动工作表后,另一张工作表上的自动填充不起作用(无错误)【英文标题】:Autofill on another sheet not working after autofilling the active sheet (no error) 【发布时间】:2019-11-22 12:04:24 【问题描述】:

我正在尝试重写我的代码以避免选择和激活,但我遇到了问题。这可能很简单,但我将不胜感激。

我一直在寻找类似的问题,但如果这是重复的,我很抱歉。

当我运行我的代码时,选择案例有效,("Artikelen maken") 上的自动填充有效,但另一张表不会自动填充

Public rngab As Range
Public rngc As Range
Public rngdk As Range
Public rngac As Range
Public rngdi As Range
Public rngrow As Range

Sub samenstelling1()

Set rngrow = ActiveSheet.Rows(2)
Set rngab = ActiveSheet.Range("a2:b2")
Set rngc = ActiveSheet.Range("c2")
Set rngdk = ActiveSheet.Range("d2:k2")
Set rngac = ActiveSheet.Range("a2:c2")
Set rngdi = ActiveSheet.Range("d2:i2")

        Case Is = 2
            With Sheets("Artikelen_aanmaken")
                rngrow.Offset(19).Resize(10).EntireRow.Hidden = True
                rngab.AutoFill Destination:=rngab.Resize(2), Type:=xlFillSeries
                rngc.AutoFill Destination:=rngc.Resize(2), Type:=xlFillDefault
                rngdk.AutoFill Destination:=rngdk.Resize(2), Type:=xlFillSeries
            End With

                With Sheets("Artikelen_in_stuklijsten")      'also tried with .activate
                    rngrow.Offset(19).Resize(10).EntireRow.Hidden = True
                    rngac.AutoFill Destination:=rngac.Resize(2), Type:=xlFillSeries

                    rngdi.AutoFill Destination:=rngdi.Resize(2), Type:=xlFillDefault
                    'does work as
                    'rngac.Select
                    'Selection.AutoFill Destination:=rngac.Resize(2), Type:=xlFillSeries
                End With

这是我正在尝试重写的工作代码

'             Sheets("Artikelen_in_stuklijsten").Activate
'             Range("18:30").EntireRow.Hidden = True
'             Range("A2:c2").Select
'             Range("A2:c2").AutoFill Destination:=Range("A2:c3"), Type:=xlFillSeries
'             Range("d2:i2").Select
'             Range("d2:i2").AutoFill Destination:=Range("d2:i3"), Type:=xlFillDefault

用这个修复它:

Set rngrow = Sheets("Artikelen_aanmaken").Rows(2)
Set rngab = Sheets("Artikelen_aanmaken").Range("a2:b2")
Set rngc = Sheets("Artikelen_aanmaken").Range("c2")
Set rngdk = Sheets("Artikelen_aanmaken").Range("d2:k2")
Set rngac = Sheets("Artikelen_in_stuklijsten").Range("a2:c2")
Set rngdi = Sheets("Artikelen_in_stuklijsten").Range("d2:i2")

Samenstelling.UserForm_Initialize
Samenstelling.Show

Range("q500") = letter
Range("N500") = tekeningnr
Range("P500") = revletter
Range("R500") = omschrijving
Range("O500") = posnummer

Select Case posnummer
Case Is = 4
                With Sheets("Artikelen_aanmaken").Activate
                    rngrow.Offset(19).Resize(10).EntireRow.Hidden = True
                    rngab.AutoFill Destination:=rngab.Resize(4), Type:=xlFillSeries
                    rngc.AutoFill Destination:=rngc.Resize(4), Type:=xlFillDefault
                    rngdk.AutoFill Destination:=rngdk.Resize(4), Type:=xlFillSeries
                End With

                    Sheets("Artikelen_in_stuklijsten").Activate
                        rngrow.Offset(19).Resize(10).EntireRow.Hidden = True
                        rngac.Select
                        Selection.AutoFill Destination:=rngac.Resize(4), Type:=xlFillSeries
                        rngdi.Select
                        Selection.AutoFill Destination:=rngdi.Resize(4), Type:=xlFillDefault

【问题讨论】:

您的代码中有一些特殊之处,我不确定您是否犯了错误。 Case Is = 2 和你的 Withs 中没有点是我想到的最重要的两件事。 @Sam 绝对是错误的,我是初学者。 case is = 2 只是我选择案例的一部分,但我不想粘贴整个代码。我在with 声明中缺少什么点,以便我可以改进它。谢谢 With something 是表示With 中以. 开头的所有内容的简写,将被解释为something.ThatComesAfterTheDot。在您的情况下,我认为您应该将 Set rng... 移到 withs 中。删除ActiveSheet,但保留点。 @Sam 我试图避免在with 中使用set rng,因为select case 的长度为16,所有案例中都有2 个with 语句。如果没有任何效果,我会回到rng.select,然后selection.autofill... with 语句前面添加点会令人遗憾地出错 【参考方案1】:

我对您的代码进行了一些重新排列,但尚未对其进行测试。更多地将其视为对概念的解释,而不是可行的解决方案:

With Sheets("Artikelen_aanmaken")
    Set rngrow = .Rows(2)
    Set rngab = .Range("a2:b2")
    Set rngc = .Range("c2")
    Set rngdk = .Range("d2:k2")
    Set rngac = .Range("a2:c2")
    Set rngdi = .Range("d2:i2")

    rngrow.Offset(19).Resize(10).EntireRow.Hidden = True
    rngab.AutoFill Destination:=rngab.Resize(2), Type:=xlFillSeries
    rngc.AutoFill Destination:=rngc.Resize(2), Type:=xlFillDefault
    rngdk.AutoFill Destination:=rngdk.Resize(2), Type:=xlFillSeries
End With

【讨论】:

你不能设置 .range.row (或者你可以但只能使用 with 声明),很遗憾那行不通。我想我只是选择和激活,因为您的概念意味着选择所需的工作量的 32 倍。感谢您尝试提供帮助:) 可悲的是...rngac.select 仅适用于案例 3,从案例 4 开始,它会给出错误 method select of class range failed。这很奇怪,因为我只是选择了一些单元格。但后来我将激活更改为在with sheets(..) 行中选择,然后它适用于 cae 1-4。现在又坏了

以上是关于自动填充活动工作表后,另一张工作表上的自动填充不起作用(无错误)的主要内容,如果未能解决你的问题,请参考以下文章

如果不同工作表上的值匹配,则将数据从一张工作表复制到另一张工作表

Excel 一张工作表变动后,怎么自动更新另一张表中的数据

基于另一个工作表的自动填充动态范围

Excel VBA 评估另一张工作表中的公式

如何根据用户 ID 在 Excel 中自动填充 FIRST 日期

在工作簿中查找所有匹配项并将结果偏移到另一张工作表中(VBA)