Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel “如何修复”;对象变量或未设置块变量";_Excel_Vba - Fatal编程技术网

Excel “如何修复”;对象变量或未设置块变量";

Excel “如何修复”;对象变量或未设置块变量";,excel,vba,Excel,Vba,只有当我尝试跨多个框执行宏时,才会出现此错误,这些框的开始选择样式并不相同 Sub Remove_Decimals() ' ' Remove_Decimals Macro ' ' Keyboard Shortcut: Ctrl+Shift+V ' If Selection.Style = "Percent" Then Else: Selection.NumberFormat = "_($* #,##0.0_);_($* (#,##0.0);_($* ""-""??_);_

只有当我尝试跨多个框执行宏时,才会出现此错误,这些框的开始选择样式并不相同

Sub Remove_Decimals()
'
' Remove_Decimals Macro
'
' Keyboard Shortcut: Ctrl+Shift+V
'
    If Selection.Style = "Percent" Then
    Else:
    Selection.NumberFormat = "_($* #,##0.0_);_($* (#,##0.0);_($* ""-""??_);_(@_)"
    Selection.NumberFormat = "_($* #,##0_);_($* (#,##0);_($* ""-""??_);_(@_)"
    End If
End Sub
尝试以下方法(仅重复使用代码):

Sub-Remove_Decimals()
'
'删除小数宏
'
'键盘快捷键:Ctrl+Shift+V
'
Dim rngCell As范围
对于选择中的每个rngCell
如果rngCell.Style为“百分比”,则
rngCell.NumberFormat=“($*#,###0.0_);($*(#,####0.0);($*“”-“”?);(@)
rngCell.NumberFormat=“($*#,###0_);($*(#,####0);($*)”-“”?(@)
如果结束
下一个rngCell
端接头

但不确定为什么要应用两次格式?

关闭
选择
假定存在选择。如果未选择任何内容,
选择
无内容
,访问其成员时会抛出错误91,就像您得到的一样


关闭
选择。样式
要求当前选择具有
样式
属性,但
选择
可以是
形状
图表
,不一定是单元格的
范围

确保这一点的唯一方法是验证
选择的数据类型
-将此guard子句添加到代码的开头,应修复它:

If Not TypeOf Selection Is Excel.Range Then Exit Sub
现在我们知道我们正在查看一个
范围
,可以安全地将其转换到该接口,并删除只在运行时解决的延迟绑定代码(并且任何键入都有可能出现错误438…这
选项显式
将无法识别):

现在,我知道我们通常更喜欢正条件,但在
Else
部分中用整个逻辑生成一个空条件块是没有意义的。反转该条件并删除空块-如果您要写入一个值只是为了覆盖下一个语句,请直接跳到第二个赋值:

If selectedCells.Style <> "Percent" Then
    selectedCells.NumberFormat = "_($* #,##0_);_($* (#,##0);_($* ""-""??_);_(@_)"
End If

你能分享一个导致错误的数据截图样本吗?是的,我刚刚把它添加到问题中。在应用宏之前选择所有这些单元格会给我一个错误。(不允许我将图片作为截图发布,因为没有足够的信誉点数)无法再现您提供的屏幕截图和代码中的错误。将
Option Explicit
添加到模块顶部,然后重新运行。它是否标记可能的输入错误?没有标记输入错误。MARC有时有效,但不总是有效,我不确定导致错误的参数到底是什么。
If selectedCells.Style <> "Percent" Then
    selectedCells.NumberFormat = "_($* #,##0_);_($* (#,##0);_($* ""-""??_);_(@_)"
End If
Public Sub RemoveDecimals()
    'bail out if no cells are selected:
    If Not TypeOf Selection Is Excel.Range Then Exit Sub 

    Dim cell As Range
    For Each cell In selectedCells
        'ignore non-numeric and percentage cells:
        If IsNumeric(cell.Value) And cell.Style <> "Percent" Then
            cell.NumberFormat = "_($* #,##0_);_($* (#,##0);_($* ""-""??_);_(@_)"
        End If
    Next
End Sub