我正在尝试使用 VBA,以便单击按钮将工作表保存为特定名称(链接到某个单元格),但是,如果某些单元格为空白,我希望它取消保存。
当为 1 个单元格执行代码时,它运行良好,但是,当我放置一个单元格范围时,它会给我一个“运行时错误 13:类型不匹配”错误。
我的代码如下:
Private Sub CommandButton1_Click()
IF Sheets("Event").range("C4:C24").Value = "" Then
Cancel = True
MsgBox "Please fill in column C"
Else
Dim IntialName As String
Dim fileSaveName As Variant
InitialName = range("c7")
fileSaveName = Application.GetSaveAsFilename(InitialFileName:=InitialName, _
fileFilter:="Excel Files (*.xlsm), *.xlsm")
If fileSaveName <> "False" Then
Application.DisplayAlerts = False
ThisWorkbook.SaveAs (fileSaveName)
Application.DisplayAlerts = True
End If
End If
End Sub
答案1
Range(...)
没有指定属性则返回其默认属性.Value
。
如果范围包含 1 个单元格,则.Value
返回标量值。
如果范围包含多于 1 个单元格,.Value
则返回 的二维数组Variant
。当然它不能被赋值给String
类型变量或与字符串文字进行比较。
答案2
谢谢@Mathieu Guindon 和@Akina。
我已将脚本更改如下,现在它可以正常工作:
Private Sub CommandButton2_Click()
Dim myrange As range
Set myrange = Worksheets("Event").range("C4:C24")
If Application.WorksheetFunction.CountA(myrange) < _
myrange.Cells.Count Then
Cancel = True
MsgBox "Cells in column C must not be empty."
Else
Dim IntialName As String
Dim fileSaveName As Variant
InitialName = range("c7")
fileSaveName = Application.GetSaveAsFilename(InitialFileName:=InitialName, _
fileFilter:="Excel Files (*.xlsm), *.xlsm")
If fileSaveName <> "False" Then
Application.DisplayAlerts = False
ThisWorkbook.SaveAs (fileSaveName)
Application.DisplayAlerts = True
End If
End If
End Sub