【问题标题】:Insert TextBox value into first empty cell in column将 TextBox 值插入列中的第一个空单元格
【发布时间】:2020-01-26 05:27:02
【问题描述】:

我有以下代码可以正常工作。 (文本框位于 Excel VBA 中的“用户窗体”上,并通过单击该用户窗体上的 CommandButton1 来执行。)但是谁能帮我将每个文本框的值插入到 M 列的第一个空单元格中?这种方式插入空行。我将在几个工作簿中使用它,因此使用“ActiveSheet”对我来说是最简单的。

Sub UserForm_Initialize()
Me.TextBox1.Value = CStr(ActiveSheet.Range("M1").Value)
Me.TextBox2.Value = CStr(ActiveSheet.Range("M2").Value)
Me.TextBox3.Value = CStr(ActiveSheet.Range("M3").Value)
Me.TextBox4.Value = CStr(ActiveSheet.Range("M4").Value)
Me.TextBox5.Value = CStr(ActiveSheet.Range("M5").Value)
Me.TextBox6.Value = CStr(ActiveSheet.Range("M6").Value)
Me.TextBox7.Value = CStr(ActiveSheet.Range("M7").Value)
Me.TextBox8.Value = CStr(ActiveSheet.Range("M8").Value)
Me.TextBox9.Value = CStr(ActiveSheet.Range("M9").Value)
Me.TextBox10.Value = CStr(ActiveSheet.Range("M10").Value)
Me.TextBox11.Value = CStr(ActiveSheet.Range("M11").Value)
Me.TextBox12.Value = CStr(ActiveSheet.Range("M12").Value)
Me.TextBox13.Value = CStr(ActiveSheet.Range("M13").Value)
Me.TextBox14.Value = CStr(ActiveSheet.Range("M14").Value)
Me.TextBox15.Value = CStr(ActiveSheet.Range("M15").Value)
Me.TextBox16.Value = CStr(ActiveSheet.Range("M16").Value)
Me.TextBox17.Value = CStr(ActiveSheet.Range("M17").Value)
Me.TextBox18.Value = CStr(ActiveSheet.Range("M18").Value)
Me.TextBox19.Value = CStr(ActiveSheet.Range("M19").Value)
Me.TextBox20.Value = CStr(ActiveSheet.Range("M20").Value)
Me.TextBox21.Value = CStr(ActiveSheet.Range("M21").Value)
Me.TextBox22.Value = CStr(ActiveSheet.Range("M22").Value)
End Sub

'Insert Button
Private Sub CommandButton1_Click()
Range("M1") = Me.TextBox1.Text
Range("M2") = Me.TextBox2.Text
Range("M3") = Me.TextBox3.Text
Range("M4") = Me.TextBox4.Text
Range("M5") = Me.TextBox5.Text
Range("M6") = Me.TextBox6.Text
Range("M7") = Me.TextBox7.Text
Range("M8") = Me.TextBox8.Text
Range("M9") = Me.TextBox9.Text
Range("M10") = Me.TextBox10.Text
Range("M11") = Me.TextBox11.Text
Range("M12") = Me.TextBox12.Text
Range("M13") = Me.TextBox13.Text
Range("M14") = Me.TextBox14.Text
Range("M15") = Me.TextBox15.Text
Range("M16") = Me.TextBox16.Text
Range("M17") = Me.TextBox17.Text
Range("M18") = Me.TextBox18.Text
Range("M19") = Me.TextBox19.Text
Range("M20") = Me.TextBox20.Text
Range("M21") = Me.TextBox21.Text
Range("M22") = Me.TextBox22.Text
Range("A25").Value = "Hide"
Unload Me
End Sub

Sub CommandButton2_Click()
'Cancel button
Unload Me
End Sub

【问题讨论】:

  • 将“Hide”插入“A25”会隐藏 M 行。
  • “M 行”? M 是一列,而不是一行。
  • 我的错。在花了几个小时试图完成这件事后,我感到非常沮丧。将值插入 COLUMN M 中的第一个空单元格,然后“隐藏”隐藏 COLUMNS M:Q
  • Column M 的第一个空单元格还是最后一个空单元格? Hide hides 是什么意思?要隐藏任何行吗?
  • 所以根据您发布的内容,“M 列中的第一个空单元格”将是M23,对吧?还是我错过了什么?

标签: excel vba


【解决方案1】:

编辑:最后的猜测

你可以这样做:

Private Sub CommandButton1_Click()
    Dim i As Long, c As Range
    ActiveSheet.Range("M1:M22").ClearContents
    Set c = ActiveSheet.Range("M1")

    For i = 1 to 22
        c.Value = Me.Controls("TextBox" & i).Text
        If Len(c.Value) > 0 then Set c = c.offset(1, 0)      
    Next i

    Unload Me
End Sub

【讨论】:

  • 当我的用户窗体加载时,它使用 Me.TextBox1.Value = CStr(ActiveSheet.Range("M1").Value) 将单元格中已经存在的电子邮件地址放入文本框中。 @Tim Williams,您的代码有效,但它将框中已有的内容添加到末尾,因此单元格具有重复值。
  • 您的更新代码做同样的事情:它将重复的值粘贴到已经存在的内容的末尾...
  • 您是否考虑过在重新填充之前清除范围 M1:M22?这似乎是要走的路......
  • 这听起来确实是修复它的好方法。关于如何做到这一点以及在代码中放置它的任何想法?
  • Range("M1:M22").ClearContents 作为 commandbutton1_click 的第一行
猜你喜欢
  • 2013-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-13
  • 1970-01-01
相关资源
最近更新 更多