更新string时调用循环vba excel的子

你好!

我在我的项目上有一个循环,在循环内,我调用一个子(Stcount)来计算一个元素的列号。 这个子进给一个string(ststring),每个循环都会改变。 但是,子(Stcount)似乎并不能识别string(ststring)中的更改。

首先,我首先定义一些我将用于这个序列的variables

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

在这个子节中,我定义了将作为我的子基础的string

 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 

当我调用StCount时,它会更新counterSt的值。 对于第一个string,它工作正常。 但是,当它循环,似乎并没有认识到有一个新的string,它应该使用(ststring)。 因此,它每次都返回相同的值!

 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。 因此,我认为问题在于循环。

想法?

你的代码工作正常,但我没有看到任何公共variables的需要。 我build议更像这样的东西:

 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