更改时,Excel Userform文本框值不更新

时间:2013-10-24 18:02:01

标签: excel vba textbox userform

我一直在摸不着头脑,现在经过很多谷歌搜索,我还没有找到答案。我正在学习如何写这些东西,所以如果这是我应该已经知道的基本内容,请提前对不起。基本上我正在做的是使用电子表格中的数据填充用户表单。用户从组合框中选择一个值,然后将电子表格中的相应数据填充到表单上的文本框中。然后,用户可以编辑这些文本框并保存更改,但不保存任何更改。由于某种原因,即使文本框中的文本已更改,文本框的值也不会从原始值更改。我的代码发布在下面。第一个块是用于在组合框更改时填充文本框的代码。那部分工作正常。第二个块是用于保存新数据的代码,这是不起作用的。

Private Sub PartToEdit_Change()

Dim lngDataRow As Long
lngDataRow = EditPartForm.PartToEdit.ListIndex + 1

EditPartForm.Customer.Value = Worksheets("Sheet3").Cells(lngDataRow, 2) 'customer name
EditPartForm.Color.Value = Worksheets("Sheet3").Cells(lngDataRow, 4) 'color
EditPartForm.PartNumber.Value = Worksheets("Sheet3").Cells(lngDataRow, 1) 'part number
EditPartForm.Desc.Value = Worksheets("Sheet3").Cells(lngDataRow, 3) 'description
EditPartForm.Step1.Value = Worksheets("Sheet3").Cells(lngDataRow, 5) 'step 1
EditPartForm.Step2.Value = Worksheets("Sheet3").Cells(lngDataRow, 6) 'step 2
EditPartForm.Step3.Value = Worksheets("Sheet3").Cells(lngDataRow, 7) 'step 3
EditPartForm.Step4.Value = Worksheets("Sheet3").Cells(lngDataRow, 8) 'step 4
EditPartForm.Step5.Value = Worksheets("Sheet3").Cells(lngDataRow, 9) 'step 5
EditPartForm.Step6.Value = Worksheets("Sheet3").Cells(lngDataRow, 10) 'step 6
EditPartForm.Step7.Value = Worksheets("Sheet3").Cells(lngDataRow, 11) 'step 7
EditPartForm.Step8.Value = Worksheets("Sheet3").Cells(lngDataRow, 12) 'step 8
EditPartForm.Step9.Value = Worksheets("Sheet3").Cells(lngDataRow, 13) 'step 9
EditPartForm.Step10.Value = Worksheets("Sheet3").Cells(lngDataRow, 14) 'step 10
EditPartForm.BlastTime.Value = Worksheets("Sheet3").Cells(lngDataRow, 15) 'blast time
EditPartForm.PrepTime.Value = Worksheets("Sheet3").Cells(lngDataRow, 16) 'prep time
EditPartForm.PaintTime.Value = Worksheets("Sheet3").Cells(lngDataRow, 17) 'paint time
EditPartForm.BakeTime.Value = Worksheets("Sheet3").Cells(lngDataRow, 18) 'bake time
EditPartForm.PartNotes.Value = Worksheets("Sheet3").Cells(lngDataRow, 19) 'special notes
EditPartForm.PicPath.Value = Worksheets("Sheet3").Cells(lngDataRow, 20) 'picture path

End Sub

Private Sub SavePartButton_Click()

Dim lngDataRow As Long
lngDataRow = EditPartForm.PartToEdit.ListIndex + 1

Sheets("Sheet3").Range("A" & lngDataRow).Value = EditPartForm.PartNumber.Text 'part number
Sheets("Sheet3").Range("B" & lngDataRow).Value = EditPartForm.Customer.Text 'customer
Sheets("Sheet3").Range("C" & lngDataRow).Value = EditPartForm.Desc.Text 'description
Sheets("Sheet3").Range("D" & lngDataRow).Value = EditPartForm.Color.Text 'color
Sheets("Sheet3").Range("E" & lngDataRow).Value = EditPartForm.Step1.Text 'step 1
Sheets("Sheet3").Range("F" & lngDataRow).Value = EditPartForm.Step2.Text 'step 2
Sheets("Sheet3").Range("G" & lngDataRow).Value = EditPartForm.Step3.Text 'step 3
Sheets("Sheet3").Range("H" & lngDataRow).Value = EditPartForm.Step4.Text 'step 4
Sheets("Sheet3").Range("I" & lngDataRow).Value = EditPartForm.Step5.Text 'step 5
Sheets("Sheet3").Range("J" & lngDataRow).Value = EditPartForm.Step6.Text 'step 6
Sheets("Sheet3").Range("K" & lngDataRow).Value = EditPartForm.Step7.Text 'step 7
Sheets("Sheet3").Range("L" & lngDataRow).Value = EditPartForm.Step8.Text 'step 8
Sheets("Sheet3").Range("M" & lngDataRow).Value = EditPartForm.Step9.Text 'step 9
Sheets("Sheet3").Range("N" & lngDataRow).Value = EditPartForm.Step10.Text 'step 10
Sheets("Sheet3").Range("O" & lngDataRow).Value = EditPartForm.BlastTime.Text 'blast time
Sheets("Sheet3").Range("P" & lngDataRow).Value = EditPartForm.PrepTime.Text 'prep time
Sheets("Sheet3").Range("Q" & lngDataRow).Value = EditPartForm.PaintTime.Text 'paint time
Sheets("Sheet3").Range("R" & lngDataRow).Value = EditPartForm.BakeTime.Text 'bake time
Sheets("Sheet3").Range("S" & lngDataRow).Value = EditPartForm.PartNotes.Text 'part notes
Sheets("Sheet3").Range("T" & lngDataRow).Value = EditPartForm.PicPath.Text 'picture path

Unload EditPartForm

End Sub

如果我使用类似下面的代码手动更改数据,它会更新。

Sheets("Sheet3").Range("A" & lngDataRow).Value = "Some Value"

请帮忙!

谢谢!

1 个答案:

答案 0 :(得分:0)

您是否尝试设置断点并查看它是否实际执行? 在调试时,请检查“监视”,它所写的值是您希望它写入的值。

在我的项目中,我使用:

Sheet.Cells(row, col).value = value