';1004';使用Interior.Color Excel 2010 VBA ActiveX控件进行迭代时出错
提前谢谢你的建议 我有一个带有以下代码的活动X复选框:';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
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,减去W或AA)内某些列中单个单元格值之间的差值,并将该差值与另一个单元格(Y1317)进行比较。只有在Y1317中的值小于两个值的差值时,才会进行此操作。Y1317中的值表示高度测量中可接受的“公差”
一旦代码决定了要调整的单元格值,我需要一个公式将其自身插入到N列中的相应单元格中,并将其引用的单元格涂成黄色(在AA或W用户输入列中作为标志,具体取决于测量单位)
该公式旨在将适当的值向下舍入为整数,减去一(1),然后加上四分之一(0.25)
因此,总而言之,此代码旨在根据特定公差将标准应用于高度测量:如果选中复选框,并且按下按钮,并且如果差值大于允许的公差,则确定从哪个列中提取值(基于测量单位),并调整该值(从第1400行开始)根据公式,并用浅黄色标记从中提取值的列中的垂直对应单元格。连续做30次。(呸!)
再次感谢社区在此提供的帮助,我很高兴看到这将产生多个响应,这些响应将累积形成一个答案。请随时注意我是新手(对SO、VBA和一般的编码都是新手),请毫不犹豫地为我指出“更好”的方向。我正在努力成为一名优秀的程序员
编辑:
单元格(h,“AA”)。值
更改为单元格(h,“W”)。值
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