Excel VBA - 当单元格范围大于 1 时出现“运行时错误 13:类型不匹配”

Excel VBA - 当单元格范围大于 1 时出现“运行时错误 13:类型不匹配”

我正在尝试使用 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

相关内容