excel用vba宏处理一些日期时间

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了excel用vba宏处理一些日期时间相关的知识,希望对你有一定的参考价值。

有一个excel表在B列的数据全部是日期时间,格式是这样的:Fri 2/17 11:29:00
就是简写的星期+日期+时间,现在要求用vba宏处理这个日期时间加上16个小时 然后格式变成 2/18/12 23:00,如某行单元格原来的值为Fri 2/17 11:59:00 则变成 2/18/12 03:59,感谢所有的热心网友~

在VBA中日期的一部分加减可以使用dateadd函数。
比如dateadd("yyyy",1,now()),在今天的日期上加上一年。
比如dateadd("yyyy",-1,now()),在今天的日期上减去一年。
比如dateadd("d",1,now()),在今天的日期上加上一天。
比如dateadd("d",-1,now()),在今天的日期上减去一天。
比如dateadd("m",1,now()),在今天的日期上加上一月。
比如dateadd("d",-1,now()),在今天的日期上减去一月。
参考技术A 不用VBA,直接用你的日期 +TEXT("16:00","h:mm")就可以了追问

因为还有其他数据要自动化处理,所以必须使用vba,谢谢!

追答

囧~~~简单写了一个,操作方法:选中要+小时的单元格,然后运行宏(如果要修改加的小时,请修改(#4:00:00 PM#)),
Sub Macro1()
'
' Macro1 Macro
''
Dim r, c, rs As Integer
c = Selection.Column
rs = Selection.Row + Selection.Rows.Count '结束行
For r = Selection.Row To rs
Cells(r, c) = Cells(r, c) + (#4:00:00 PM#)
Next r
End Sub

参考技术B Function zftosj(str)
Dim sj As Date
sj = "2012/" & Right(str, Len(str) - 4)
zftosj = sj + #4:00:00 PM#
End Function本回答被提问者采纳
参考技术C 有表格吗》?可以发给我,qls38@139.com追问

已发

需要骨架代码从 PythonWin 调用 Excel VBA

【中文标题】需要骨架代码从 PythonWin 调用 Excel VBA【英文标题】:Need skeleton code to call Excel VBA from PythonWin 【发布时间】:2010-09-25 15:30:00 【问题描述】:

我需要从 python 脚本调用 Excel 工作簿中的 VBA 宏。其他人为 Excel 工作簿提供了宏。该宏从外部数据库中获取更新的值,并对数据执行一些相当复杂的处理。我需要这个按摩的结果,如果可以避免的话,我真的不想在我的 Python 脚本中复制它。所以,如果我可以从我的脚本中调用宏,并获取经过处理的结果,那就太好了。

我从“Win32 上的 Python 编程”中学到的关于 COM 的一切。好书,但不足以完成我手头的任务。我搜索了,但没有找到任何关于如何做到这一点的好例子。有没有人有任何好的例子,或者可能有一些关于如何寻址/调用 VBA 宏的骨架代码? Excel COM 接口上的一般参考资料(书籍、网络链接等)在这里也会有所帮助。谢谢。

【问题讨论】:

【参考方案1】:

好的,我明白了!感谢您对 Application.Run 方法的帮助。这些信息,加上“Microsoft Excel Visual Basic 参考”:http://msdn.microsoft.com/en-us/library/aa209782(office.10).aspx——正如 Hammond & Robinson 在“Win32 上的 Python 编程”中所推荐的——正是我们所需要的。

这是框架代码:

import win32com.client
xl=win32com.client.Dispatch("Excel.Application")
xl.Workbooks.Open(Filename="<your Excel File>",ReadOnly=1)
xl.Application.Run("<your macro name>")
#...access spreadsheet data...
xl.Workbooks(1).Close(SaveChanges=0)
xl.Application.Quit()
xl=0

【讨论】:

【参考方案2】:

对不起,我对python不够了解。 但是,以下内容应该会有所帮助。

Excel 的 Application 对象有一个 Run 方法 - 它接受宏的名称及其参数。

假设工作簿有一个名为 test 的宏。

Sub test(ByVal i As Integer) MsgBox "hello world " & i End Sub

您可以使用 Application.Run "test", 1234 调用它

这将调用宏并显示带有“hello world 1234”的消息框。

【讨论】:

谢谢。这对一些人有帮助。从 pywin32 方面来看,我仍在寻找显示打开文件的初始步骤并引用完整界面的内容。 PyWin32 显示了支持 Run 方法的接口层次结构的几个部分。

以上是关于excel用vba宏处理一些日期时间的主要内容,如果未能解决你的问题,请参考以下文章

Excel VBA宏根据日期选择数据并将其移动到新选项卡

VBA Excel宏保存为带有日期的单元格的一部分

通过VBA 程序找出excel表中B列的最大日期,并且排除一个不要的年份的日期,如12/31/2099(日期格式),急

VBA 在 Excel 2016 中以不同方式处理日期?有这方面的文件吗?

用EXCEL写一个宏.每天自动以日期时间为文件名保存怎么写?

VBA Excel 在文本框中提供当前日期