2017-08-23 15 views
0

私は多くのシステム用にvbaを開発しました。私はここ2つのシステムの例を与えている:vbaの異なるサブシステムの代わりに配列を使用

Private Sub Macro1() 

Set x = Workbooks.Open("C:\Users\****\Desktop\New folder\System1.xls") 

With x.Sheets("System1") 

Set aCell1 = .Range("A1:X1000").Find(What:="User", LookIn:=xlValues, 
LookAt:=xlWhole, _MatchCase:=False, SearchFormat:=False) 

.Range(aCell1, 
.Cells(.Rows.Count,aCell1.Column).End(xlUp)).Offset(2,0).Copy_ 
ThisWorkbook.Sheets("System1").Range("A2") 
End With 

Private Sub Macro2() 

Set x = Workbooks.Open("C:\Users\****\Desktop\New folder\System2.xls") 

With x.Sheets("System2") 

Set aCell1 = .Range("A1:X1000").Find(What:="User", LookIn:=xlValues, 
LookAt:=xlWhole, _MatchCase:=False, SearchFormat:=False) 

.Range(aCell1, 
.Cells(.Rows.Count,aCell1.Column).End(xlUp)).Offset(2,0).Copy_ 
ThisWorkbook.Sheets("System1").Range("A2") 
End With 

は、私が代わりに、異なるシステムごとに異なるサブルーチンを書くの配列またはリスト内のすべてのシステム名を挙げることができるそれを通して方法はありますか? 変更されるのはシステム番号だけです

答えて

3

あなたは自分のコードをリファクタリングする必要があります。

Private Sub Macro1() 

GetData 1 
End Sub 

Private Sub Macro2() 

GetData 2 
End Sub 

Sub GetData(systemNum as long) 
Set x = Workbooks.Open("C:\Users\****\Desktop\New folder\System" & systemNum & ".xls") 

With x.Sheets("System" & systemNum) 

Set aCell1 = .Range("A1:X1000").Find(What:="User", LookIn:=xlValues, 
LookAt:=xlWhole, _MatchCase:=False, SearchFormat:=False) 

.Range(aCell1, 
.Cells(.Rows.Count,aCell1.Column).End(xlUp)).Offset(2,0).Copy_ 
ThisWorkbook.Sheets("System1").Range("A2") 
End With 
End Sub 
2

システムをパラメータとして追加してください。この例では、オプションの一つです下回っ:

Option Explicit 

Private Sub Macro1(Optional strParam As String = "System1") 

    Set x = Workbooks.Open("C:\Users\****\Desktop\New folder\" & strParam & ".xls") 

    With x.Sheets(strParam) 

     Set aCell1 = .Range("A1:X1000").Find(What:="User", LookIn:=xlValues, 
     LookAt:=xlWhole, _MatchCase:=False, SearchFormat:=False) 

     .Range(aCell1, 
     .Cells(.Rows.Count,aCell1.Column).End(xlUp)).Offset(2,0).Copy_ 
     ThisWorkbook.Sheets(strParam).Range ("A2") 
    End With 

End Sub 

そして、これはあなたがそれを呼び出す方法です:

Public Sub TestMe() 

    Macro1 'same as Macro1 "System1" 
    Macro1 "System1" 
    Macro1 "System2" 

End Sub 

編集:は限り、あなたは、元の配列をしたいと、ここでは可能ですあなたは上からMacro1をサブを使用して修正することができソリューション、:

Public Sub TestMe() 

    Dim myArr   As Variant 
    Dim lngCounter  As Long 

    myArr = Array("System1", "System2", "System3") 

    For lngCounter = LBound(myArr) To UBound(myArr) 
     Macro1 myArr(lngCounter) 
    Next lngCounter 

End Sub 
関連する問題