自动填充活动工作表后,另一张工作表上的自动填充不起作用(无错误)
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
和你的 With
s 中没有点是我想到的最重要的两件事。
@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。现在又坏了以上是关于自动填充活动工作表后,另一张工作表上的自动填充不起作用(无错误)的主要内容,如果未能解决你的问题,请参考以下文章
如果不同工作表上的值匹配,则将数据从一张工作表复制到另一张工作表