【问题标题】:Format function error格式化函数错误
【发布时间】:2018-08-31 18:36:03
【问题描述】:

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

的工作簿连接

消息传递-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

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

但是格式化函数会报错:

编译错误:

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

有什么想法吗?

【问题讨论】:

  • 错误出现在哪一行?
  • 错误在哪一行?为什么不格式化第二个选项 day>=10 中的日期?

标签: vba excel date database-connection


【解决方案1】:

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

应该是If Day(Now) >= 10 Then

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


检查这个小样本:

Sub TestMe()
    MsgBox Day(Now)
End Sub

【讨论】:

  • 谢谢玩弄并设法在 Dim LDate As String LDate = Year(Date) & "-" & Month(Date) & "-" & Day(Date) If Day (现在)>= 10 然后 Application.ScreenUpdating = False ActiveWorkbook.Connections("Messergebnisse-" & LDate).Refresh
【解决方案2】:

你需要更换

If Day(Today) >= 10 Then

与

If Day(Date) >= 10 Then

注意:您应该避免使用Select 和ActiveSheet,而是完全定义和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

【讨论】:

    【解决方案3】:
    1. 在此声明LDate = Date 中,您依赖于语言环境。错了。
    2. 您只能获取一次时间戳。这是规则。
      但是你再拿一次Day(Today)(意思是Date或Now)
      再次format(Date,"yyyy-m-dd")。
    3. 如我所见,您尽量避免表示 1 位和 2 位日历日数的问题。
      好的。但是这样的问题正等着你呢 :)
      但是“yyyy-m-d”的格式模式可以满足您的需求。
    4. ScreenUpdating 未恢复。
    5. 额外的重复代码

    它必须看起来像这样(不考虑我之前发布的所有其他重要注释):

    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
    

    .

    【讨论】:

    • 非常感谢,感谢所有的修改和代码。有很大的帮助!
    猜你喜欢
    • 2015-02-21
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 2016-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多