2017-02-22 3 views
0

Ich habe das folgende Makro in einem Excel-Blatt - die den Patienten durch ihre Krankenhausnummer identifiziert und setzt den Nachnamen in einer Spalte und das funktioniert gut.VBA Einstellung Wert der Zelle ändert sich nicht Zelle Inhalt in ungeschützten Blatt

Ich muss jetzt mehr Daten in das Blatt einfügen, aber während der Nachname erscheint, die anderen Daten nicht.

Ich habe keine Probleme beim Schreiben in die gleiche Zelle, in die Zellen auf der linken Seite, aber wenn ich versuche, in die Spalten auf der rechten Seite zu schreiben passiert nichts.

Das Blatt ist ungeschützt, es ist kein Fall, in dem der Schrift- und Zellenhintergrund weiß ist. Irgendwelche Ideen?

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, benutzen Sie bitte nicht [tag: Makros] Tag, der nicht für VBA ist. – R3uK

Antwort

0

Es stellte sich heraus, dass die Spalte, wo der Name eine war gesetzt wurde fusionierte Zelle und dies wirkte sich auf den Offset für die Spalte Entladedatum aus.

So war die Lösung einfach 6 die Nummer zu verwenden, anstatt 3

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

Bitte akzeptieren Sie eine Antwort, wenn Ihr Problem gelöst ist, und ein wenig Upvote für die anderen netten Antworten ist immer willkommen! ;) – R3uK

0

Mit der Schleife, Sie jeden Namen in der gleichen Spalte setzen, einen Range-Objekt verwenden, um es zu bewegen:

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 
Verwandte Themen