У меня есть проблема, и я попробовал несколько конвертеров и изменения формата, но я все еще не получаю результаты - PullRequest
0 голосов
/ 05 июня 2019

У меня есть проблема, и я попробовал несколько конвертеров и изменения формата, но я все еще не получаю результаты.У меня есть пользовательская форма, которую я использую для добавления или удаления инвентаря из серии таблиц.Проблема заключается в том, что когда информация из пользовательской формы добавляется ТОЛЬКО в таблицу «Получено», ячейка количества не подтверждается.Это заполнено, но не поднято формулами таблицы, которые я имею в месте.Я могу получить к таблице и вручную ввести количества и нажать обновить все на вкладке данных, и количества обновятся правильно.ПРИМЕЧАНИЕ ЕСЛИ ЭТО ПОМОГАЕТ У меня есть настройка сводной таблицы на каждом из этих листов, чтобы получить даты ввода, материал и количество из таблицы «Получено», для продукта, который был введен через пользовательскую форму, отображается ноль для количества. *

Cdbl, Cint, Cdec, Format (), измененные форматы в рассматриваемой таблице Excel

Private Sub Add_Button_Click()
MsgBox "Are You Sure You Want To Add To Inventory?"
Unload Me
Transaction_Form.Show

Dim the_sheet As Worksheet
Dim table_list_object As ListObject
Dim table_object_row As ListRow

Set the_sheet = Sheets("MATERIALS REC.")
Set table_list_object = the_sheet.ListObjects(1)
Set table_object_row = table_list_object.ListRows.Add

table_object_row.Range(1, 1).Value = CDate(Me.Date_Box)
table_object_row.Range(1, 2).Value = Me.Material_Code_Box
table_object_row.Range(1, 4).Value = Me.Transaction_Qty_Box
table_object_row.Range(1, 5).Value = Me.Mat_Price_Box
table_object_row.Range(1, 6).Value = Me.cboSupplier_List
table_object_row.Range(1, 7).Value = Me.Order_Date_Box

End Sub

Private Sub cboSupplier_List_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
HookListBoxScroll Me, cboSupplier_List

End Sub

Private Sub Date_Box_AfterUpdate()
On Error Resume Next
Me.Date_Box.Value = CDate(Me.Date_Box)
End Sub



Private Sub Mat_Price_Box_AfterUpdate()
On Error Resume Next
Me.Mat_Price_Box.Value = Format(Me.Mat_Price_Box.Value, "$####.##")
End Sub


Private Sub Material_Code_Box_Change()
On Error Resume Next
Me.Material_Code_Box.Value = StrConv(Me.Material_Code_Box.Value, vbUpperCase)
End Sub

Private Sub Next_Button_Click()

MsgBox "The Transaction Form Will Be Closed"
Unload Me
End Sub


Private Sub Order_Date_Box_AfterUpdate()
On Error Resume Next
Me.Order_Date_Box.Value = CDate(Me.Order_Date_Box)
End Sub



Private Sub Overide_Button_Click()
MsgBox "Are You Sure You Want To Overide"
rspn = InputBox("Enter Password")
If rspn <> "ENVenv11" Then
MsgBox "Wrong password"
End If

Unload Me
Transaction_Form.Show

Dim the_sheet As Worksheet
Dim table_list_object As ListObject
Dim table_object_row As ListRow

Set the_sheet = Sheets("MATERIAL USAGE")
Set table_list_object = the_sheet.ListObjects(1)
Set table_object_row = table_list_object.ListRows.Add

table_object_row.Range(1, 1).Value = Me.Date_Box
table_object_row.Range(1, 4).Value = Me.Material_Code_Box
table_object_row.Range(1, 6).Value = Me.Transaction_Qty_Box
table_object_row.Range(1, 3).Value = Me.Process_Box
table_object_row.Range(1, 2).Value = Me.Customer_Box



End Sub

Private Sub Today_Button_Click()
Date_Box.Value = Date




End Sub

Private Sub Transaction_Qty_Box_AfterUpdate()
On Error Resume Next
Me.Transaction_Qty_Box.Value = CDec(Me.Transaction_Qty_Box.Value)

End Sub


Private Sub Use_Button_Click()
MsgBox "Are You Sure You Want To Remove From Inventory"
Unload Me
Transaction_Form.Show

Dim the_sheet As Worksheet
Dim table_list_object As ListObject
Dim table_object_row As ListRow

Set the_sheet = Sheets("MATERIAL USAGE")
Set table_list_object = the_sheet.ListObjects(1)
Set table_object_row = table_list_object.ListRows.Add

table_object_row.Range(1, 1).Value = Me.Date_Box
table_object_row.Range(1, 4).Value = Me.Material_Code_Box
table_object_row.Range(1, 6).Value = Me.Transaction_Qty_Box
table_object_row.Range(1, 3).Value = Me.Process_Box
table_object_row.Range(1, 2).Value = Me.Customer_Box

End Sub

Private Sub UserForm_Click()

End Sub

Private Sub UserForm_Initialize()
'Populate Supplier combo box.


Dim rngSupplier As Range


Dim ws As Worksheet


Set ws = Worksheets("Lookup_Lists")


For Each rngSupplier In ws.Range("Suppliers")


Me.cboSupplier_List.AddItem rngSupplier.Value


Next rngSupplier


End Sub

При нажатии кнопки добавления заполняется ячейка количества в таблице «Получено».Это происходит без проблем, когда данные помещаются в таблицу.

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

1 Ответ

0 голосов
/ 05 июня 2019

Вот что я подозреваю: входные данные TextBox в вашей пользовательской форме содержат String. Это все, что они могут содержать. Вы пытаетесь привести эту строку как числовую здесь:

Private Sub Transaction_Qty_Box_AfterUpdate()

    On Error Resume Next
    Me.Transaction_Qty_Box.Value = CDec(Me.Transaction_Qty_Box.Value)

    'Confirm my suspicions:
    MsgBox TypeName(Me.Transaction_Qty_Box.Value)
End Sub

Но затем вы передаете этот экземпляр Decimal обратно в TextBox.Value, который неявно преобразует его обратно в String.

Итак, у вас есть правильная идея, но вы делаете это не в том месте, я думаю. Вместо этого попробуйте сыграть здесь:

table_object_row.Range(1, 6).Value = CDec(Me.Transaction_Qty_Box)

Обратите внимание, что это уже то, что вы делаете с Me.DateBox:

table_object_row.Range(1, 1).Value = CDate(Me.Date_Box)

Вероятно, вы можете удалить обработчики событий _AfterUpdate и просто сбросить значения текстового поля на лист. Примените их по мере необходимости и примените форматирование непосредственно к ячейке, если необходимо.

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