2017-06-13 3 views
0

Ich habe zwei Arbeitsblätter mit dem Namen "Slip" und "Memo". Ich möchte Daten von Slip kopieren und automatisch zu Memo hinzufügen, indem ich eine Befehlsschaltfläche drücke, die ich im Arbeitsblatt Slip erstellt habe. Wenn einer (oder zwei) der Einträge in Slip leer gelassen wird, erscheint ein Meldungsfeld mit der Aufschrift "Alle Einträge müssen ausgefüllt sein". Danach werden die Einträge, die in Slip gefüllt wurden, nicht in Memo hinzugefügt.Excel-Makro zum Kopieren von Zelldaten aus einem Arbeitsblatt und Einfügen in ein anderes Arbeitsblatt basierend auf einer bestimmten Bedingung

Bisher ist dies der Code, den ich habe: „Alle Eingaben müssen ausgefüllt werden“

Private Sub CommandButton1_Click() 
Dim SentDate As Date, Source As String, Subject As String, ReceivedBy As 
String, Mode As String 

Worksheets("Slip").Select 
SentDate = Range("F11") 
Source = Range("E1") 
Subject = Range("E2") 
ReceivedBy = Range("M34") 
Mode = Range("M35") 
Worksheets("Memo").Select 
Worksheets("Memo").Range("A3").Select 
If Worksheets("Memo").Range("A3").Offset(1, 0) <> "" Then 
Worksheets("Memo").Range("A3").End(xlDown).Select 

End If 


ActiveCell.Offset(1, 0).Select 
ActiveCell.Value = SentDate 
ActiveCell.Offset(0, 1).Select 
ActiveCell.Value = Source 
ActiveCell.Offset(0, 1).Select 
ActiveCell.Value = Subject 
ActiveCell.Offset(0, 1).Select 
ActiveCell.Value = ReceivedBy 
ActiveCell.Offset(0, 1).Select 
ActiveCell.Value = Mode 
Worksheets("Slip").Select 

If IsEmpty(Range("F11")) = True And IsEmpty(Range("E1").Value) = True And 
    IsEmpty(Range("E2").Value) = True And IsEmpty(Range("M34").Value) = True 
And IsEmpty(Range("M35").Value) = True Then 
    MsgBox "FORM is empty." 
ElseIf IsEmpty(Range("F11")) = True Or IsEmpty(Range("E1").Value) = True 
Or IsEmpty(Range("E2").Value) = True Or IsEmpty(Range("M34").Value) = True 
Or IsEmpty(Range("M35").Value) = True Then 
    MsgBox "All entries must be filled." 
Else 
    MsgBox "Successfully added to Memo" 
End If 
End Sub 

Welche Bedingung sollte ich nach der Message-Box setzen sagen ?

Angenommen Beleg sieht wie folgt aus:

A/B/C/D/E

Datum/Quelle/Betreff/Empfangen von/Mode

19. Mai/RD/Meeting/HR/Fax

20. Mai/RD/Meeting/HR/Fax

21. Mai // Meeting/HR/Fax

Wenn ich auf die Befehlsschaltfläche klicke, sollte "Alle Einträge müssen gefüllt sein" angezeigt werden, da ich die Quelle in der letzten Zeile leer gelassen habe. Wie werde ich den Rest der Einträge aus der Addition zu Memo verhindern so Memo sollte wie folgt aussehen:

A/B/C/D/E

Datum/Quelle/Betreff/Empfangen von/Mode

May 19/RD/Meeting/HR/Fax

Mai 20/RD/Meeting/HR/Fax

Es hat nicht Mai hinzufügen 21 // Meeting/HR/Fax, da ich eine Zelle leer gelassen in das Arbeitsblatt Arbeitsblatt. Wie ist die Bedingung dafür?

Vielen Dank im Voraus

+1

geändert werden soll eine 'Beenden Sub' Anweisung hinzuzufügen. (PS 'IsEmpty (x) = True' kann genauso geschrieben werden wie' IsEmpty (x) '.' IsEmpty' gibt entweder 'True' oder' False' zurück, so dass Ihre Bedingungen entweder 'True = True' sind, was zu' True', oder 'False = True', was zu' False' führt - also fügt der '= True'-Teil keinen Wert hinzu.) – YowE3K

+0

@ YowE3K Hey danke, ich habe den Post bearbeitet, weil es so aussieht als hätte ich ihn nicht erklären Sie es gut das erste Mal – auqnabeshie

+0

Sie möchten wahrscheinlich eine 'Exit Sub' Aussage hinzufügen. ** Und ** verschieben Sie die Aktualisierung der Zellen auf ** nachdem ** Sie die Gültigkeit der Quelldaten überprüft haben. – YowE3K

Antwort

2
I think the code would be like bellows, 

    Sub test() 
    Dim vAddress, strAddress As String 
    Dim Ws As Worksheet, toWs As Worksheet 

     Set Ws = Sheets("Slip") 
     Set toWs = Sheets("Memo") 

     vAddress = Array("f11", "e1", "q3", "e3", "m34", "m35", "f12", "a11", "c11", "g11", "h11") 
     strAddress = Join(vAddress, ",") 

     With Ws 
      If IsEmpty(.Range("F11")) = True And IsEmpty(.Range("E1").Value) = True And _ 
       IsEmpty(.Range("O3").Value) = True And IsEmpty(.Range("E3").Value) = True And _ 
       IsEmpty(.Range("M34").Value) = True And IsEmpty(.Range("M35").Value) = True And _ 
       IsEmpty(.Range("F12").Value) = True And IsEmpty(.Range("A11").Value) = True And _ 
       IsEmpty(.Range("C11").Value) = True And IsEmpty(.Range("G11").Value) = True And _ 
       IsEmpty(.Range("H11").Value) = True Then 
       MsgBox "FORM is empty." 
      ElseIf IsEmpty(.Range("F11")) = True Or IsEmpty(.Range("E1").Value) = True Or _ 
        IsEmpty(.Range("O3").Value) = True Or IsEmpty(.Range("E3").Value) = True Or _ 
        IsEmpty(.Range("M34").Value) = True Or IsEmpty(.Range("M35").Value) = True Or _ 
        IsEmpty(.Range("F12").Value) = True Or IsEmpty(.Range("A11").Value) = True Or _ 
        IsEmpty(.Range("C11").Value) = True Or IsEmpty(.Range("G11").Value) = True Or _ 
        IsEmpty(.Range("H11").Value) = True Then 
       MsgBox "All entries must be filled." 
      Else 
       toWs.Range(strAddress).Value = .Range(strAddress).Value 
       MsgBox "Successfully added to Memo" 
      End If 
     End With 
    End Sub 

Der Code kann wie diese Sie wahrscheinlich

Sub test2() 
    Dim vAddress, strAddress As String 
    Dim Ws As Worksheet, toWs As Worksheet 
    Dim rngDB As Range, n As Integer, k As Integer 
     Set Ws = Sheets("Slip") 
     Set toWs = Sheets("Memo") 

     vAddress = Array("f11", "e1", "q3", "e3", "m34", "m35", "f12", "a11", "c11", "g11", "h11") 
     strAddress = Join(vAddress, ",") 
     With Ws 
      Set rngDB = .Range(strAddress) 
      n = rngDB.Cells.Count 
      k = WorksheetFunction.CountA(rngDB) 
      Select Case k 
      Case 0 
       MsgBox "FORM is empty." 
      Case Is < n 
       MsgBox "All entries must be filled." 
      Case Else 
       toWs.Range(strAddress).Value = .Range(strAddress).Value 
       MsgBox "Successfully added to Memo" 
      End Select 
     End With 
    End Sub 
+0

schön auf der zweiten Bearbeitung, ich war gerade dabei, es zu posten :) –

+0

@Shairado: Danke! –

+0

@ Dy.Lee \t Hallo, ich habe versucht, Ihren Code und es hat nicht funktioniert :(, aber ich habe den Beitrag bearbeitet, um mehr Kontext zur Verfügung stellen, können Sie es überprüfen? Vielen Dank – auqnabeshie

Verwandte Themen