在附图中,这是最终目标。
我想使用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的新手,对此事的任何帮助都将不胜感激。
答案 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