2017-02-22 33 views
1

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

Каждая запись имеет уникальный номер для справочных целей, но то, что я хотел бы сделать, это на листе 1 (форма), чтобы иметь выпадающий список всех уникальных номеров, которые я могу выбрать, и для этого вся соответствующая информация возвращается в форму, чтобы можно было редактировать любые изменения, и кнопку, чтобы иметь возможность сохранять/перезаписывать данные вместо сохранения в качестве новой строки.

Поэтому хотелось бы вернуть данные на лист 1, чтобы отредактировать/изменить/сохранить/перезаписать.

Знание моего VBA ограничено, так как это первый проект, с которым я работал, поэтому я все еще изучаю основы, когда я ухожу.

Любые советы или предложения были бы с благодарностью оценены.

Большое спасибо

Rachael.

ответ

2

Я собрал быстрый пример демонстрации того, что вы запросили, его можно загрузить here.

я сделал следующие:

  1. Добавлена ​​форма (с несколькими полями редактирования данных) и данных (с примерами данных) рабочих листов.
  2. Добавлен раскрывающийся список валидации в таблицу данных, отображающую данные ID + Name на листе данных.
  3. При выборе опции в выпадающем списке проверки изменяется это вызывает событие Worksheet_Change, выполнив следующий код:

    Private Sub Worksheet_Change(ByVal Target As Range) 
        'check that the Target cell is our dropdown 
        If Target.Address = "$C$2" Then 
         'get the value of the dropdown using the range method 
         Dim dropDownValue As String 
         dropDownValue = CStr(wsForm.Range(Target.Address).Value) 
    
         'if that dropdown value exists (has a length of more than zero) 
         If Len(dropDownValue) > 0 Then 
          'get the corresponding record from the data sheet 
          Dim index As Integer 
          index = Left(dropDownValue, 1) 
    
          wsForm.Range("C3").Value = index 
          wsForm.Range("C4").Value = Application.WorksheetFunction.VLookup(index, wsData.Range("A:E"), 2, False) 
          wsForm.Range("C5").Value = Application.WorksheetFunction.VLookup(index, wsData.Range("A:E"), 3, False) 
          wsForm.Range("C6").Value = Application.WorksheetFunction.VLookup(index, wsData.Range("A:E"), 4, False) 
         End If 
    End If 
    End Sub 
    

    который использует vlookups для извлечения информации из таблицы для заполнения формы редактирования.

  4. Когда кнопка сохранения нажата, следующий код запускается:

    Sub Button4_Click() 
        Dim index As Integer 
        index = wsForm.Range("C3") 
    
        If index > 0 Then 
         Dim foundIndexRange As Range 
         Set foundIndexRange = wsData.Range("A:A").Find(index) 
    
         If (Len(foundIndexRange.Value) > 0) Then 
          foundIndexRange.Offset(0, 1).Value = wsForm.Range("C4").Value 
          foundIndexRange.Offset(0, 2).Value = wsForm.Range("C5").Value 
          foundIndexRange.Offset(0, 3).Value = wsForm.Range("C6").Value 
         End If 
         MsgBox "Record saved" 
        Else 
         MsgBox "Please choose from the dropdown" 
        End If 
    End Sub 
    

    который использует метод range.Find, чтобы найти диапазон, в котором наш индекс находится на листе данных, то смещение перезаписать наш новые значения.

Я надеюсь, что имеет смысл, пожалуйста, спросите, есть ли у вас какие-либо вопросы.

+0

Спасибо, Маджжам, я только что видел этот ответ, поэтому мои извинения за мой поздний ответ , Я посмотрю на ваш комментарий и дам вам знать, как я себя чувствую. Еще раз спасибо – Grigson

+0

Нет проблем @Grigson, все самое лучшее и дайте мне знать, если у вас есть вопросы – majjam

+0

жаль быть болью @Majjam Я не могу получить файл, так как он rar'd, и у меня нет winrar на моем рабочем ноутбуке , Я могу создать раскрывающийся список валидации, но я не уверен, куда идет код «Изменение рабочего листа»/как он активируется? Нужно ли мне создать кнопку, чтобы получить VBA? извините за мое невежество :) – Grigson

2

Вместо того, чтобы возвращать данные на лист 1, на листе 2, вы можете включить «Фильтры» и в столбце уникальных номеров, фильтровать/искать номер, данные которого вы хотите изменить. Затем будет отображаться только запись данных, соответствующих этому номеру. Затем сделайте изменения на листе 2.

Надеюсь, это полезно.

+0

Спасибо за ответ KoderM16, я в конечном итоге сделаю это, если он окажется более хлопотным, тогда стоит ха-ха.Это просто потому, что поля на листе 1 более ясны для чтения и обновления, чем на листе 2, что сделало бы поправку немного легче, если бы я мог это сделать – Grigson