2017-01-26 6 views
1

У меня есть следующий код:переменная VBA не принимают значений

Dim intCounter As Integer 
Dim intCounter2 As Integer 
Dim rngExchange As Range 
Dim rngExchange2 As Range 
Dim control As Integer 
Dim control2 As Integer 

intCounter = 1 
intCounter2 = 1 

Do While Worksheets("Sheet2").Cells(2, intCounter2) <> "" 
    If Worksheets("Sheet2").Cells(2, intCounter2).Value = "Isin" Then 
     With Worksheets("Sheet2") 
      Set rngExchange2 = .Range(.Cells(2, intCounter2), .Cells(2, intCounter2)) 
      control2 = intCounter2 
     End With 
    End If 
    intCounter2 = intCounter2 + 1 
Loop 

код находит колонку с названием Исиным, а затем я использую переменную Control2 для операций с этой колонкой. Однако, во-первых, rngExchange2 не принимает значение «Isin», а во-вторых, переменная control2 остается 0. Помогите с этим.

+0

Из того, что вы говорите, кажется, что это не входит в цикл. Столбцы перед «Исин» - все со значениями? – Vityata

+2

Почему бы не использовать метод «Найти» (объекта диапазона)? Гораздо быстрее, чем зацикливание ячейки по ячейке в VBA. Кроме того, использование «Integer» для индексов ячеек рискует переполнением. Вместо этого используйте 'Long'. –

+1

Вы проверили, как работает ваш код, поместив курсор в код и нажав F8? –

ответ

0

Логика вашего цикла неверна, она была исправлена ​​в предыдущем вопросе.

Но я полагаю, что вы используете что-то понятнее, чтобы найти столбец конкретного текста, как Range.Find метод:

Sub test_Anton() 
Dim SearchString As String 
Dim ConTrol2 As Integer 
Dim wS As Worksheet 
Dim cF As Range 

SearchString = "Isin" 

Set wS = ThisWorkbook.Sheets("Sheet2") 

With wS 
    .Activate 
    With .Range("2:2") 
     .Cells(1, 1).Activate 
     'First, define properly the Find method 
     Set cF = .Find(What:=SearchString, _ 
        After:=ActiveCell, _ 
        LookIn:=xlValues, _ 
        LookAt:=xlPart, _ 
        SearchOrder:=xlByRows, _ 
        SearchDirection:=xlNext, _ 
        MatchCase:=False, _ 
        SearchFormat:=False) 
     'If there is a result, stock the column 
     If Not cF Is Nothing Then 
      ConTrol2 = cF.Column 
     Else 
      MsgBox SearchString & " not found in " & wS.Name, vbOKOnly + vbCritical 
     End If 
    End With '.Range("2:2") 
End With 'wS 

MsgBox SearchString & " found in column " & ConTrol2 & " in sheet " & wS.Name, vbOKOnly + vbInformation 
End Sub 
0

Где вы используете .cells (2, intCounter2), первый параметр указывает строку, второй параметр, который является вашей переменной, является столбцом. Я проверил ваш код с точек останова на моем листе и, похоже, смог найти «Исин».

Я бы уточнил, что у вас есть Isin в нужном месте, а затем также проверьте корпус Isin, чтобы убедиться, что он соответствует тому, что у вас есть в коде VBA, так как он чувствителен к регистру.

Это, надеюсь, сработает для вас.

Смежные вопросы