【问题标题】:Excel VBA save as name "MONTH" converted to number (two digits)Excel VBA另存为名称“MONTH”转换为数字(两位数)
【发布时间】:2019-01-11 12:03:23
【问题描述】:

我是新来的,也是 VBA 的。我试图找出将活动工作表导出到新工作簿(只是值)并将其保存为特定名称,其中部分名称必须以月份转换为两位数格式。 更具体地说,“D4”中有一个月份名称。我需要使用本月新工作簿的名称但转换为两位数格式。

With ActiveSheet
                ActiveSheet.Range("A1:M40").Copy
                    Set NewBook = Workbooks.Add
                    With NewBook
                        NewBook.Worksheets("Sheet1").Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
                        SkipBlanks:=False, Transpose:=False
                        Dim LMonth As Integer
                        NewBook.SaveAs Filename:=ThisWorkbook.Path & "\" & Range("D4") & "_" & Range("I2") & "_" & " FLA"
                    End With
          End With

这是将工作表打印为 pdf 然后将工作表导出到新工作簿的完整代码:

Private Sub Print_PDF_Click()
With ActiveSheet
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
       ThisWorkbook.Path & "\" & ActiveSheet.Name & " " & Range("I2") & " FLA" _
       , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
       :=False, OpenAfterPublish:=True
          With ActiveSheet
                ActiveSheet.Range("A1:M40").Copy
                    Set NewBook = Workbooks.Add
                    With NewBook
                        NewBook.Worksheets("Sheet1").Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
                        SkipBlanks:=False, Transpose:=False
                        Dim LMonth As Integer
                        NewBook.SaveAs Filename:=ThisWorkbook.Path & "\" & Format(Range("D4"),"mm") & "_" & Range("I2") & "_" & " FLA"
                    End With
          End With
    MsgBox "PDF successfully created!"
End With 
End Sub

请帮忙!

【问题讨论】:

  • 单元格中确实有月份的名称,还是单元格包含日期并格式化为显示月份的名称?
  • "D4" 包含月份名称为 "January, February ...etc."格式化为日期。因此,如果有“May”,我需要新工作簿名称中的“05”。
  • 我仍然不清楚:如果您选择带有月份的单元格:顶部的数据输入字段中显示什么?一个约会?那么字段的content就是一个日期。在这种情况下,只需使用format(Range("D4"), "MM")
  • "MM" 将其保存为月份名称而不是两位数(“January”而不是“01”)。

标签: vba excel


【解决方案1】:

看起来有点搞笑,但试试看

=TEXT(MONTH(DATEVALUE(D4 & "1")),"00")

http://www.exceltip.com/tips/converting-month-name-to-a-number-in-excel-2010-2013.html

【讨论】:

  • 我不想转换“D4”。我只需要在新工作簿的名称中使用“D4”值,但转换为两位数格式。
  • 05 而不是5, =TEXT(MONTH(DATEVALUE(D4 & "1")),"00")
  • 谢谢@CLR,错过了两位数。已编辑。
  • 代码不会像这样转换 D4,它会转换 D4 中的值.... 目前它只是文本 - Excel 不明白它只是一个日期,只是它是一些文本 -那里也可以是“Nuficek”。现在,DateValue 可以将文本字符串转换为日期 - DateValue("Nuficek 1") 将返回错误,但 DateValue("August 1") 将返回 01/08/2018,然后可以将其格式化为显示月份编号 - 8,或@CLR 添加了08
【解决方案2】:

使用 VBA 等效于 @asantaballa 的奇怪但很棒的 Excel 公式..

NewBook.SaveAs 行的文件名更改为

 Filename:=ThisWorkbook.Path & "\" & Format(DateValue(Range("D4") & " 1"), "mm") & "_" & Range("I2") & "_" & " FLA"

这需要D4 中的月份,附加" 1" 使其看起来像一个真实的日期,然后使用DateValue 将其转换为日期值,然后我们可以使用Format 推导出号码来自。

所以AUGUST 在单元格 D4 中

通过附加“1”变为AUGUST 1

使用DateValue 函数变成01/08/2001

将其格式化为mm 以生成08

【讨论】:

  • 它说“语法错误”。你确定 ("D4") 和 "1") 之间有 & 号吗?
  • 你只是改变了一切之后 NewBook.SaveAs是吗?
  • 这将产生一个文件名,例如"path\05_[contents of I2]_ FLA" - 你想要那个空间吗?您不想以.xlsx 或类似名称结尾吗?
  • 语法错误现在出现在创建 PDF 的上一部分。所以禁用这部分代码,导出就像一个魅力!非常感谢@CLR!
猜你喜欢
  • 1970-01-01
  • 2011-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-01
  • 1970-01-01
  • 2012-08-07
  • 2018-03-06
相关资源
最近更新 更多