Отправка объектов Excel в подпрограммы - PullRequest
0 голосов
/ 14 декабря 2011

Как сейчас, у меня есть немного кода, который выглядит примерно так (немного перефразировано, но я уверен, что вы поняли идею)

   If ComboBox1.SelectedIndex = 1 Then
        swEV2.Stop()
        If ComboBox3.SelectedIndex = 0 Then
            xlWorkSheet202.Activate()
            xlWorkSheet202.Cells((AT + 2), 3) = TextBox1.Text
            xlWorkSheet202.Cells((AT + 3), 2) = "PSS (kBs)"
            xlWorkSheet202.Cells((AT + 3), 3) = "USS (kBs)"
            xlWorkSheet202.Cells((AT + 3), 4) = "User %"
            xlWorkSheet202.Cells((AT + 3), 5) = "Kernel %"
            xlWorkSheet202.Cells((AT + 3), 6) = "Total %"
            xlWorkSheet202.Cells((AT + 4), 1) = "Min:"
            xlWorkSheet202.Cells((AT + 5), 1) = "Max:"
            xlWorkSheet202.Cells((AT + 6), 1) = "Average:"
            xlWorkSheet202.Cells((AT + 7), 1) = "Median:"
            xlWorkSheet202.Cells((AT + 8), 1) = "Stan Dev:"
        ElseIf ComboBox3.SelectedIndex = 2 Then
            xlWorkSheet204.Cells((WT + 2), 3) = TextBox1.Text
            xlWorkSheet204.Cells((WT + 3), 2) = "PSS (kBs)"
            xlWorkSheet204.Cells((WT + 3), 3) = "USS (kBs)"
            xlWorkSheet204.Cells((WT + 3), 4) = "User %"
            xlWorkSheet204.Cells((WT + 3), 5) = "Kernel %"
            xlWorkSheet204.Cells((WT + 3), 6) = "Total %"
            xlWorkSheet204.Cells((WT + 4), 1) = "Min:"
            xlWorkSheet204.Cells((WT + 5), 1) = "Max:"
            xlWorkSheet204.Cells((WT + 6), 1) = "Average:"
            xlWorkSheet204.Cells((WT + 7), 1) = "Median:"
            xlWorkSheet204.Cells((WT + 8), 1) = "Stan Dev:"

Это повторяется еще 3 раза в нескольких разных местах ... Так что теперь я пытаюсь реорганизовать код, чтобы сделать его чище и короче.

Я хотел бы сделать следующее:

  If ComboBox1.SelectedIndex = 1 Then
        swEV2.Stop()
        If ComboBox3.SelectedIndex = 0 Then
            Excelupdate(xlWorkSheet203, AT)
        ElseIf ComboBox3.SelectedIndex = 2 Then
            Excelupdate(xlWorkSheet204, WT)

    Private sub ExcelUpdate(byref worksheet as object, byref update as string)

        worksheet.Activate()
        worksheet.Cells((update + 2), 3) = TextBox1.Text
        worksheet.Cells((update + 3), 2) = "PSS (kBs)"
        worksheet.Cells((update + 3), 3) = "USS (kBs)"
        worksheet.Cells((update + 3), 4) = "User %"
        worksheet.Cells((update + 3), 5) = "Kernel %"
        worksheet.Cells((update + 3), 6) = "Total %"
        worksheet.Cells((update + 4), 1) = "Min:"
        worksheet.Cells((update + 5), 1) = "Max:"
        worksheet.Cells((update + 6), 1) = "Average:"
        worksheet.Cells((update + 7), 1) = "Median:"
        worksheet.Cells((update + 8), 1) = "Stan Dev:"
     end sub

Я точно думал, что вышеперечисленное сработает, но все равно кажется, что я что-то упустил, когда открываю лист Excel, ничего не печаталось. Это бы легко урезало строки кода, которые у меня есть пополам, поэтому я бы хотел найти решение для этого

Спасибо, ребята

............................................... ........

Редактировать (Извините, эти поля комментариев ужасны для написания чего-либо)

............................................... ........

хорошо, я попытался изменить эти строки кода:

        If ComboBox2.SelectedIndex = 1 Then
            If ComboBox3.SelectedIndex = 0 Then
                ExcelUpdate(xlWorkSheet202, AT, CDbl(Pvalue), CDbl(uvalue), CDbl(UserRx.Match(line).Value), CDbl(KernelRx.Match(line).Value))
            ElseIf ComboBox3.SelectedIndex = 1 Then
                ExcelUpdate(xlWorkSheet203, GT, CDbl(Pvalue), CDbl(uvalue), CDbl(UserRx.Match(line).Value), CDbl(KernelRx.Match(line).Value))
            ElseIf ComboBox3.SelectedIndex = 2 Then
                ExcelUpdate(xlWorkSheet204, WT, CDbl(Pvalue), CDbl(uvalue), CDbl(UserRx.Match(line).Value), CDbl(KernelRx.Match(line).Value))
            ElseIf ComboBox3.SelectedIndex = 3 Then
                ExcelUpdate(xlWorkSheet205, OT, CDbl(Pvalue), CDbl(uvalue), CDbl(UserRx.Match(line).Value), CDbl(KernelRx.Match(line).Value))
            End If
        End If

Private Sub ExcelUpdate(ByVal Sheet As Object, ByVal update As Integer, ByVal pval As Double, ByVal uval As Double, ByVal user As Double, ByVal kernel As Double)
    update = update + 1
    Sheet.cells(update, 1) = timenow
    Sheet.cells(update, 2) = pval
    Sheet.cells(update, 3) = uval
    Sheet.cells(update, 4) = user
    Sheet.cells(update, 5) = kernel
    Sheet.cells(update, 6) = cdbl(kernel + User)
 end sub

Но листы Excel по-прежнему не обновляются с новой информацией. Что-то еще мне не хватает?

1 Ответ

0 голосов
/ 14 декабря 2011

Я бы проверил / изменил пару вещей:

1) Измените ByRefs в функции на ByVal.Вам не нужно обновлять ссылку на лист или изменять строку, поэтому ByRef не нужен.

2) Определите тип данных параметра обновления.Вы смешиваете операцию и типы, что может привести к неправильной ссылке на ячейки.

Если целью ссылки на ячейку является:

worksheet.Cells(("A2"), 3)

, вам следует изменить код на:

worksheet.Cells((update & "2"), 3)

Если целью ссылки на ячейку является:

worksheet.Cells((12), 3)

тогда вам следует изменить тип параметра обновления:

update as integer
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...