2016-09-06 3 views
0

Bonjour!サブオンループvbaを呼び出すときに文字列を更新する

私のプロジェクトにはループがあり、ループ内では、要素の列番号を数えるためにサブ(Stcount)を呼び出します。このサブは、ループごとに変化する文字列(文字列)を送ります。ただし、サブ(Stcount)は、文字列(ststring)の変更を認識していないようです。

まず、私はこのために使用するいくつかの変数を定義することによって開始するが、このサブで

Public counterSt As Integer 
Public ststring As String 
Public rng As Range 
Public rng2 As Range 

をシーケンス、私は私のサブのための基本となる文字列を定義

Sub test() 

Dim Stx(9) As String 
    Stx(1) = "Stx1" 
    Stx(2) = "Stx2" 
    Stx(3) = "Stx3" 
    Stx(4) = "Stx4" 
    Stx(5) = "Stx5" 
    Stx(6) = "Stx6" 
    Stx(7) = "Stx7" 
    Stx(8) = "Stx9" 
    Stx(9) = "Stx10" 

Set rng2 = Range("G10") 
For i = 1 To 9 
    ststring = "ist_" & Stx(i) 
    Call StCount 
    rng2.Value = counterSt 
    Set rng2 = rng2.Offset(1, 0) 

Next i 

End Sub 

I StCountを呼び出すと、counterStの値が更新されます。最初の文字列については、正常に動作します。しかし、ループすると、使用するべき新しい文字列が認識されないようです(文字列)。したがって、毎回同じ値を返します。

Sub StCount() 
Set rep = ActiveWorkbook.Sheets("Sheet2") 
Set sh1 = ActiveWorkbook.Sheets("Sheet1") 


    Dim trng As Range 
    Set trng = rep.Range("A4:HV4") 

    For Each rng In trng 
     If rng.Value = ststring Then 
     counterSt = Range(rng, rng.End(xlToLeft)).Columns.count 
     End If 
    Next rng 
End Sub 

チェックで、私はStstringが正しく更新されたかどうかを確認しようとしました。私はまた、手動でststringの値を更新しようとし、別のststrings(それも働いた)と同じサブのStCount異なる時間を呼び出してみました。したがって、私は問題がループにあると信じています。

アイデア?

+0

サリュー、セットTRNG = rep.Range(「A4は:HV4」)私はもっとこのような何かをお勧めしたい変更されることはありません、これは変更しない場合は常に同じ範囲をループ、私はドンこれがあなたが望むものだと想像してはいけませんか? – User632716

+0

Trngはテーブルのヘッダーです。だから、列番号が何であるかを知りたいので、固定しておきたい –

答えて

1

あなたのコードはうまく動作しますが、私は公開変数の必要はありません。

Sub test() 
    Dim rng2     As Range 
    Dim i      As Long 
    Dim Stx(9)    As String 

    Stx(1) = "Stx1" 
    Stx(2) = "Stx2" 
    Stx(3) = "Stx3" 
    Stx(4) = "Stx4" 
    Stx(5) = "Stx5" 
    Stx(6) = "Stx6" 
    Stx(7) = "Stx7" 
    Stx(8) = "Stx9" 
    Stx(9) = "Stx10" 

    Set rng2 = Range("G10") 
    For i = 1 To 9 
     rng2.Value = StCount("ist_" & Stx(i)) 
     Set rng2 = rng2.Offset(1, 0) 

    Next i 

End Sub 
Function StCount(sTest As String) 
    Dim rng     As Range 
    Dim trng     As Range 
    Dim rep     As Worksheet 
    Dim sh1     As Worksheet 
    Set rep = ActiveWorkbook.Sheets("Sheet2") 
    Set sh1 = ActiveWorkbook.Sheets("Sheet1") 


    Set trng = rep.Range("A4:HV4") 

    For Each rng In trng 
     If rng.Value = sTest Then 
      StCount = Range(rng, rng.End(xlToLeft)).Columns.Count 
      Exit For 
     End If 
    Next rng 
End Function 
関連する問題