需求:为显示邮件按钮添加Excel VBA宏,按日期更新Table工作表
实现「显示邮件」按钮的VBA宏
以下是完善后的VBA代码,已添加日期判断逻辑,满足你要求的填充/更新功能:
Sub SaveValues() Dim targetDate As String Dim tableWs As Worksheet Dim sourceWs As Worksheet Dim findRange As Range Dim targetCol As Integer ' 定义工作表对象,简化代码维护 Set sourceWs = ThisWorkbook.Worksheets("Intradag likviditet") Set tableWs = ThisWorkbook.Worksheets("Table") ' 获取目标日期(L2单元格的文本格式日期) targetDate = sourceWs.Range("L2").Value If targetDate = "" Then Exit Sub ' 日期为空时直接退出,避免无效操作 ' 在Table表第9行精确查找目标日期 Set findRange = tableWs.Rows(9).Find(What:=targetDate, LookIn:=xlValues, LookAt:=xlWhole) If Not findRange Is Nothing Then ' 日期已存在,获取对应列号 targetCol = findRange.Column Else ' 日期不存在,定位第9行第一个空列 targetCol = tableWs.Cells(9, tableWs.Columns.Count).End(xlToLeft).Column + 1 ' 在新列写入目标日期 tableWs.Cells(9, targetCol).Value = targetDate End If ' 批量填充C11的值到10、11、12行对应列 sourceWs.Range("C11").Copy tableWs.Range(tableWs.Cells(10, targetCol), tableWs.Cells(12, targetCol)).PasteSpecial Paste:=xlPasteValues ' 批量填充C23的值到13、14、15行对应列 sourceWs.Range("C23").Copy tableWs.Range(tableWs.Cells(13, targetCol), tableWs.Cells(15, targetCol)).PasteSpecial Paste:=xlPasteValues ' 取消复制状态,清除剪贴板内容 Application.CutCopyMode = False End Sub
关键逻辑说明:
- 日期查找:使用
Rows(9).Find在Table表第9行精确匹配目标日期,返回对应单元格对象 - 列定位:找到日期则复用现有列;未找到则从第9行最右侧向左定位首个非空列,再+1得到新列位置
- 值填充:采用
PasteSpecial xlPasteValues仅粘贴数值,避免复制原单元格的格式或公式 - 边界处理:新增日期为空时的退出判断,防止无效写入
内容的提问来源于stack exchange,提问作者Christoffer
相关产品推荐
相关产品推荐

