VBA 的跨表数据更新

本文介绍如何使用VBA进行跨表数据更新,具体步骤包括打开源文件和目标文件,根据条件筛选目标文件数据,将筛选后的数据复制到源文件的对应位置,最后关闭目标文件并释放内存资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

VBA 的跨表数据更新

本次跨表更新,是将其中一个表格中的sheet页对应数据复制粘贴到,另一个表格的对应sheet页中。

'首先是将源文件打开,然后获取源文件对应sheet的,这里将目标文件的数据复制到源文件对应sheet
Path = “*****.xls”
Dim mybook As Workbook
Set mybook = GetObject(mpath & mme & target)
'然后打开目标文件
Dim usedata As Workbook
Set usedata = Workbooks.Open(Path)
usedata.Activate '激活目标工作簿
'通过变量r来计数所有的行数,这种方式可以自己设定开始点,到最后末尾点。
r = ActiveSheet.UsedRange.Rows.Count
arr = usedata.Sheets(1).Range(“a2:g” & r)
ReDim brr(1 To UBound(arr), 1 To 6)
m = 0
'下面for语句是可以从对应列的数据来筛选出想要的字段,
For i = 1 To UBound(arr)
If arr(i, 2) = “某某名称” Then
m = m + 1
brr(m, 1) = arr(i, 1)
brr(m, 2) = arr(i, 2)
brr(m, 3) = arr(i, 3)
brr(m, 4) = arr(i, 4)
brr(m, 5) = arr(i, 7) / 10000
brr(m, 6) = arr(i, 7)
End If
Next
If m > 0 Then
'筛选完成后,激活源对应sheet
mybook.Worksheets(“sheet1”).Activate
'将数据赋值给源sheet文件
mybook.Worksheets(“sheet1”).Range(“A3”).Resize(m

### 实现VBA工作数据查询的方法 在 Excel 中使用 VBA 进行工作数据查询是一种常见的需求。以下是通过编写一段完整的 VBA 代码来实现这一功能的具体方法。 #### 使用 `Find` 方法进行查找 可以利用 VBA 的 `Range.Find` 方法,在目标工作中搜索特定值,并返回其位置或其他相关信息。以下是一个具体的例子: 假设有一个名为“数据输入”的工作用于接收用户输入的信息,另一个名为“数据”的工作存储所有的记录。当用户在“数据输入”中的某个单元格填写供应商名称时,程序会在“数据”中查找是否存在相同的供应商名称。如果存在,则显示对应的其他信息;如果不存在,则提示未找到。 ```vba Sub 查询供应商() Dim wsInput As Worksheet, wsData As Worksheet Dim searchValue As String Dim foundCell As Range ' 定义工作对象 Set wsInput = ThisWorkbook.Sheets("数据输入") Set wsData = ThisWorkbook.Sheets("数据") ' 获取用户输入的值 searchValue = wsInput.Range("B2").Value ' 假设 B2 是输入供应商名称的地方 If Len(Trim(searchValue)) = 0 Then MsgBox "请输入有效的供应商名称!", vbExclamation Exit Sub End If ' 在数据中查找匹配项 With wsData.Columns("A:A") ' 假设 A 列保存供应商名称 Set foundCell = .Find(What:=searchValue, LookIn:=xlValues, _ LookAt:=xlWhole, MatchCase:=False) If Not foundCell Is Nothing Then ' 如果找到了对应条目,读取其他列的内容 Dim supplierInfo As String supplierInfo = "供应商编号: " & foundCell.Offset(0, 1).Value & vbCrLf & _ "联系方式: " & foundCell.Offset(0, 2).Value MsgBox "已找到:" & vbCrLf & supplierInfo, vbInformation Else MsgBox "未找到指定的供应商!", vbCritical End If End With End Sub ``` 上述代码实现了基本的功能逻辑[^1]。它首先定义个工作变量分别指向源和目标,接着获取用户输入的关键字作为待查条件,最后调用 `.Find()` 函数执行实际操作并处理结果。 #### 锁定单元格防止误改 (可选扩展) 为了保护已经录入的数据不被随意修改,还可以引入事件驱动机制自动锁定写入后的区域。例如下面这段脚本展示了如何设置单个工作簿内的多个 Sheet 上发生编辑动作之后的行为模式[^2]: ```vba Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False On Error GoTo Finalize If Intersect(Target, Me.Range("A:B")) Is Nothing Or Target.Cells.CountLarge > 1 Then Exit Sub Dim response As Integer response = MsgBox("您确定要更改此单元格吗?" & vbCrLf & "(当前值:" & Target.Value & ")", vbYesNoCancel + vbQuestion, "确认修改?") Select Case response Case vbYes ' Allow change without further action. Case vbNo Application.Undo Case Else Application.Undo End Select Finalize: Application.EnableEvents = True End Sub ``` 以上片段适用于任何启用了宏的工作薄文件(.xlsm),只要将其粘贴到相应Sheet模块下的代码窗口即可生效。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值