Форма / код не передается в Excel wb / ws, и когда / если он делает, его медленно - PullRequest
0 голосов
/ 08 апреля 2019

Я собрал код для переноса данных формы в электронную таблицу. Это работало нормально, но вчера вечером я начал вносить в него изменения, не осознавая, что это был мой основной код и у меня не было резервной копии. (было поздно) Я не помню, что я изменил. Теперь он не будет передавать данные формы 100% времени, а когда это происходит, это медленно. Я имею в виду ... как 35 секунд, чтобы обновить медленно. Может ли кто-нибудь предложить какие-либо советы или помощь в том, как это можно улучшить и / или исправить? Любая помощь будет оценена.

 Sub CommandButton1_Click()
If ComboBox2.Value = "" Or ComboBox3.Value = "" Or ComboBox6.Value = ""      Or ComboBox7.Value = "" Or ComboBox8.Value = "" Or ComboBox9.Value = "" Then
    MsgBox ("The form is not complete")
    Exit Sub
Else
End If

 Workbooks("Language Line April AM - 2019.xlsm").Worksheets("2019 LL DB").Activate

 Dim lastrow As Long, count As Long

 lastrow = Sheet7.Cells(Rows.count, 1).End(xlUp).Row
 lastrow = lastrow + 1

 Cells(lastrow, 1) = ComboBox6.Value 'Tester
 Cells(lastrow, 2) = TextBox4.Value 'Date
 Cells(lastrow, 3) = TextBox5.Value 'Meridiem
 Cells(lastrow, 4) = TextBox6.Value 'LOB
 Cells(lastrow, 5) = TextBox7.Value 'Language
 Cells(lastrow, 6) = ComboBox4.Value 'Phone Options
 Cells(lastrow, 7) = ComboBox6.Value 'Representative
 Cells(lastrow, 8) = TextBox4.Value 'Supervisor
 Cells(lastrow, 9) = TextBox5.Value 'Manager
 Cells(lastrow, 10) = TextBox6.Value 'Director
 Cells(lastrow, 11) = TextBox7.Value 'Location
 Cells(lastrow, 12) = ComboBox7.Value 'Whisper
 Cells(lastrow, 13) = ComboBox8.Value 'UAD Indicator
 Cells(lastrow, 14) = TextBox8.Value 'Results for system
 Cells(lastrow, 15) = ComboBox9.Value 'Free Translator Offer
 Cells(lastrow, 16) = TextBox9.Value 'Results for Rep offer
 Cells(lastrow, 17) = TextBox12.Value 'Comments

 ActiveWorkbook.Save

 MsgBox "Entry has been logged!"

    ComboBox2.Value = ""
    ComboBox3.Clear
    ComboBox4.Clear
    ComboBox4.Value = ""
    ComboBox5.Clear
    ComboBox6.Value = ""
    ComboBox7.Value = ""
    ComboBox8.Value = ""
    ComboBox9.Clear

    TextBox12.Value = ""

    CheckBox1.Value = False

    TextBox4.Value = ""
    TextBox5.Value = ""
    TextBox6.Value = ""
    TextBox7.Value = ""
    TextBox8.Value = ""
    TextBox9.Value = ""
    TextBox13.Value = ""

End Sub

1 Ответ

1 голос
/ 08 апреля 2019

Использование exit не является хорошей практикой.Вместо этого вы можете использовать что-то подобное:

Sub CommandButton1_Click()
If ComboBox2.Value = "" Or ComboBox3.Value = "" Or ComboBox6.Value = ""      Or ComboBox7.Value = "" Or ComboBox8.Value = "" Or ComboBox9.Value = "" Then
    MsgBox ("The form is not complete")
Else
'your code here

End If
end Sub

Использование метода .Activate и выход из Excel для определения того, на какие ссылки ссылаются cells или worksheets или на рабочие книги, также не является хорошей практикой.

Попробуйте вместо этого:

Dim sht1 As Worksheet
Dim book as Workbook
Set book=Workbooks("Language Line April AM - 2019.xlsm")
Set sht1 = book.Worksheets("2019 LL DB")

Затем вы можете ссылаться на ячейки следующим образом:

sht1.cells(lastrow,1).value=""

То же самое относится к sheet7.Это так же, как 2019 LL DB?Тогда на него следует ссылаться соответственно.

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

userform.ComboBox2.Value="" 'where userform is your userform's name

В качестве альтернативы, если вы хотите избежать повторения userform.xxx, вы можете попробовать это:

With userform 'your userform's name
    .combobox1.Value = ""
    .textbox1.Value = ""
End With

Наконец, попробуйте использовать значимые имена для ваших переменных и объектов,Например, combobox6 можно переименовать в testerComboBox или что-либо еще значимое для вас.

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

...