Visual Basic-将条目添加到另一个工作表中的列表中

问题描述 投票:1回答:5

我有一本有2张纸的工作簿。 Sheet1命名为Form,Sheet2命名为Data。我正在尝试在Sheet1上创建一个表单,以便在Sheet2中创建一个新行。我对VBA还是很陌生,实际上我只是想通过Google自学。我的问题是,如何在不可视切换选项卡的情况下如何引用未激活的工作表并将其整理为所需的信息?

非常感谢您的帮助。

非常感谢,

亚当·沃克

excel excel-vba vba
5个回答
2
投票
Option Explicit
Sub add_row()
    Dim wb As Workbook, ws2 As Worksheet
    Set wb = ThisWorkbook
    Set ws2 = wb.Sheets("Sheet2")
    ws2.Rows(1).Insert shift:=xlDown
End Sub

以上内容将在表格2的顶部添加新行。如果要在另一张纸上执行多个动作,则还可以使用with语句。

Option Explicit
Sub add_data()
    Dim wb As Workbook, ws2 As Worksheet
    Set wb = ThisWorkbook
    Set ws2 = wb.Sheets("Sheet2")
    With ws2
        .Rows(1).Insert shift:=xlDown
        .Cells(1, 1).Value2 = "Rows shifted down by 1!"
    End With
End Sub

我希望这对您有帮助。


1
投票

通常,宏记录器将教您如何做事。但是,它确实编写了非常晦涩的代码,并且始终通过使用您发现的Active*来与.select(单元格,范围,工作表等)一起使用,效率不是很高,也不是很漂亮。

尝试一下:

ActiveWorkbook.worksheets("Form").range("A1") = "This goes on the Form sheet"
ActiveWorkbook.worksheet("Data").range("A1") = "This goes on the Data sheet"

当然,这取决于ActiveWorkbook,但是您知道了。


1
投票

首先,由于您是vba的新手,您将学习以正确的方式进行声明,以便所有人都可以理解您在说什么,当您说表格变得含糊不清时,您可以理解它是用户表格还是公式?

关于对另一个不活动的工作表的引用,只需这样声明:

Workbooks("example.xlsm").Worksheets("Data").Range("A1").EntireRow.Insert

此声明将在第1行上插入新行,在该示例中,您可以了解如何声明要使用的工作簿,工作表和范围


0
投票

Overkill示例:这是带有示例表格的Form表。 Submit按钮已分配给宏SubmitForm,这是在VBA中创建的过程(以下代码)。

命名范围在VBA中从一个或多个特定单元格中检索值时非常有用。通过将NamedRanges分配给表单的每个字段,我们只需使用Range("NamedRangeName").Value

即可在VBA中检索其值
  • First字段已被指定为NamedRange FormFirstName
  • Last字段已被指定为NamedRange FormLastName
  • Email字段已被指定为NamedRange FormEmail

“表格”

下面是我的示例中的Data表。我们有一个标题行,然后是空白行。单击Submit表上的Form按钮后,将在此处创建新记录(行)。

提交之前的数据表被点击

“数据表之前”

提交后单击数据表

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS83Qm82bi5wbmcifQ==” alt =“数据表后” >>>

这是此示例附带的SubmitForm过程代码。当用户通过单击按钮提交表单时,它将执行以下操作:

  • 通过分配的FormNamedRanges工作表字段中检索值
  • Data工作表上查找下一个空行
  • 插入从表单中获取的值
Public Sub SubmitForm()

Application.ScreenUpdating = False
Application.Calculation = XlCalculation.xlCalculationManual

Dim userFirstName As String
Dim userLastName As String
Dim userEmail As String

'   get a reference to the Form worksheet
Dim formWorksheet As Worksheet
Set formWorksheet = ActiveWorkbook.Worksheets("Form")

'   using the named ranges, retrieve the form field values
userFirstName = formWorksheet.Range("FormFirstName").Value
userLastName = formWorksheet.Range("FormLastName").Value
userEmail = formWorksheet.Range("FormEmail").Value

Dim dataWorksheet As Worksheet
Dim headerRow As Integer
Dim nextUserRow As Integer
Dim userIdColumn As Integer
Dim firstNameColumn As Integer
Dim lastNameColumn As Integer
Dim emailColumn As Integer
Dim createdDateColumn As Integer

'   get a reference to the Data worksheet
Set dataWorksheet = ActiveWorkbook.Worksheets("Data")
headerRow = 1

'   get the number of used rows (rows that contain data) on this worksheet,
'   then add one to it. This will be the next empty row where our new
'   record will live
nextUserRow = dataWorksheet.UsedRange.Rows.Count + 1

'   set the columns for each field
userIdColumn = 1
firstNameColumn = 2
lastNameColumn = 3
emailColumn = 4
createdDateColumn = 5

'   persist the data retrieved from the Form sheet to the Data sheet row
dataWorksheet.Cells(nextUserRow, userIdColumn).Value = (nextUserRow - headerRow)
dataWorksheet.Cells(nextUserRow, firstNameColumn).Value = userFirstName
dataWorksheet.Cells(nextUserRow, lastNameColumn).Value = userLastName
dataWorksheet.Cells(nextUserRow, emailColumn).Value = userEmail
dataWorksheet.Cells(nextUserRow, createdDateColumn).Value = Now

Application.Calculation = XlCalculation.xlCalculationAutomatic
Application.ScreenUpdating = True

End Sub


0
投票

我们可以使用此代码在团队,共享点或onedrive共享的在线Excel文件中添加数据吗?>

© www.soinside.com 2019 - 2024. All rights reserved.