无法将组合框中的值更新为工作表

时间:2016-02-22 08:24:17

标签: vba excel-vba combobox excel

我是VBA Coding的新手。我有一个userform,它从excel sheet中检索值。有一个组合框可以检索该值。但是我想改变组合框值&把它保存在Excel中.....

Excel中的数据图像

Image for Data in Excel

Dim temp As String
Dim findid As String
Dim lkrange As Range
Set lkrange = Sheet6.Range("A:D")

findid = TextBox1.Value

On Error Resume Next
temp = Application.WorksheetFunction.Vlookup(findid, lkrange, 1, 0)
If Err.Number <> 0 Then
MsgBox "ID not found"
Else
MsgBox "ID found"

Label5.Caption = Application.WorksheetFunction.Vlookup(findid, lkrange, 2, 0)
Label6.Caption = Application.WorksheetFunction.Vlookup(findid, lkrange, 3, 0)
ComboBox1.Value = Application.WorksheetFunction.Vlookup(findid, lkrange, 4, 0)

End If

End Sub

Private Sub CommandButton2_Click()
Dim fid As String
Dim rowc As Integer
Dim rowv As Integer

fid = TextBox1.Value

rowc = Application.WorksheetFunction.Match(fid, Range("A:A"), 0)
rowv = rowc - 1

Cells(rowv, 4).Values = marktable.ComboBox1.Value

End Sub

请帮助我...先进的感谢....

1 个答案:

答案 0 :(得分:0)

您可以尝试以下

CREATE DEFINER=`root`@`%` TRIGGER `before_insert` BEFORE INSERT ON `table` FOR EACH ROW SET
new.AVG_COLUMN1 = (SELECT avg(COLUMN1) FROM (SELECT COLUMN1 from table ORDER BY DateTimeCol DESC LIMIT 20) as COLUMN1_A), 
new.AVG_COLUMN2 = (SELECT avg(COLUMN2) FROM (SELECT COLUMN2 from table ORDER BY DateTimeCol DESC LIMIT 20) as COLUMN2_A), 
new.AVG_COLUMN3 = (SELECT avg(COLUMN3) FROM (SELECT COLUMN3 from table ORDER BY DateTimeCol DESC LIMIT 20) as COLUMN3_A)

有一些错误:

  • Option Explicit Private Sub CommandButton1_Click() Dim lkrange As Range Dim rng As Range Set lkrange = ThisWorkbook.Sheets("Sheet6").Range("A:A") With Me Set rng = MyMatch(.TextBox1.Value, lkrange) If rng Is Nothing Then MsgBox "ID not found" Else MsgBox "ID found" .Label5.Caption = rng.Offset(0, 1) .Label6.Caption = rng.Offset(0, 2) .ComboBox1.Text = rng.Offset(0, 3) End If End With End Sub Private Sub CommandButton2_Click() Dim lkrange As Range Dim rng As Range Set lkrange = ThisWorkbook.Sheets("Sheet6").Range("A:A") With Me Set rng = MyMatch(.TextBox1.Value, lkrange) If Not rng Is Nothing Then rng.Offset(0, 3).Value = .ComboBox1.Text End With End Sub Private Function MyMatch(val As Variant, rng As Range, Optional matchType As Variant) As Range Dim row As Long If IsMissing(matchType) Then matchType = 0 On Error Resume Next row = Application.WorksheetFunction.Match(val, rng, matchType) If Err = 0 Then Set MyMatch = rng.Parent.Cells(rng.Rows(row).row, rng.Column) End Function 不是vaild

    如果你想指向名为&#34; Sheet6&#34;属于宏所在的工作簿,那么您必须使用Sheet6.Range("A:D")

  • ThisWorkbook.Sheets("Sheet6").Range("A:A")无效

    您必须使用Cells(...,...).Values =...

但我认为以下建议更为重要:

  • 始终在每个模块的最开头使用Cells(...,...).Value =语句

    这将强制您显式声明每个变量,但是它会在调试过程中节省大量时间

  • 避免/限制使用Option Explicit声明

    并且,在使用时,请确保尽快通过&#34; On Error GoTo 0&#34;一。这样你可以不断控制错误是否发生以及

    我把它限制在&#34;包装&#34;函数(MyMatch())。

  • 始终指定&#34;完整&#34;指向范围时的引用

    我的意思是,On Error Resume Next隐含地指向活动的单元格,这可能并不总是您想要指向的单元格。