Ссылки на ячейки Excel VBA, несоответствие ошибок - PullRequest
0 голосов
/ 12 июня 2018

Я пытаюсь сослаться на ячейку с помощью метки.Пример, в то время как в form1 у меня есть 20 кадров, когда я нажимаю frame1, он должен отправить значение метке в form2.

last = src.Worksheets("Manutencao").Range("A65536").End(xlUp).Row
folha = manutencaoexp.Label27.Caption
cellsit = manutencaoexp.Label29.Caption


src.Worksheets("Manutencao").Cells(last + 1, 6) = Application.ThisWorkbook.Worksheets(folha).Cells(cellsit, 32).Text     'duração

Когда я использую это, он работает довольно хорошо, но, поскольку у меня есть 20 ComboBox на Monitorform, когда я нажимаю кадр, он должен измениться на выбранный кадр ComboBox и выполнить рефенирование ячейки.

src.Worksheets("Manutencao").Cells(last + 1, 6) = Application.ThisWorkbook.Worksheets(folha).Cells(Monitorform.ComboBox1.ListIndex + 2, 32).Text

1 Ответ

0 голосов
/ 12 июня 2018

Это (скорее всего) не полный ответ на вашу проблему, но он может помочь вам определить, какая часть кода выдает ошибку.

У вас есть одна строка кода VBA:

src.Worksheets("Manutencao").Cells(last + 1, 6) = Application.ThisWorkbook.Worksheets(folha).Cells(cellsit, 32).Text     'duração

У этого есть много неявных переменных и объектов, которые код VBA должен сложить вместе.Хотя это не проблема сама по себе, она может усложнить решение проблем.

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

Option Explicit

Sub test()
    Dim thisWB As Workbook
    Set thisWB = ThisWorkbook

    Dim manutencaoWS As Worksheet
    Dim folhaWS As Worksheet
    Set manutencaoWS = thisWB.Sheets("Manutencao")
    Set folhaWS = thisWB.Sheets(folha)

    Dim lastRow As Long
    Dim folha As String
    Dim cellsit As Long

    lastRow = manutencaoWS.Range("A65536").End(xlUp).Row
    folha = manutencaoexp.Label27.Caption
    cellsit = manutencaoexp.Label29.Caption

    Dim folhaText As String
    folhaText = folhaWS.Cells(cellsit, 32)

    manutencaoWS.Cells(last + 1, 6) = folhaText
End Sub

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

Кроме того, пожалуйста всегда используйте Option Explicit.

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