【发布时间】:2012-04-25 18:16:02
【问题描述】:
我有一个困惑,我不知道使用 excel VBA 是否会更好。考虑一下,我相信 VBA 会工作得最好,但我不知道如何让它工作。
我在一个工作簿中有两个页面,一个是表单,另一个是数据库,我希望表单的下拉菜单填充表单的其余部分。它确实...我想要的是能够更改表单按提交的值,并且新数据将覆盖旧数据。
这可能吗?
这是我正在谈论的工作表的链接。
http://dl.dropbox.com/u/3327208/Excel/Change.xlsx
这是我现在正在使用的脚本...它获取工作表,将所有内容复制到一行获取该行,将其移动到 NCMR 数据选项卡,然后从原始工作表中清除新行上的数据。
这个代码在技术上可以工作,但我需要做的是让它使用相同的概念,而不是在工作表的末尾创建一个新行,而是找到原始行并将数据从 B 替换为 U它最初所在的行。
我知道这是可能的,我只是不知道怎么做。
'Copy Ranges Variable
Dim c As Variant
'Paste Ranges Variable
Dim p As Range
'Setting Sheet
Set wsInt = Sheets("Form")
Set wsNDA = Sheets("Data")
Set p = wsInt.Range("A14")
With wsInt
c = Array(.Range("B11"))
End With
For i = LBound(c) To UBound(c)
p(i + 1).Value = c(i).Value
Next
With wsNDA
Dim Lastrow As Long
Lastrow = .Range("B" & Rows.Count).End(xlUp).Row + 1
wsInt.Rows("14").Copy
With .Rows(Lastrow)
.PasteSpecial Paste:=xlPasteFormats
.PasteSpecial Paste:=xlPasteValues
.Interior.Pattern = xlNone
End With
With .Range("A" & Lastrow)
If Lastrow = 3 Then
.Value = 1
Else
.Value = Val(wsNDA.Range("A" & Lastrow - 1).Value) + 1
End If
.NumberFormat = "0#######"
End With
End With
End Sub
我找到了这段代码:
Sub CopyTest()
Dim selrow As Range, rngToCopy As Range
With Worksheets("PD DB")
Set selrow = .Range("B:B").Find(.Range("BA1").Value)
'find the cell containing the value
Set rngToCopy = Union(selrow.Offset(0, 9), selrow.Offset(0, 12))
'use offset to define the ranges to be copied
rngToCopy.Copy Destination:=Worksheets("Edit Sheet").Range("B50")
'copy and paste (without Select)
End With
End Sub
据我所知,这将做我最想做的事,但我似乎无法弄清楚在哪里分解它以将其添加到我需要使其按我想要的方式工作的地方。
我可以说的是,它会复制和粘贴,但我想确保它将数据粘贴到它找到的行中,而不是覆盖所述行的数量。
有人可以用我这里的两个脚本帮助实现吗?
【问题讨论】:
-
公式只能以一种方式工作 - 如果您希望能够从表单更新记录,那么您需要使用 VBA 并放弃您的公式。附言。如果您将文件上传为 xlsx 而不是 xlsm,人们更多更有可能查看您的文件(而且它似乎没有任何代码......)
-
要做两件事: 1) 根据记录 ID 找出如何使用 Find() 来匹配数据表中的现有行。 2) 想办法将表单中的单元格映射到数据表上的列。您可以通过创建一个包含单元格地址和列号的表格来做到这一点:然后您可以遍历该表格并在相关方向上传输数据。
-
我可以进行查找,据我所知,问题是大多数地方不只是通过对另一张表的单元格引用来查找(),主要是在代码中写入,找到 x 并替换为 Y,而不是在 A 列中查找 X 并将 B#:U# 替换为 X 行上的 B52:U52 ...我希望这有意义吗?