2017-02-22 13 views
0

У меня есть следующий макрос в Листе Excel - который извлекает пациента, идентифицированного по номеру больницы, и помещает там фамилию в один столбец, и это отлично работает.VBA Значение настройки ячейки не изменяет содержимое ячеек в незащищенном листе

Теперь мне нужно вставить больше данных на листе, но пока появляется фамилия, другие данные нет.

У меня нет проблем с записью в ту же ячейку, в ячейки слева, но когда я пытаюсь писать столбцы справа, ничего не происходит.

Лист не защищен, это не случай, когда шрифт и фон ячейки являются белыми. Есть идеи?

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim KeyCells As Range 
    Dim cn As ADODB.Connection 
    Dim rs As ADODB.Recordset 
    Dim Mrn As String 

    ' The variable KeyCells contains the cells that will 
    ' cause an alert when they are changed. 
    Set KeyCells = Range("C10:C29") 

    If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then 
     Set cn = New ADODB.Connection 
     Mrn = Target.Text 

     If Mrn = "" Then 
      Target.Offset(0, 1).Value = "" 
     Else 
      cn.ConnectionString = "MyConnectionString" 
      cn.Open 
      Set rs = cn.Execute("Select nhs_surname From nhs_patient_s Where UPPER(nhs_patientid) = '" + UCase(Mrn) + "'") 

      If rs.EOF Then 
       Target.Offset(0, 1).Value = "UNKNOWN" 
      Else 
       Do While Not rs.EOF 
        Dim surname As String 
        surname = rs("nhs_surname") 
        Target.Offset(0, 1).Value = surname 
        Target.Offset(, 3).Value = "Now here!!!!" 
        rs.MoveNext 
       Loop 
      End If 
     End If 
    End If 
End Sub 
+0

BTW, пожалуйста, не используйте [тег: макросы] тег, который не является для VBA. – R3uK

ответ

0

Оказалось, что колонна, где клалось фамилия была объединенная ячейка, и это повлияло на смещение столбца «Дата сброса».

Таким образом, решение было просто использовать номер 6, а не 3

Target.Offset(, 6).Value = "Now here!!!!" 
+0

Пожалуйста, примите ответ, если ваша проблема решена, и небольшое преимущество для других приятных ответов всегда приветствуется! ;) – R3uK

0

С вашей петли, вы ставите каждую фамилию в одном столбце, используйте объект Range, чтобы переместить его:

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim KeyCells As Range 
    Dim cn As ADODB.Connection 
    Dim rs As ADODB.Recordset 
    Dim Mrn As String 
    Dim RgToFill As Range 

    ' The variable KeyCells contains the cells that will 
    ' cause an alert when they are changed. 
    Set KeyCells = Me.Range("C10:C29") 
    Set RgToFill = Target.Offset(0, 1) 

    If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then 
     Set cn = New ADODB.Connection 
     Mrn = Target.Text 

     If Mrn = vbNullString Then 
      RgToFill.Value = vbNullString 
     Else 
      cn.ConnectionString = "MyConnectionString" 
      cn.Open 
      Set rs = cn.Execute("Select nhs_surname From nhs_patient_s Where UPPER(nhs_patientid) = '" + UCase(Mrn) + "'") 

      If rs.EOF Then 
       RgToFill.Value = "UNKNOWN" 
      Else 
       Do While Not rs.EOF 
        Dim surname As String 
        surname = rs("nhs_surname") 
        RgToFill.Value = surname 
        '''Move the range to fill to the next column 
        Set RgToFill = RgToFill.Offset(0, 1) 
        rs.MoveNext 
       Loop 
      End If 
     End If 
    End If 
End Sub 
Смежные вопросы