Visual Basic – 将条目添加到另一个工作表中的列表
我有两张工作簿。 Sheet1被命名为Form,Sheet2被命名为Data。 我想在Sheet1上创build一个新的行在Sheet2上的窗体。 我对VBA相当陌生,实际上只是试图通过Google来教导自己。 我的问题是,你怎么能参考一个不活跃的表格,并按照预期编码信息,而不用可视化地切换标签?
任何帮助是极大的赞赏。
非常恭敬地,
亚当·沃克
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
我希望这对你有所帮助。
一般来说,macroslogging器会教你如何做事情。 但是,它的确写了非常笨的代码,并且总是和Active*
(Cell,Range,WorkSheet等)一起使用.select
,你已经发现它不是很有效率或者很漂亮。
尝试这个:
ActiveWorkbook.worksheets("Form").range("A1") = "This goes on the Form sheet" ActiveWorkbook.worksheet("Data").range("A1") = "This goes on the Data sheet"
当然,这依赖于ActiveWorkbook
,但你明白了。
首先,因为你是vba的新手,所以你要学会以正确的方式宣布,所有的人都能理解你在说什么,当你说的forms变得模糊的时候,你是否可以理解用户forms或公式?
关于另一张不活动的工作表的引用只是声明如下:
Workbooks("example.xlsm").Worksheets("Data").Range("A1").EntireRow.Insert
这个声明会在第一行插入一个新行,用这个例子你可以得到如何声明你想要工作的工作簿,工作表和范围
矫枉过正的例子 :这里是带有示例表单的表单。 Submit
button已被分配了macros的SubmitForm
,这是一个在VBA中创build的过程(代码如下)。
当想从特定单元格或单元格中检索值时,命名范围在VBA中可能非常有用。 通过将NamedRanges分配给表单的每个字段,我们可以简单地通过使用Range("NamedRangeName").Value
在VBA中检索它们的值Range("NamedRangeName").Value
- 第
First
字段已被分配了NamedRangeFormFirstName
-
Last
字段已经被分配了NamedRangeFormLastName
-
Email
字段已被分配NamedRangeFormEmail
以下是我的示例中的Data
表。 我们有一个标题行,然后是下面的空白行。 当单击“ Form
上的“ Submit
button时,将在此处创build新的logging(行)。
数据表提交之前单击
数据表提交后单击
这里是与此示例一起的SubmitForm
过程代码。 当用户通过单击button提交表单时,它会执行以下操作:
- 通过分配的
NamedRanges
从Form
字段中检索值 - find
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