2013-03-06 6 views
0

Я заполняю рабочий лист «Инфо» с данными клиента. Затем я вручную копирую те же данные клиента на другой рабочий лист «Заказы». «Заказы» содержат номера счетов-фактуры и структуру, как это:Скопируйте на следующую доступную строку на листе

 A   D   E    F   H   J 
    INVOICE FIRSTNAME LASTNAME  DESCRIPTION POSTCODE EMAIL 
1 1234  Fred  Smith   Red widget  AR225H [email protected] 
2 1235  Bill  Jones   Blue widget  EH66VT [email protected] 
3 1236 
4 1237 

Я желаю, чтобы создать макрос для копирования моих данных из «Info» в «Заказы», ​​по ячейкам. Я могу это сделать, но мне нужен условный комментарий, в котором говорится: «Если столбец« Заказы D »пуст, а затем выберите строку 3 для копирования данных в». Если у меня этого нет, я перезаписываю последнюю строку заказа.

Обратите внимание, что данные клиента меняются на листе «Информация» каждый раз, поэтому я вручную копирую его.

Я в настоящее время использую эту формулу, чтобы тянуть в следующем доступном номере счета в мой Инфолист:

= INDEX (! Заказы $ A: $ A, COUNTA (Orders $ D: $ D) +1)

Это позволяет мне иметь ячейку (скажем F3) на листе «Информация», которая уже содержит нужный номер счета для распределения для текущих данных клиента. Используя это, я мог бы переписать условие «Вставить информацию в строку, где Info! F3 появится в столбце« Заказы! »A».

Вот макрос, если это помогает:

Sub Macro2() 
' 
' Macro2 Macro 
' 

' 
    Range("B6").Select 
    Selection.Copy 
    Sheets("Orders").Select 
    Range("C735").Select 
    ActiveSheet.Paste 
    Sheets("Info").Select 
    Range("B7").Select 
    Application.CutCopyMode = False 
    Selection.Copy 
    Sheets("Orders").Select 
    Range("D735").Select 
    ActiveSheet.Paste 
    Sheets("Info").Select 
    Range("B8").Select 
    Application.CutCopyMode = False 
    Selection.Copy 
    Sheets("Info").Select 
    Range("B11").Select 
    Application.CutCopyMode = False 
    Selection.Copy 
    Sheets("Orders").Select 
    Range("E735").Select 
    ActiveSheet.Paste 
    Sheets("Info").Select 
    Range("B12").Select 
    Application.CutCopyMode = False 
    Selection.Copy 
    Sheets("Orders").Select 
    Range("F735").Select 
    ActiveSheet.Paste 
    Sheets("Info").Select 
    Range("B15").Select 
    Application.CutCopyMode = False 
    Selection.Copy 
    Sheets("Orders").Select 
    Range("G735").Select 
    ActiveSheet.Paste 
    Sheets("Info").Select 
    ActiveWindow.SmallScroll Down:=-6 
    Range("B3").Select 
    Application.CutCopyMode = False 
    Selection.Copy 
    Sheets("Orders").Select 
    Range("B735").Select 
    ActiveSheet.Paste 
End Sub 

==================

Может быть, есть слишком много информации в этом вопросе? В его простейшей форме все, что мне нужно, - это выбрать строку на основе содержимого ячейки, а затем вставить информацию в эту строку с помощью макроса.

==================

Update - здесь расположение листа «Info», обратите внимание, что не все строки совпадают столбцы в листе «Заказы» :

A        B    C 

          Invoice number:  1236 

Peter 
Parker 
12 
Overflow Road 
Stacktown 
BB338J 
0121 345 6789 
0777 789 789 
[email protected] 

Order description:   Red widget 
+0

Вы хотите, чтобы макрос эффективно извлекал данные клиента с вашего листа «Информация» и вставлял его в свои номера счетов-фактур «Заказы»? Пример: для номера счета 1237 в 'Info' найдите номер счета 1237 в' Orders' и скопируйте данные клиента из 'Info'? –

+0

@Remnant Да, это именно оно. У меня есть ячейка с номером требуемого номера счета в информационном листе. – Sara44

+0

Как ваши данные структурированы на листе «Информация»? Можете ли вы добавить пример, который вы сделали для 'Orders'? –

ответ

1

Мне нравится фиктивный адрес!

Я проверил этот код, и он работает. Возможно, вам придется изменить ссылки на ячейки, особенно на листе Info, чтобы получить правильные данные.

Короче говоря, вы начинаете с листа Info, сохраняете соответствующие данные в переменных, находите номер счета-фактуры в Orders, а затем вставляете данные.

Sub InfoToOrders() 
    Dim InvoiceNo As Long, FirstName As String, LastName As String, Description As String, Postcode As String, Email As String 

    With Worksheets("Info") 
     InvoiceNo = .Range("D1") 
     FirstName = .Range("A3") 
     LastName = .Range("A4") 
     Description = .Range("B13") 
     Postcode = .Range("A8") 
     Email = .Range("A11") 
    End With 

    Dim InvoiceNumbers As Range, invoice As Range 

    With Worksheets("Orders") 

     Set InvoiceNumbers = .Range("A1:A" & .Range("A1").End(xlDown).Row) 

     For Each invoice In InvoiceNumbers 
      If invoice = InvoiceNo Then 
       invoice.Offset(0, 1) = FirstName 
       invoice.Offset(0, 2) = LastName 
       invoice.Offset(0, 3) = Description 
       invoice.Offset(0, 4) = Postcode 
       invoice.Offset(0, 5) = Email 
      End If 
     Next invoice 

    End With 
End Sub 
+0

Спасибо, я могу следовать этому коду. Это не работает для меня, хотя, похоже, блокируется на этой строке: «Если счет-фактура = InvoiceNo Then». Не уверен, почему, поскольку InvoiceNo совпадает с моей ссылочной ячейкой. – Sara44

+0

Я проверил это, добавив Else MsgBox InvoiceNo до окончания If. – Sara44

+0

Что говорит об ошибке?'InvoiceNo' - это номер в' Info' и 'invoice' просто проталкивает все номера счетов на' Orders', чтобы найти соответствие –

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