2012-11-06 53 views
1

我正在写一个宏来检查一个值是否为真,如果是这样,则需要该行的第一个单元格并存储它。例如:如何在VBA中抵消2个范围的单元格?

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

欲遍历这个数组,并且当值为True我需要存储191和c:\用户公共\ test.dbf(对于此示例;实际值来存储将取决于行)。

这里是我的代码:

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 
+0

您需要多少次这样做? – Brad

+0

请不要使用str编码范围对象'strPath',因为它会混淆而不是澄清。将其更改为(例如)'rPath'以获得更一般的清晰度。 –

+0

因此,供参考 - “Chemin”(法文)的意思是“Path”(英文),“FichierExiste”的意思是“FileExists”。你能否告诉我们你是如何存储你想要保存的值?为什么你对'strPath.Value =“True”'有多重检查? Line的变量是什么? –

回答

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在上面的例子)。但我希望这给你一个解决你的问题的想法!

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 
相关问题