У меня есть лист Excel с планом на год. Использование недель для столбцов, а затем цветовой индикатор для недель, где происходит "материал".

Как это:

Мой вопрос: есть ли способ (встроенный или использующий надстройки) для добавления информации в эту ячейку более структурированным способом?

Я думаю, может быть, немного формы с

  • название
  • Описание
  • бюджет
  • Яда Яда
  • Foo

Таким образом, я смогу сохранить свой обзор, но в то же время добавить еще немного информации в каждую ячейку.

Кто-нибудь знает, как этого добиться?

1 ответ1

0

В итоге я создал пользовательскую форму с несколькими текстовыми полями и кнопкой для сохранения значений в том же столбце / строке на другом листе под названием "Данные".

Что-то вроде этого:

Dim xml As String

xml = xml + "<CellDetails>"
xml = xml + "  <Budget>" + UserForm1.txtBudget.Text + "</Budget>"
xml = xml + "  <Comments>" + UserForm1.txtComments.Text + "</Comments>"
xml = xml + "  <StartDate>" + Format(MonthView1.Value, "yyyy-mm-dd") + "</StartDate>"
xml = xml + "  <EndDate>" + Format(MonthView2.Value, "yyyy-mm-dd") + "</EndDate>"
xml = xml + "</CellDetails>"

ThisWorkbook.Sheets("Data").Range(Selection.Address).Value = xml

Затем я запускаю это с листа, используя список событий по "щелчку правой кнопкой мыши" ячейки и заполняю элементы управления формы значениями.

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel как Boolean)

При ошибке возобновить следующее

'Запускать только в том случае, если нажата клавиша Ctrl. Если IsControlKeyDown() = True, то

    If Not ThisWorkbook.Sheets("Data").Range(Selection.Address).Value = "" Then

        Dim XDoc As MSXML2.DOMDocument
        Set XDoc = CreateObject("MSXML2.DOMDocument")
        XDoc.LoadXML (ThisWorkbook.Sheets("Data").Range(Selection.Address).Value)

        ' Setting the form values
        UserForm1.txtBudget.Text = XDoc.SelectSingleNode("//CellDetails/Budget").Text
        UserForm1.txtComments.Text = XDoc.SelectSingleNode("//CellDetails/Comments").Text

        ' Setting the dates
        UserForm1.MonthView1.Value = CDate(XDoc.SelectSingleNode("//CellDetails/StartDate").Text)
        UserForm1.lbStartDate = XDoc.SelectSingleNode("//CellDetails/StartDate").Text
        UserForm1.MonthView2.Value = CDate(XDoc.SelectSingleNode("//CellDetails/EndDate").Text)
        UserForm1.lbEndDate = XDoc.SelectSingleNode("//CellDetails/EndDate").Text
    End If

    UserForm1.Show


    Cancel = True

End If
On Error GoTo 0

End Sub

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .