VBA将数据传输到另一个工作簿

时间:2017-07-08 17:12:17

标签: excel vba

VBA transfer data from one sheet to another

在附图中,这是最终目标。

我想使用VBA将数据从一张纸传输到另一张纸。 到目前为止,当我点击"提交"时,Country,Name,Surname的数据将被正确发送到名为" data"的工作表。但是,我不确定如何填充" Race"名为" data"的工作表中的字段。我知道我应该使用if语句,但我不确定如何将它合并到VBA代码中。

这是目前的vba代码。

import ast

import_string = """from abc.lmn import pqr
from abc.lmn import pqr as xyz
import abc
import abc as xyz"""

modules = []
for node in ast.iter_child_nodes(ast.parse(import_string)):
    if isinstance(node, ast.ImportFrom):
        if not node.names[0].asname:  # excluding the 'as' part of import
            modules.append(node.module)
    elif isinstance(node, ast.Import): # excluding the 'as' part of import
        if not node.names[0].asname:
            modules.append(node.names[0].name)

我是VBA的新手,对此事的任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:3)

这里有适合你的东西,不过我对你有一些批评

1)选择/激活/复制/粘贴都是坏习惯。你最终会编写大量毫无意义的代码来从中获得任何用处,并且你会减慢整个过程的速度。如果有很多事情与你互动,这很重要。

2)。表单选项卡上的Race看起来是一个合并的单元格。我的代码片段在假设种族实际上是细胞b13,c13和d13的情况下工作。合并的单元格很烦人,可能是您的问题的根本原因。或者我可能完全错了,你真的是超级新人。无论哪种方式你都在学习。

Private Sub CommandButton1_Click()
     Dim Country As String, Name As String, Surname As String, Race As String
     dim ws as worksheet, wb as workbook, ws1 as worksheet

     set wb = ThisWorkbook
     set ws = wb.Sheets("form")
     set ws1 = wb.Sheets("data")
     Country = ws.Range("B4").value
     Name = ws.Range("B6").value
     Surname = ws.Range("B7").value

     If ws.Range("B13").Value <> "" Then Race = "White"
     If ws.Range("C13").Value <> "" Then Race = "Black"
     If ws.Range("D13").Value <> "" Then Race = "Asian"

     ws1.Cells(ws1.Rows.Count,1).End(xlUp).Offset(1,0).Value = Country
     ws1.Cells(ws1.Rows.Count,1).End(xlUp).Offset(0,1).Value = Name
     ws1.Cells(ws1.Rows.Count,1).End(xlUp).Offset(0,2).Value = Surname
     ws1.Cells(ws1.Rows.Count,1).End(xlUp).Offset(0,3).Value = Race
End Sub

我实际上更喜欢这样,变量更少。您可以将值存储在数组中,而不是使用无意义的变量来存储值,而不是一次性将它们全部移动,我也认为可以节省成本。 授予我理解我使用了相同数量的变量来制作工作表/工作簿对象,但你可以把它们写出来很长的路径(我实际上更愿意这样做,即使它在那一点上是一层文字)

我还包括了一些检查,以防万一选择了多个种族,或者根本没有。

Private Sub here()

    Dim ws As Worksheet, wb As Workbook, ws1 As Worksheet
    Dim arr(0, 4) As String

    Set wb = ThisWorkbook
    Set ws = wb.Sheets("Sheet1")
    Set ws1 = wb.Sheets("Sheet2")
    arr(0, 0) = ws1.Cells(ws1.Rows.Count, 1).End(xlUp).Value + 1
    arr(0, 1) = ws.Range("B4").Value
    arr(0, 2) = ws.Range("B6").Value
    arr(0, 3) = ws.Range("B7").Value

    If (ws.Range("B13").Value <> "" And ws.Range("C13").Value <> "") _
        Or (ws.Range("B13").Value <> "" And ws.Range("D13").Value <> "") _
            Or (ws.Range("D13").Value <> "" And ws.Range("C13").Value <> "") Then
        arr(0, 4) = "Mixed Race"
    Else
        arr(0, 4) = IIf(ws.Range("B13").Value <> "", "White", _
            IIf(ws.Range("C13").Value <> "", "Black", _
                IIf(ws.Range("D13").Value <> "", "Asian", "Must Be Non-Human")))
    End If

    ws1.Range(ws1.Cells(ws1.UsedRange.Rows.Count + 1, 1), _
        ws1.Cells(ws1.UsedRange.Rows.Count + 1, 5)).Value2 = arr

End Sub