';1004';使用Interior.Color Excel 2010 VBA ActiveX控件进行迭代时出错

';1004';使用Interior.Color Excel 2010 VBA ActiveX控件进行迭代时出错,vba,excel,syntax,activex,Vba,Excel,Syntax,Activex,提前谢谢你的建议 我有一个带有以下代码的活动X复选框: Private Sub CheckBox1_Click() Dim h As Long, r As Long h = 1400 r = 1429 If Sheets("SheetName").OLEObjects("CheckBox1").Object.value = True And Sheets("SheetName").CommandButton2.BackColor = RGB(192, 255, 192) Then Wh

提前谢谢你的建议

我有一个带有以下代码的活动X复选框:

Private Sub CheckBox1_Click()

Dim h As Long, r As Long
h = 1400
r = 1429
If Sheets("SheetName").OLEObjects("CheckBox1").Object.value = True And Sheets("SheetName").CommandButton2.BackColor = RGB(192, 255, 192) Then
    While h <= r
        If Range("O1329") = "Width MM" Then
            If Cells(h, "N").value - Cells(h, "AA").value > Range("Y1317") Then
                Cells(h, "N").Formula = "=((INT(AA" & h & "))-1)+0.25"
                Cells(h, "AA").Interior.Color = RGB(250, 250, 200)
            End If
        Else
            If Cells(h, "N").value - Cells(h, "W").value > Range("Y1317") Then
                Cells(h, "N").Formula = "=((INT(W" & h & "))-1)+0.25"
                Cells(h, "W").Interior.Color = RGB(250, 250, 200)
            End If
        End If
    h = h + 1
    Wend
End If

End Sub
专用子复选框1\u单击()
h和r一样长
h=1400
r=1429
如果Sheets(“SheetName”).OLEObjects(“CheckBox1”).Object.value=True,Sheets(“SheetName”).CommandButton2.BackColor=RGB(192255 192),则
而h范围(“Y1317”)则
单元格(h,“N”)。公式=“=(INT(AA)”和“h&”)1)+0.25”
单元格(h,“AA”).Interior.Color=RGB(250250200)
如果结束
其他的
如果单元格(h,“N”).值-单元格(h,“W”).值>范围(“Y1317”),则
单元格(h,“N”)。公式=“=(INT(W)”和“h&”)1)+0.25”
单元格(h,“W”).Interior.Color=RGB(250250200)
如果结束
如果结束
h=h+1
温德
如果结束
端接头
它挂在几个不同的地方。(请参见底部的编辑注释)

以下是我想做的:

范围1400-1429跨越多个包含相对数据的列,在本例中为高度测量,因此while语句用于迭代这些单元格。数据是行特定的,AA列和W列中的值来自用户输入,并且有一个公式可能会将N列中的值调整为“高度标准”

第一个If语句用于检查是否选中了复选框,以及是否按下了相邻的切换按钮(通过检查切换的颜色状态。该按钮工作正常,并且易于更改颜色)

If/Else语句应该检查我们使用的是公制还是英寸,并且应该选择从适当的列中提取值(W当我们使用英寸时,AA用于公制)。当我们使用公制时,单元格O1329填充“MM”。(注意:此项目的所有因数计算均以英寸为单位。此特殊接头不执行任何MM-in转换)

第三组If语句旨在使用范围(N,减去WAA)内某些列中单个单元格值之间的差值,并将该差值与另一个单元格(Y1317)进行比较。只有在Y1317中的值小于两个值的差值时,才会进行此操作。Y1317中的值表示高度测量中可接受的“公差”

一旦代码决定了要调整的单元格值,我需要一个公式将其自身插入到N列中的相应单元格中,并将其引用的单元格涂成黄色(在AA或W用户输入列中作为标志,具体取决于测量单位)

该公式旨在将适当的值向下舍入为整数,减去一(1),然后加上四分之一(0.25)

因此,总而言之,此代码旨在根据特定公差将标准应用于高度测量:如果选中复选框,并且按下按钮,并且如果差值大于允许的公差,则确定从哪个列中提取值(基于测量单位),并调整该值(从第1400行开始)根据公式,并用浅黄色标记从中提取值的列中的垂直对应单元格。连续做30次。(呸!)

再次感谢社区在此提供的帮助,我很高兴看到这将产生多个响应,这些响应将累积形成一个答案。请随时注意我是新手(对SO、VBA和一般的编码都是新手),请毫不犹豫地为我指出“更好”的方向。我正在努力成为一名优秀的程序员

编辑:

  • 我不小心在“第14行”上留下了错误的单元格引用。将
    单元格(h,“AA”)。值
    更改为
    单元格(h,“W”)。值
  • 感谢波特兰跑步者没有任何以往的经验。直到现在我都不知道我是怎么完成f8步骤的
  • 我的第一个f8步骤向我展示了用True验证复选框确实有效,而xlOn没有。研究差异
  • 在第11行和第16行(Interior.Color)上,进一步遍历会给我一个1004错误(应用程序定义或对象定义),我认为这意味着VBA不喜欢我引用范围给特定单元格着色的方式(可能?)
  • 现在我正试图修复1004错误,并研究Tim Williams的评论。
    Object.Object
    是我看到的东西,正如论坛上的一张海报所指出的,更简洁的
    表单(“SheetName”).OLEObjects(“CheckBox1”).Object.value
    对他们有用,所以我会试试。使用工作表参考进行资格认证似乎也是一件相当重要的事情,需要知道如何做

  • 主If的左侧部分将始终返回false,请尝试将其替换为:

    If Sheets("SheetName").CheckBox1 AND ...
    
    或者保持原样并删除=xlOn(这是整数值1,复选框对象的值为TRUE,FALSE)


    显示如何使用图纸引用限定范围和单元格(否则它们将默认为活动图纸):


    如果您单步执行代码(F8),是否会进入
    If
    条件?我会尝试将您的第一个
    If
    语句更改为:
    If CheckBox1.Value=True,然后
    ,现在忽略按钮的背景色,以确保您到达需要的位置。您确定要使用双
    .Object.Object
    ?很确定你只需要一个。。。此外,使用一个工作表引用来限定所有范围和单元格调用也是值得的(尽管从技术上讲,此代码仅在复选框可见/可单击时运行)@PortlandRunner,这对我来说是一个巨大的突破。真正的vs
    If Sheets("SheetName").Shapes("CheckBox1").OLEFormat.Object.Object.value AND ....
    
    Private Sub CheckBox1_Click()
    
    Dim h As Long, r As Long, rw as Long
    Dim sht as WorkSheet
    h = 1400
    r = 1429
    
    Set sht = Sheets("SheetName")
    
    If sht.OLEObjects("CheckBox1").Object.value = True And _
       sht.CommandButton2.BackColor = RGB(192, 255, 192) Then
    
       'For.. loop is a better fit here...
       For rw = h to r 
            If sht.Range("O1329") = "Width MM" Then
                If sht.Cells(rw, "N").value - sht.Cells(rw, "AA").value > sht.Range("Y1317") Then
                    sht.Cells(rw, "N").Formula = "=((INT(AA" & rw & "))-1)+0.25"
                    sht.Cells(rw, "AA").Interior.Color = RGB(250, 250, 200)
                End If
            Else
                If sht.Cells(rw, "N").value - sht.Cells(rw, "W").value > sht.Range("Y1317") Then
                    sht.Cells(rw, "N").Formula = "=((INT(W" & rw & "))-1)+0.25"
                    sht.Cells(rw, "W").Interior.Color = RGB(250, 250, 200)
                End If
            End If
        Next rw
    End If
    
    End Sub