如何在VBA中偏移一个范围的2个单元格?

时间:2012-11-06 14:16:18

标签: excel vba excel-vba

我正在编写一个宏来检查某个值是否为true,如果是这样,则占用该行的第一个单元格并存储它。例如:

|191|c:users\public\test.dbf  |True |  
|192|c:users\public\test2.dbf |False|  
|193|c:users\public\test2.dbf |False|

我想循环遍历此数组,当值为True时,我需要存储191和c:users \ public \ test.dbf(对于此示例;要存储的实际值将取决于行)。< / p>

这是我的代码:

For Each strPath In Worksheets("OPTIONS").Range("F2:H6")
    newChemin = strPath
    If strPath <> True And strPath <> False Then Chemin = strPath

    If strPath.Value = "True" Then
        For Each Cell In Worksheets("OPTIONS").Range("F2:F6")
            If Cell = Chemin Then
                strChemin = Chemin
                Exit For
            End If
        Next Cell

        Set wsSheet1 = wbBook.Worksheets("DB" & strChemin)        
        If strPath.Value = "TRUE" Then
            If FichierExiste(Chemin) Then
                Line = Line + 1
            Else
                Chemin = Worksheets("OPTIONS").Cells(7, 7).Value & "\" & strChemin & "\ancretbd.mdb"
                If FichierExiste(Chemin) Then
                    '* Appel de la Method mod_Importation
                    Call Importation_Totale
                Else
                    MsgBox "Desolé, le fichié demandé n'existe pas !"
                End If
            End If
        End If
    End If
Next strPath

2 个答案:

答案 0 :(得分:1)

由于法语(??)变量,很难理解这段代码在做什么。 如果你能描述一下chemin是什么,也许更容易理解你所指的行的哪一部分。

但是,由于你的strPath实际上是一个Range,你可以简单地引用它的偏移量!

For Each strPath In Worksheets("OPTIONS").Range("F2:H6")
    If strPath.Value = "True" Then
        Set wsSheet1 = wbBook.Worksheets("DB" & strPath.Offset(0, -1).Value
        If FichierExiste(strPath.Offset(0, -2).Value) Then
        Line = Line + 1
        Else
            Chemin = Worksheets("OPTIONS").Cells(7, 7).Value & "\" & strChemin & "\ancretbd.mdb"
            If FichierExiste(Chemin) Then
                 '* Appel de la Method mod_Importation
                 Call Importation_Totale
            Else
                MsgBox "Desolé, le fichié demandé n'existe pas !"
            End If
        End If
    End If
Next strPath

这可能不是100%正确(因为代码的功能对我来说不清楚),并且可能偏移是错误的(上例中的-1和-2)。但我希望这可以帮助您解决问题!

答案 1 :(得分:0)

在我看来,列H是包含TRUE或False的列。在这种情况下,如果您只想检查此列并相应地更新F和G列,那么这个简化的代码可以为您完成工作:

For Each strPath In Worksheets("OPTIONS").Range("H2:H6")
     If strPath.Value = "True" Then
         Range("F" & strPath.Row).Value = "191"
         Range("G" & strPath.Row).Value = "c:users\public\test.dbf"

     End If
Next