【问题标题】:VBA Excel: Make header depend on filenameVBA Excel:使标题取决于文件名
【发布时间】:2015-05-26 11:16:58
【问题描述】:

我创建了一个宏来处理文档的布局、打印属性等。 现在我想添加一种方法使标题依赖于文件名。如果文件名中有 W,则标题应为“每周报告”,否则应为“每日报告”。

这是应该处理的块:

If Filename.Contains("W") Then GoTo Week Else GoTo Day
Week:
    With ActiveSheet.PageSetup
    .LeftHeader = "Weekly report"
    End With
GoTo JumpToThere
Day:
    With ActiveSheet.PageSetup
    .LeftHeader = "Daily report"
    End With
JumpToThere:

(然后代码继续)

我在 IF 命令中不断收到“运行时错误 '424':需要对象”错误。 不好意思打扰了,我真的不太懂编码...

【问题讨论】:

  • 文件名中的文件是活动工作簿吗?
  • 是的。代码存储在个人中,但它与焦点工作簿有关。
  • 你能告诉我声明文件名的代码吗

标签: vba excel header filenames


【解决方案1】:

代码不包含Filename 声明和赋值,但如果是string,则应替换:

If Filename.Contains("W") Then

If Filename Like "*W*" Then 

你还可以简化if语句中的逻辑,去掉GoTo

With ActiveSheet.PageSetup
    If Filename Like "*W*" Then
      .LeftHeader = "Weekly report"
    Else
      .LeftHeader = "Daily report"
    End If
End With

编辑:

没有可以开箱即用的Filename 属性。如果您想比较活动工作簿的名称,您应该使用:

If ActiveWorkbook.Name Like "*W*" Then

【讨论】:

  • 这似乎可以工作(没有错误),但它会一直登陆“每日报告”,即使文件名包含“W”。我还需要在没有 GoTo 的情况下在您的示例中声明 Filename 吗?如果是这样,怎么做?请注意,本文档中没有定义,只是使用 Excel 中的 Record Macro 功能获得的纯代码。
  • 当我在等待回复时,我开始在自己周围胡闹,并找到了一些同样有效的方法。我在代码前面加上以下几行: Dim Filename As String Filename = ActiveWorkbook.FullName 非常感谢!
  • @Timmmmaaahh 请注意FullName,因为它包含完整路径,因此如果其中一个文件夹包含W,则测试可能会给出误报结果。 Name 仅包含文件名。
  • 太棒了!我在这里变得越来越聪明^_^
【解决方案2】:

请确保您已声明“文件名”并且在“文件名”中将出现正确的名称。然后像这样尝试 -

If InStr(Filename, "W") > 0 Then GoTo Week Else GoTo Day
    Week:
        With ActiveSheet.PageSetup
        .LeftHeader = "Weekly report"
        End With
    GoTo JumpToThere
    Day:
        With ActiveSheet.PageSetup
        .LeftHeader = "Daily report"
        End With
    JumpToThere:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多