格式化功能错误

时间:2018-03-22 10:47:46

标签: excel vba excel-vba date database-connection

我目前正在尝试更新格式为

的工作簿连接

Messergebnisse-2018年3月22日

我每天都链接一个文件,所以我想只更新最新的连接。

这是我一直在使用的代码,但总是会出现错误:

Sub Refresh()

 Dim LDate As String
 LDate = Date

If Day(Today) >= 10 Then
 Application.ScreenUpdating = False
 ActiveWorkbook.Connections("Messergebnisse-" & format(Date,"yyyy-m-dd")).Refresh
 Sheets("OK").Select
 ActiveSheet.PivotTables("PivotTable1").PivotCache.Refresh
 Sheets("Summary").Select

Else
 Application.ScreenUpdating = False
 ActiveWorkbook.Connections("Messergebnisse-" & LDate).Refresh
 Sheets("OK").Select
 ActiveSheet.PivotTables("PivotTable1").PivotCache.Refresh
 Sheets("Summary").Select

End If
End sub

尝试使用变量作为日期和实际格式函数。

但格式化功能带有错误:

编译错误:

  

参数数量错误或属性分配无效

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

编译错误是因为If Day(Today) >= 10 Then

应为If Day(Now) >= 10 Then

为避免编译错误,请在模块/类/工作表的顶部写入Option Explicit,然后在运行代码之前从VB功能区中选择Debug>Compile。它总是会告诉您代码是否可以编译以及错误在哪里。

检查这个小样本:

Sub TestMe()
    MsgBox Day(Now)
End Sub

答案 1 :(得分:1)

您需要替换

If Day(Today) >= 10 Then

If Day(Date) >= 10 Then

注意:您应该避免使用SelectActiveSheet,而是完全定义和Set所有对象。您可以通过调整以下代码来实现:

Dim OKSht As Worksheet
Dim PvtTbl As PivotTable

' set the worksheet object
Set OKSht = ThisWorkbook.Sheets("OK")

' set the Pivot-Table object
Set PvtTbl = OKSht.PivotTables("PivotTable1")

' refresh the Pivot-Table PivotCache
PvtTbl.PivotCache.Refresh

答案 2 :(得分:0)

  1. 在此声明LDate = Date中,您依赖于区域设置。这是错的。
  2. 您必须只使用一次时间戳。这是规则。
    但是你再次拍摄Day(Today)(意为DateNow
    再一次format(Date,"yyyy-m-dd")
  3. 正如我所看到的,你试图避免代表1-和...的问题。 2位日历日编号 好。但这样的问题正等着你和monthes :) 但是,“yyyy-m-d”的格式模式可以满足您的需求。
  4. ScreenUpdating未恢复。
  5. 额外重复的代码
  6. 总之,它必须看起来像这样(不考虑我面前发布的所有其他重要说明):

    Sub Refresh()
    Dim dDate As Date
    Dim sDate$, sCncStr$
    
        dDate = Date
    
        sCncStr = "Messergebnisse-"
    
    '    Select Case (Day(Today) >= 10) ' remained for the case of I misunderstand you
    '        Case True ' Format it on your choice
    '            sDate = 'Format$(dDate, "yyyy-m-dd")
    '        Case False
    '            sDate = 'CStr(dDate)
    '    End Select
    
        sDate = Format$(dDate, "yyyy-m-d")
    
        sCncStr = sCncStr & sDate
    
        Application.ScreenUpdating = False
            ActiveWorkbook.Connections(sCncStr).Refresh
            Sheets("OK").Select
            ActiveSheet.PivotTables("PivotTable1").PivotCache.Refresh
            Sheets("Summary").Select
        Application.ScreenUpdating = True
    End Sub