如何将表单中的选择传递给VBA中的变量

时间:2018-11-22 15:15:32

标签: excel vba excel-vba

我在进行以下活动时遇到了一些麻烦:我需要将5种不同的驱动程序(STIMA,STIMA_SEDE,LOTTO,STORICO,UNIFORME)传递给VBA中的变量,并在其中搜索相应的列我的工作表。

到目前为止,我尝试了两种方法,不幸的是没有结果:

第一种方式:

    Private Sub UserForm_Initialize()

Dim rngDriver  As Range
Dim ws As Worksheet

Set ws = Worksheets("Data validation")

For Each rngDriver In ws.Range("Drivers")
    Me.cbDriver.AddItem rngDriver.Value
Next rngDriver

End Sub

Private Sub OKbtn_Click()
Dim destValues() As Variant, driverValues() As Variant, totalDriver As Double
    Dim totalValue As Double, offsetDriverCol As Integer, deltaPerc() As Double
    Dim i As Long, j As Long, k As Long, decimalPart As Double, driverRange As Range
    Dim driverCol As Integer, modCol As Integer, DestRange As Range
...
 driverCol = 2
    Do While Cells(23, driverCol).Value <> frmDistribuisci.cbDriver.Value
        driverCol = driverCol + 1
    Loop

第二种方式:

...
If frmDistribuisci.cbDriver.Value Is LOTTO Then
        driverCol = 2
        Do While Cells(23, driverCol).Value <> "Lotto"
            driverCol = driverCol + 1
        Loop
        End If
        'Identificazione colonna driver Stima
        If frmDistribuisci.cbDriver.Value Is STIMA Then
        driverCol = 2
        Do While Cells(23, driverCol).Value <> "Stima"
            driverCol = driverCol + 1
        Loop
        End If
        'Identificazione colonna driver Stima da sede
        If frmDistribuisci.cbDriver.Value Is STIMA_SEDE Then
        driverCol = 2
        Do While Cells(23, driverCol).Value <> "Stima da sede"
            driverCol = driverCol + 1
        Loop
        End If
        'Identificazione colonna driver Storico
        If frmDistribuisci.cbDriver.Value Is STORICO Then
        driverCol = 2
        Do While Cells(23, driverCol).Value <> "Storico"
            driverCol = driverCol + 1
        Loop
        End If

调试此代码似乎会跳过If步骤以及第一个解决方案,因此我陷入了困境...

有人知道如何做到这一点吗?谢谢,谢谢!

1 个答案:

答案 0 :(得分:1)

这不是用于值比较的有效语法:

If frmDistribuisci.cbDriver.Value Is LOTTO Then

它应该为If … = … Then,并且LOTTO被认为是类型/类(由于Is运算符,它完全用于其他功能),而不是预期的字符串。字符串文字必须用双引号分隔:

If frmDistribuisci.cbDriver.Value = "LOTTO" Then

应该可以正常工作。