如何使用 VBA 从单元格中获取一些字符

Posted

技术标签:

【中文标题】如何使用 VBA 从单元格中获取一些字符【英文标题】:How can I get some characters from a cell with VBA 【发布时间】:2020-05-25 08:58:43 【问题描述】:

我正在尝试使用 vba 保存一个 excel 文件,我希望该文件中的文件名是单元格 A3 中的一些字符。

假设我的单元格 A3 的下一个数字是 2420561300,我希望我的文件名仅从该数字中获取前 6 个字符作为其名称:242056。

我有以下代码:

With Application.FileDialog(msoFileDialogSaveAs)
.Title = "Please choose where to save the file and a name to it"
.ButtonName = "Save Excel"
Set rng = Range("A3").Value
.InitialFileName = "C:\Users\admin\Desktop\" & rng
If .Show = 0 Then
    MsgBox "File was not saved.", vbCritical
    Exit Sub
End If

从这段代码中,我得到的文件名是整数,但是我怎样才能从那个 Range().Value 中只得到一些字符? 谢谢您的回答。我检查了几篇帖子,但找不到解决方案。

【问题讨论】:

试试Left(Range("A3").Value, 6)。如果 rng 已被声明为 As Range,则 Set rng = Range("A3").Value 不正确。至少,如果你喜欢它是一个范围。否则,VBA 可能会将其视为Variant...无论如何,请尝试声明所有变量。将Option Explicit 放在模块顶部! 非常感谢@FaneDuru,效果很好!!我不敢相信事情这么简单,谢谢! 设置Range的正确方法是Set rng = Range("A3") 谢谢,我也会考虑的! 【参考方案1】:

为了直接SaveAs一个工作簿,你可以这样进行:

Dim fullFilename As String
fullFilename = "C:\Users\admin\Desktop\" & left(Range("A3").value, 6) & ".xlsx"
ActiveWorkbook.SaveAs fileName:=fullFilename, FileFormat:=xlWorkbookDefault

以上代码假定您的Range("A3") 也不包含扩展名。如果包含,则必须删除fullFilename 定义的最后一部分。

如果您坚持使用对话框并使其显示要保存的名称,请使用: .InitialFileName = "C:\Users\admin\Desktop\" & Left(Range("A3").Value, 6) & ".xlsx"

【讨论】:

【参考方案2】:
With Application.FileDialog(msoFileDialogSaveAs)
.Title = "Please choose where to save the file and a name to it"
.ButtonName = "Save Excel"
.InitialFileName = "C:\Users\admin\Desktop\" & Left(Range("A3").Value, 6)
If .Show = 0 Then
    MsgBox "File was not saved.", vbCritical
    Exit Sub
End If
End With

@FaneDuru 在 cmets 中给了我正确的答案,非常感谢。它只是添加Left(Range("A3").Value, 6)

【讨论】:

但这是一个对话框,在您显示的内容中,您可以设置最初显示对话框的文件夹。如果您需要 SaveAs 获取特定名称,我可以告诉您如何操作。无论如何,您上面的代码错过了End With...您想保存什么扩展名? xlsx?你必须知道,当保存一些东西时...... 哦,是的,对不起,我忘记输入End With。是的,对不起,我也忘了提,我把它做成了一个对话框,所以你可以选择保存它的位置和文件名,但我希望初始文件名与对话框中的文件名一样,因为大多数文件名都具有这种格式。是的,我想将它保存为 xlsx,因为我希望所有宏都消失,该代码只是整个代码的一部分。没问题,我解决了剩下的,我只需要看看如何将单元格中的一些字符保存为文件名,谢谢! 如果你想保存在一个特定的位置并且你知道它,你会浪费时间使用对话框,但这只是一个意见...... 我知道,但问题是位置可能因文件不同而异,所以我更喜欢提供对话框,以便人们可以选择保存位置。

以上是关于如何使用 VBA 从单元格中获取一些字符的主要内容,如果未能解决你的问题,请参考以下文章

如何从单元格中删除换行符,但将地址格式保留在同一单元格VBA中

从excel vba的列中的所有单元格中删除不需要的字符

vba去掉单元格中的'

Word VBA如何将标题仅应用于表格单元格中的第一行

如何从具有多个数组的字典中获取特定键并存储到放置在表格视图单元格中的字符串中

如何从包装的文本单元格中提取特定的文本行?