2017-07-08 2 views
0

VBA transfer data from one sheet to anotherVBA Daten auf einer anderen Arbeitsmappe

In dem beigefügten Bild zu übertragen, ist dies das Ende Ziel.

Ich möchte Daten von einem Blatt zu einem anderen Blatt mit VBA übertragen. Bisher, wenn ich auf "Senden" klicke, werden die Daten für Land, Name, Nachname korrekt an das Blatt "Daten" gesendet. Ich bin mir jedoch nicht sicher, wie man das Feld "Rennen" in das Blatt "Daten" einträgt. Ich verstehe, dass ich eine if-Anweisung verwenden sollte, aber ich bin nicht sicher, wie man es in den VBA-Code einbaut.

Dies ist der VBA-Code im Moment.

Private Sub CommandButton1_Click() 

    Dim Country As String, Name As String, Surname As String, Race As String 
    Worksheets("form").Select 

    Country = Range("B4") 
    Name = Range("B6") 
    Surname = Range("B7") 
    Race = Range("B13") 

    Worksheets("data").Select 
    Worksheets("data").Range("A1").Select 
    If Worksheets("data").Range("A1").Offset(1, 0) <> "" Then 
      Worksheets("data").Range("A1").End(xlDown).Select 
    End If 

    ActiveCell.Offset(1, 0).Select 
    ActiveCell.Value = Country 
    ActiveCell.Offset(0, 1).Select 
    ActiveCell.Value = Name 
    ActiveCell.Offset(0, 1).Select 
    ActiveCell.Value = Surname 
    ActiveCell.Offset(0, 1).Select 
    ActiveCell.Value = Race 

    Worksheets("form").Select 
    Worksheets("form").Range("A4").Select 
End Sub 

Ich bin neu in VBA, jede Unterstützung in dieser Angelegenheit würde sehr geschätzt werden.

Antwort

3

Hier ist etwas für Sie, aber ich habe einige Kritik für Sie

1) Auswahl/Aktivierung/Kopieren/Einfügen sind alle schlechten Gewohnheiten. Am Ende schreiben Sie tonnenweise sinnlosen Code, um daraus Nutzen zu ziehen, und Sie verlangsamen den gesamten Prozess. Das ist wichtig, wenn es viele Dinge gibt, mit denen du interagierst.

2). Das Rennen auf der Registerkarte "Formular" scheint eine verbundene Zelle zu sein. Mein Codeschnipsel arbeitet hier unter der Annahme, dass Rasse in Wirklichkeit Zellen b13, c13 und d13 ist. Zusammengeführte Zellen sind ärgerlich und könnten die Ursache für Ihr Problem sein. ODER ich könnte total falsch liegen und du bist wirklich super neu. So oder so lernst du etwas.

Private Sub CommandButton1_Click() 
    Dim Country As String, Name As String, Surname As String, Race As String 
    dim ws as worksheet, wb as workbook, ws1 as worksheet 

    set wb = ThisWorkbook 
    set ws = wb.Sheets("form") 
    set ws1 = wb.Sheets("data") 
    Country = ws.Range("B4").value 
    Name = ws.Range("B6").value 
    Surname = ws.Range("B7").value 

    If ws.Range("B13").Value <> "" Then Race = "White" 
    If ws.Range("C13").Value <> "" Then Race = "Black" 
    If ws.Range("D13").Value <> "" Then Race = "Asian" 

    ws1.Cells(ws1.Rows.Count,1).End(xlUp).Offset(1,0).Value = Country 
    ws1.Cells(ws1.Rows.Count,1).End(xlUp).Offset(0,1).Value = Name 
    ws1.Cells(ws1.Rows.Count,1).End(xlUp).Offset(0,2).Value = Surname 
    ws1.Cells(ws1.Rows.Count,1).End(xlUp).Offset(0,3).Value = Race 
End Sub 

ich irgendwie tatsächlich ähnliche besser, weniger Variablen. Anstatt sinnlose Variablen zum Speichern von Werten zu verwenden, können Sie einfach die Werte in einem Array speichern und sie alle gleichzeitig verschieben. Gewährt Ich verstehe, dass ich die gleiche Menge an Variablen verwendet, um Blätter/Arbeitsmappen Objekte zu machen, aber Sie könnten sie auf lange Sicht schreiben (ich bevorzuge das eigentlich, obwohl es eine Decke von Text an diesem Punkt ist).

Ich habe auch einige Checks für den Fall, dass mehr als eine Rasse gewählt wurde, oder gar keine.

Private Sub here() 

    Dim ws As Worksheet, wb As Workbook, ws1 As Worksheet 
    Dim arr(0, 4) As String 

    Set wb = ThisWorkbook 
    Set ws = wb.Sheets("Sheet1") 
    Set ws1 = wb.Sheets("Sheet2") 
    arr(0, 0) = ws1.Cells(ws1.Rows.Count, 1).End(xlUp).Value + 1 
    arr(0, 1) = ws.Range("B4").Value 
    arr(0, 2) = ws.Range("B6").Value 
    arr(0, 3) = ws.Range("B7").Value 

    If (ws.Range("B13").Value <> "" And ws.Range("C13").Value <> "") _ 
     Or (ws.Range("B13").Value <> "" And ws.Range("D13").Value <> "") _ 
      Or (ws.Range("D13").Value <> "" And ws.Range("C13").Value <> "") Then 
     arr(0, 4) = "Mixed Race" 
    Else 
     arr(0, 4) = IIf(ws.Range("B13").Value <> "", "White", _ 
      IIf(ws.Range("C13").Value <> "", "Black", _ 
       IIf(ws.Range("D13").Value <> "", "Asian", "Must Be Non-Human"))) 
    End If 

    ws1.Range(ws1.Cells(ws1.UsedRange.Rows.Count + 1, 1), _ 
     ws1.Cells(ws1.UsedRange.Rows.Count + 1, 5)).Value2 = arr 

End Sub 
+1

Dies ist genau das, was ich gesucht habe. Vielen Dank für Ihre Kritik und lerne daraus. Schätze es wirklich. – ALK

+0

Vielen Dank für die Bereitstellung eines anderen Ansatzes zur Lösung des Problems. Darf ich Ihnen noch eine Frage stellen. Wenn ich ein zusätzliches Spaltenfeld in Zelle "A1" bereitstellen wollte. Dieses Feld kennzeichnet die Indexnummer für jeden neuen Eintrag, der im Blatt "data" eingetragen ist. Wie würde ich darüber gehen? – ALK

+0

@ALK Leicht;) enjoy –

Verwandte Themen