我比VBA更新VBA。在使用ADO.NET时,我遇到了项目被破坏的情况,而且由于缺乏更好的词,你会破坏你的项目。此过程来自一个较大的项目,该项目将呼叫中心代理性能的自动报告汇总在一起,特别是将查找最近七天的结果,然后删除该范围内的任何其他值,以便由工作簿中的另一个工作表计算。
背景故事:我已经使用这个程序大约三个星期没有问题。有一天,我正在运行我的报告,并且默认格式函数出现了ByRef错误,特别是变量" d"。在语法稍微偏离的情况下尝试了一堆重写格式函数的东西:格式([string],"短日期"),格式([日期],"短日期&# 34;),格式([日期]," mmddyyyy")和格式([string]," mmddyyyy")都导致ByRef错误。我希望有一个简单的.toshortdatestring像VB.NET。尝试创建我自己的格式功能也无济于事。
然而,当我将所有代码 - 完全 - 粘贴到我的一个备份中时,ByRef错误消失了......我以为我刚刚打破了那个工作簿,所以我将所有模块复制并粘贴到我的备份中并继续我的快乐方式。一周后,再次运行我的报告,我在Format函数中得到相同的ByRef错误,突出显示变量d。有任何想法为什么这种情况一直在发生?在此先感谢!!
Excel 2013 - 文件大小约7 MB - 28张 - 14张多个countifs / sumifs从原始数据中提取特定的代理统计信息 - 没什么特别的。
Sub Last7Days(lastcolumn As String, wksht As Worksheet, width As Integer, datasheet As String)
Dim sht As Worksheet
Dim column As Long
Set sht = wksht
Dim rng As Range, inclusiveRange As Range
Dim startDate As Long, endDate As Long
column = 1
Dim d As Date
d = DateAdd("d", -7, Now)
d = Format(d, "Short Date")
Dim startdatestring As String
startdatestring = CStr(d)
Dim enddatestring As String
wksht.Activate
Call LastRowInA
Range("a" & LastRowInA).Select
enddatestring = CStr(ActiveCell.value)
startDate = DateValue(startdatestring)
endDate = DateValue(enddatestring)
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
wksht.Activate
sht.Cells(1, column).AutoFilter Field:=column, Criteria1:=">=" & startDate, Operator:=xlAnd _
, Criteria2:="<=" & endDate
Set rng = sht.Range(sht.Cells(2, column), sht.Cells(sht.Cells(sht.Rows.Count, column).End(xlUp).Row, column)).SpecialCells(xlCellTypeVisible)
sht.AutoFilterMode = False
If rng.Address = sht.Cells(1, column).Address Then
MsgBox Format(startDate, "dd-mmm-yyyy") & " - " & Format(endDate, "dd-mmm-yyyy") _
& vbCrLf & vbCrLf & "No instances of the date range exist"
Else
Set inclusiveRange = sht.Range(rng.Cells(1, 1), rng.Cells(rng.Count, width))
inclusiveRange.Select
Selection.Cut
ActiveSheet.Paste Destination:=Worksheets(datasheet).Range("a2")
Dim Start As String
Dim size As Long
'Set size = Nothing
Start = "A" & (rng.Count + 1)
size = Range("a" & rng.Count, Range("a" & rng.Count).End(xlDown)).Rows.Count
Range("a" & (rng.Count + 1) & ":I675000").Select
Selection.Clear
End If
Dim LastDateValue As String
LastDateValue = enddatestring
startdate1 = DateValue(LastDateValue)
endDate1 = DateValue(LastDateValue)
Dim testDate As Date
Dim testDateInteger As Integer
testDate = startdate1
testDateInteger = Weekday(testDate)
If testDateInteger = 2 Then
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
wksht.Activate
sht.Cells(1, column).AutoFilter Field:=column, Criteria1:=">=" & startdate1, Operator:=xlAnd _
, Criteria2:="<=" & endDate1
Set rng = sht.Range(sht.Cells(2, column), sht.Cells(sht.Cells(sht.Rows.Count, column).End(xlUp).Row, column)).SpecialCells(xlCellTypeVisible)
sht.AutoFilterMode = False
Set inclusiveRange1 = sht.Range(rng.Cells(1, 1), rng.Cells(rng.Count, width))
inclusiveRange1.Select
Selection.Clear
End If
End Sub
答案 0 :(得分:0)
目前还不完全清楚发生了什么,这是真的,但是如果它是编译器错误的可能性很大,因为评论中的对话表明,它可能超出了您在代码中使用的函数的确切用途。要修复它,您可以尝试以稍微不同的方式重写相同的代码逻辑。假设您的错误与以下代码部分有关,我可以提出一些建议,并根据Excel对这些内容的反应,可能还有其他事情需要尝试。
Dim d As Date
d = DateAdd("d", -7, Now)
d = Format(d, "Short Date")
Dim startdatestring As String
startdatestring = CStr(d)
尝试将Option Explicit
添加到代码模块的顶部。这会导致VBA强制您明确Dim
所有变量,虽然它可能无法解决您的具体问题,但这是一个很好的编程习惯,它可能会揭示您可以解决的代码中的其他问题并从中解决方式。
尝试重写不带变量d
的代码部分。
Dim startdatestring As String
startdatestring = Format(DateAdd("d", -7, Now), "Short Date")