Форма пользователя Excel вызывает проблемы/повреждение файла, файл появляется несколько раз в проводнике проектов Visual Basic»

#excel #vba

Вопрос:

Я создал форму пользователя для записи результатов тестирования сотрудников. Я думаю, что я тестирую форму (открываю/закрываю/запускаю ее несколько раз), каким-то образом она появляется в разделе обозревателя проектов VB, как один и тот же файл открывается несколько раз (почему это происходит?) Это случалось и раньше, и я считаю, что именно это повредило мои предыдущие тестовые файлы (я на 8.5) В Visual Basic, нажатие кнопки сброса, за которой следует кнопка режима проектирования, предотвращает это. Дело в том, что если пользователь открывает и закрывает форму пользователя, он не собирается нажимать на эти кнопки. почему происходит такое наращивание и как мне не допустить, чтобы файл испортился, как только он будет выпущен по всему отделу?
*****Возможно, сейчас самое подходящее время также спросить, я ударился головой о стену, пытаясь понять, как сделать так, чтобы текстовое поле допускало только цифры 0,00-5,00 (все еще учусь, поэтому я не знал, как его закодировать, поэтому использовал то, что смог найти, что было уместно), и на самом деле оно допускает до 9, потому что, когда я вставил туда 5, это не позволило бы ввести выше .5, например, попытка ввести 1 2 3 4 5,5 сработала, но любой номер 1 2 3 4 5,6 не сработал бы.

с уважением — администратор офиса слишком старается

 textbox coding  Private Sub textSCORE_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) Select Case KeyAscii  Case vbKey0 To vbKey9, vbKeyBack, vbKeyClear, vbKeyDelete, vbKeyLeft, vbKeyRight, vbKeyUp, vbKeyDown, vbKeyTab  If KeyAscii = 46 Then If InStr(1, textSCORE.Text, ".") Then KeyAscii = 0  Case Else  KeyAscii = 0  Beep End Select End Sub  'Require decimal in Score Value TextBox Private Sub textSCORE_AfterUpdate()  If Int(Val(textSCORE.Value)) = textSCORE.Value And InStr(1,  textSCORE.Value, ".") = 0 Then  MsgBox "INVALID ENTRY! Input a number between 0-5 and include a decimal.", vbOKOnly, "ERROR"  textSCORE.Value = ""  textSCORE.SetFocus End If End Sub  ---------------MODULE CODING----------------  Option Explicit  Sub Reset()  Dim CALLrow As Long CALLrow = [Counta(CALLREVIEWS!A:A)]  Dim FILErow As Long FILErow = [Counta(FILEREVIEWS!A:A)] Dim AUDITrow As Long AUDITrow = [Counta(AUDIT!A:A)] With RESULTSFORM   .textHILO.Value = ""  .textSCORE.Value = ""  .textRANDO.Value = ""  .TextCOMM.Value = "COMMENTS:"    .comboTM.Clear  .comboAGENT.Value = ""  .comboMONTH.Clear  .comboTOOL.Clear  .comboQR.Clear  .comboFILE.Clear  .comboCALL.Clear  .comboEND.Clear  .comboCOMP.Clear  .comboPRIV.Clear  .comboAUTH.Clear  .comboKYC.Clear  .comboACC.Clear  .comboCON.Clear    .comboTM.AddItem "MANAGER 1"  .comboTM.AddItem "MANAGER 2"  .comboTM.AddItem "MANAGER 3"  .comboTM.AddItem "MANAGER 4"   .comboMONTH.AddItem "OCTOBER"  .comboMONTH.AddItem "NOVEMBER"  .comboMONTH.AddItem "DECEMBER"  .comboMONTH.AddItem "JANUARY"  .comboMONTH.AddItem "FEBRUARY"  .comboMONTH.AddItem "MARCH"  .comboMONTH.AddItem "APRIL"  .comboMONTH.AddItem "MAY"  .comboMONTH.AddItem "JUNE"  .comboMONTH.AddItem "JULY"  .comboMONTH.AddItem "AUGUST"  .comboMONTH.AddItem "SEPTEMBER"    .comboTOOL.AddItem "TOOL1"  .comboTOOL.AddItem "TOOL2"  .comboTOOL.AddItem "TOOL3"  .comboTOOL.AddItem "TOOL4"  .comboTOOL.AddItem "5"  .comboTOOL.AddItem "6"  .comboTOOL.AddItem "7"  .comboTOOL.AddItem "8"  .comboTOOL.AddItem "9"  .comboTOOL.AddItem "10"  .comboTOOL.AddItem "11"  .comboTOOL.AddItem "12"  .comboTOOL.AddItem "13"  .comboTOOL.AddItem "14"  .comboTOOL.AddItem "15"    .comboCALL.AddItem "CALL #1"  .comboCALL.AddItem "CALL #2"    .comboQR.AddItem "HIGH"  .comboQR.AddItem "MEDIUM-HIGH"  .comboQR.AddItem "MEDIUM"  .comboQR.AddItem "MEDIUM-LOW"  .comboQR.AddItem "LOW"    .comboPRIV.AddItem "PASS"  .comboPRIV.AddItem "FAIL"  .comboAUTH.AddItem "PASS"  .comboAUTH.AddItem "FAIL"  .comboKYC.AddItem "PASS"  .comboKYC.AddItem "FAIL"  .comboACC.AddItem "PASS"  .comboACC.AddItem "FAIL"  .comboCON.AddItem "PASS"  .comboCON.AddItem "FAIL"  .comboCOMP.AddItem "PASS"  .comboCOMP.AddItem "FAIL"    .comboFILE.AddItem "FILE #1"  .comboFILE.AddItem "FILE #2"  .comboFILE.AddItem "FILE #3"    .comboEND.AddItem "YES"  .comboEND.AddItem "NO"  .comboEND.AddItem "N/A"   End With   End Sub  Sub SubmitCall()  Dim sh As Worksheet Dim CALLrow As Long  Set sh = ThisWorkbook.Sheets("CALLREVIEWS")  CALLrow = [Counta(CALLREVIEWS!A:A)]   1  With sh   .Cells(CALLrow, 1) = RESULTSFORM.comboTM.Value    .Cells(CALLrow, 2) = RESULTSFORM.comboAGENT.Value    .Cells(CALLrow, 3) = RESULTSFORM.comboMONTH.Value    .Cells(CALLrow, 4) = RESULTSFORM.comboTOOL.Value    .Cells(CALLrow, 5) = RESULTSFORM.comboCALL.Value    .Cells(CALLrow, 6) = RESULTSFORM.comboQR.Value    .Cells(CALLrow, 7) = RESULTSFORM.textSCORE.Value    .Cells(CALLrow, 8) = RESULTSFORM.comboPRIV.Value    .Cells(CALLrow, 9) = RESULTSFORM.comboAUTH.Value    .Cells(CALLrow, 10) = RESULTSFORM.comboKYC.Value    .Cells(CALLrow, 11) = RESULTSFORM.comboACC.Value    .Cells(CALLrow, 12) = RESULTSFORM.comboCON.Value   End With   End Sub  Sub SubmitFile()  Dim sh As Worksheet Dim FILErow As Long  Set sh = ThisWorkbook.Sheets("FILEREVIEWS")  FILErow = [Counta(FILEREVIEWS!A:A)]   1  With sh  .Cells(FILErow, 1) = RESULTSFORM.comboTM.Value   .Cells(FILErow, 2) = RESULTSFORM.comboAGENT.Value   .Cells(FILErow, 3) = RESULTSFORM.comboMONTH.Value   .Cells(FILErow, 4) = RESULTSFORM.comboTOOL.Value  .Cells(FILErow, 5) = RESULTSFORM.comboFILE.Value  .Cells(FILErow, 6) = RESULTSFORM.comboCOMP.Value   End With   End Sub  Sub SubmitAudit()  Dim sh As Worksheet Dim AUDITrow As Long  Set sh = ThisWorkbook.Sheets("AUDIT")  AUDITrow = [Counta(AUDIT!A:A)]   1   With sh   .Cells(AUDITrow, 1) = RESULTSFORM.comboTM.Value    .Cells(AUDITrow, 2) = RESULTSFORM.comboAGENT.Value    .Cells(AUDITrow, 3) = RESULTSFORM.comboMONTH.Value    .Cells(AUDITrow, 4) = RESULTSFORM.comboTOOL.Value   .Cells(AUDITrow, 5) = RESULTSFORM.comboCALL.Value   .Cells(AUDITrow, 6) = RESULTSFORM.comboFILE.Value   .Cells(AUDITrow, 7) = Application.UserName    .Cells(AUDITrow, 8) = [text(now(), "MM-DD-YYYY HH:MM:SS")]    .Cells(AUDITrow, 9) = RESULTSFORM.TextCOMM.Value    .Cells(AUDITrow, 10) = RESULTSFORM.textHILO.Value    .Cells(AUDITrow, 11) = RESULTSFORM.comboEND.Value    .Cells(AUDITrow, 12) = RESULTSFORM.textRANDO.Value   End With   End Sub  Sub Show_Form()  RESULTSFORM.Show   ------------USERFORM Coding-------------  Private Sub cmdEXIT_Click()  Unload Me  End Sub  Private Sub comboTM_Change() comboAGENT.Value = "" 'clears agent combobox   Select Case comboTM.Value  Case Is = "MANAGER 1"   comboAGENT.RowSource = "MANAGER 1"  Case Is = "MANAGER 2"  comboAGENT.RowSource = "MANAGER2" Case Is = "MANAGER3"  comboAGENT.RowSource = "MANAGER3" Case Is = "MANAGER4"  comboAGENT.RowSource = "MANAGER4"  End Select  End Sub  Private Sub comboCALL_Change()  textSCORE.Value = ""  Select Case comboCALL.Value Case Is = "CALL #1"  textSCORE.Value = "0.00" Case Is = "CALL #2"  textSCORE.Value = "0.00" End Select  End Sub   Private Sub cmdRESET_Click()  Dim msgValue As VbMsgBoxResult  msgValue = MsgBox("Do you want to reset the form?", vbYesNo   vbInformation, "CONFIRMATION")  If msgValue = vbNo Then Exit Sub  Call Reset  End Sub  Private Sub cmdSUBMIT_Click()  Dim msgValue As VbMsgBoxResult  msgValue = MsgBox("Do you want to submit these results?", vbYesNo   vbInformation, "CONFIRMATION")  If msgValue = vbNo Then Exit Sub    If RESULTSFORM.comboCALL = "CALL #1" Then  Call SubmitCall  ElseIf RESULTSFORM.comboCALL = "CALL #2" Then  Call SubmitCall  End If    If RESULTSFORM.comboFILE = "FILE #1" Then  Call SubmitFile  ElseIf RESULTSFORM.comboFILE = "FILE #2" Then  Call SubmitFile  ElseIf RESULTSFORM.comboFILE = "FILE #3" Then  Call SubmitFile  End If  Call SubmitAudit Call Reset  End Sub   Private Sub comboTOOL_Change()  Select Case comboTOOL  Case Is = "12", "13", "14", "15"  textHILO.Value = "LOW" Case Is = "TOOL1", "TOOL2", "TOOL3", "TOOL4", "5", "6", "7", "8", "9", "10", "11"  textHILO.Value = "HIGH" End Select  End Sub  'Prevent anything other than numbers and decimals being entered in the Score Value TextBox Private Sub textSCORE_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) Select Case KeyAscii  Case vbKey0 To vbKey9, vbKeyBack, vbKeyClear, vbKeyDelete, vbKeyLeft, vbKeyRight, vbKeyUp, vbKeyDown, vbKeyTab  If KeyAscii = 46 Then If InStr(1, textSCORE.Text, ".") Then KeyAscii = 0  Case Else  KeyAscii = 0  Beep End Select End Sub  'Require decimal in Score Value TextBox Private Sub textSCORE_AfterUpdate()  If Int(Val(textSCORE.Value)) = textSCORE.Value And InStr(1,  textSCORE.Value, ".") = 0 Then  MsgBox "INVALID ENTRY! Input a number between 0-5 and include a decimal.", vbOKOnly, "ERROR"  textSCORE.Value = ""  textSCORE.SetFocus End If End Sub   Private Sub UserForm_Initialize()  Call Reset   End Sub  

введите описание изображения здесь

Комментарии:

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

2. ах, хорошо, значит, причина этого кроется где-то в кодировании? Я добавлю то, что у меня есть, мне просто нужно это убрать, чтобы не нарушать никаких правил конфиденциальности 😉

3. сразу же мне интересно, имеет ли это какое-либо отношение к «Явной опции», которую я ввожу в верхней части модуля?

4. Нет, все это гарантирует, что ваши переменные будут объявлены. Вы захотите сохранить это.

5. сохраню его, спасибо! что касается дубликатов файлов, которые кажутся открытыми в окне VB, у меня такое чувство, что это как-то связано с тем, как открывается форма пользователя, может быть, как она закрывается, или, может быть, если я пойду и использую другой файл excel, а затем вернусь к этому и снова поработаю над ним, может быть, тогда он дублируется?