我有一个代码,当标题是文本(如'日期1','日期2',...)时工作正常,但日期1,2...。应该是实际日期,可以在另一个工作表中找到(最初来自数据透视表)。
因此,只要我将'date 1'替换为日期,如01/08/2023或公式,以从另一个工作表中获取日期,它就会出错,我在这一行得到一个运行时错误1004:
ShtSource.Range("A13").CurrentRegion.AdvancedFilter xlFilterCopy, CriteriaRange, CopyToRange
字符串
这是完整的代码:
Sub Proposal()
' voorstel om door te sturen naar de klant
Dim c As Range
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Dim ShtSource As Worksheet: Set ShtSource = ThisWorkbook.Sheets("Voorstel")
Dim CopyToRange As Range: Set CopyToRange = Workbooks.Add.Sheets(1).Range("A1").Resize(2, 6)
Dim CriteriaRange As Range: Set CriteriaRange = CopyToRange.Offset(, 8).Resize(2, 1)
CopyToRange.Resize(1) = Array(ShtSource.[a13], ShtSource.[b13], ShtSource.[d13], ShtSource.[f13], ShtSource.[h13], ShtSource.[j13])
CriteriaRange.Value = Application.Transpose(Array("# Pal", "<>0"))
ShtSource.Range("A13").CurrentRegion.AdvancedFilter xlFilterCopy, CriteriaRange, CopyToRange
CriteriaRange.ClearContents
Application.DisplayAlerts = True
Range("A1").Select
Range("A1").Activate
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 15773696
.TintAndShade = 0
.PatternTintAndShade = 0
End With
With Selection.Font
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
End With
Range("B1:F1").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 49407
.TintAndShade = 0
.PatternTintAndShade = 0
End With
With Selection.Font
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
End With
Columns("A:G").Select
Range("A1").Activate
Columns("A:G").EntireColumn.AutoFit
Range("A1").Select
End Sub
型
我不知道为什么这段代码将不再工作,只要我用同一个单元格中的日期文本替换单元格,我尝试了不同的格式,但这也不起作用。
有人知道问题出在哪里吗?
这是我的文件看起来像:
x1c 0d1x的数据
这就是我需要的结果:
的
1条答案
按热度按时间cu6pst1q1#
问题出在
Range.AdvancedFilter
方法的CopyToRange
参数上。首先,我将你的代码简化为一个更短的测试用例:
字符串
在我的测试用例中,我输入了日期1/8/2023,而不是B13中的datum 1。然后,我得到了你得到的错误。你自己试试这个。您将看到它创建的工作簿已经复制了标题,但日期的格式不存在,它被转换为常规格式。这将更改新工作簿上单元格中的测试。由于新工作表中的范围内容不相同,因此会抛出错误。因此,您需要更改新工作表中包含日期的单元格的格式。您可以使用
Range.NumberFormat
方法来实现这一点。在我的测试示例中,添加这一行:
型
在
AdvanceFilter
行修复这个问题之前,因为我正在更改日期格式(以及单元格中的文本)以匹配我们正在复制的范围。(请记住,您可能不会使用此日期格式,因为这是美国格式。一般来说,当你的代码没有按预期工作时,试着创建一个非常简单的测试用例来复制这个问题。这更容易遵循和调试,然后您可以将结果带回到“真实的的”代码中。