【发布时间】:2018-12-11 20:29:38
【问题描述】:
我有以下代码将用户窗体 (GUI) 上的组合框与工作簿 sheet2 上的填充单元格进行比较,我收到“类型不匹配”错误。这一切都在起作用,直到另一个子将一些数据转移到工作表 2 上正在比较的单元格中。
我的问题在于if Worksheets(sheet2).cells(1,i).value = LCase(GUI.superCB.Value) then
Worksheets(sheet2).cells(1,i).value 现在在手表中显示为 Variant/Integer,这让我觉得当数据移动时,它改变了该单元格的“样式”。
Private Sub NextButton_Click() ''' adds check boxes to frame
Dim i As Integer
'Dim superColm As Integer
For i = 5 To 12
If Worksheets(Sheet2).Cells(1, i).Value = LCase(GUI.superCB.Value) Then 'problem line is right here
superColm = i
Exit For
Else
End If
Next i
NextButton.Visible = False
superCB.Visible = False
Run.Visible = True
Frame1.Visible = True
Dim chk As Control
Dim idx As Integer
Dim lastrow As Integer
lastrow = Worksheets(Sheet2).Cells(Rows.Count, superColm).End(xlUp).Row
For idx = 1 To lastrow - 1
Set chk = GUI.Frame1.Controls.add("Forms.CheckBox.1", idx, True)
'set chk = gui.Frame1.Controls.Add(
chk.Visible = True
chk.Left = 5
chk.Top = (idx - 1) * (chk.Height + 2)
chk.Caption = Cells(idx + 1, superColm) & " " & idx
Next
With Me.Frame1
.ScrollBars = fmScrollBarsVertical
If lastrow <= 10 Then
.ScrollHeight = .InsideHeight * 1.5
ElseIf lastrow <= 15 Then
.ScrollHeight = .InsideHeight * 2.25
ElseIf lastrow <= 20 Then
.ScrollHeight = .InsideHeight * 3
ElseIf lastrow <= 25 Then
.ScrollHeight = .InsideHeight * 3.9
ElseIf lastrow <= 30 Then
.ScrollHeight = .InsideHeight * 4.75
ElseIf lastrow <= 35 Then
.ScrollHeight = .InsideHeight * 5.35
Else
.ScrollHeight = .InsideHeight * 6.25
End If
.ScrollWidth = .InsideWidth * 9
End With
End Sub
如果我将工作表 2 作为活动工作表 Cells(1,i).value 将起作用,但我最终需要对用户隐藏工作表 2。通过这项工作,我认为单元格样式不是问题。
我已尝试转到 Excel.Workbooks("Shawn_sch_v1.2.xlsm").worksheets(sheet2).cells(1,i).value 以及所有内容到基本单元格(),希望它缺少工作表参考,但没有任何帮助。
【问题讨论】:
-
工作表中是否有错误?
-
据我所知或已引起我的注意。你能推荐我应该寻找的任何东西吗?
-
如果没有声明变量,变量类型可能会根据数据的处理方式而改变。看起来像是将范围值与表单控件值进行比较。
-
您是否建议像下面这样声明? Dim i As Integer Dim superColm As Integer Dim sheetName As String sheetName = Worksheets(Sheet2).Cells(1, i).Value For i = 5 To 12 If sheetName = LCase(GUI.superCB.Value) Then superColm = i Exit For Else End If Next i
标签: excel vba type-mismatch