VBA 的使用问题

VBA 的使用问题,第1张

Vba Eomonth
参考: shrinkurlim/a82fX
其实 excel 2010 以前的版本也有这个函数
只是放在 增益集吧了 请见下面 excel说明节录: EOMONTH传回在 start_date 之前或之后指定月数的这一个月最后一天的序列号码。使用 EOMONTH 来计算刚好落在这一个月最后一天的到期日。有关 Microsoft Excel 使用日期作为序列号码的详细资讯,请参阅 [注解] 一节。如果这个函数不适用,您可以执行 [安装] 程式来安装 [分析工具箱] 。安装 [分析工具箱] 后,您必须使用 [工具] 功能表上的 [增益集] 指令来启用。 语法EOMONTH(start_date
months)Start_date(开始日期) 该日期表示开始日期。日期可能在引号之内输入文字字串(例如,"1998/01/30"),或者数列数字(例如,35825,如果您使用的是 1900 日期系统,则其表示 1998 年 1 月 30 日),或者输入其它公式或函数(例如, DATEVALUE("1998/1/30"))。Months(月数) 系指开始日期之前或之后的月数。月数如果为正值,代表未来的日期。月数如果为负值,代表过去的日期。注解 Excel 以循序序列值储存资料,因此它可以在它们上面执行计算。如果您的活页簿是使用 1904 日期系统,Excel 会以序列值 1 来储存 1990 年 1 月1 日;而以序号 0 来储存 1904 年 1 月 1 日(1904 年 1 月 2 日是序列值 1 )。例如,在 1900日期系统内,Excel 会以序列值 35796 储存 1998 年 1 月 1 日,因为此日期是在 1900 年 1 月 1 日的 35795 天之后。了解更详细有关 Microsoft Excel 如何储存日期和时间的资讯。 如果 start_date 不是有效日期,EOMONTH 会传回 #NUM! 错误值。 如果月数不是一个整数,它会被舍去。 如果 start_date 加上月份得到一个无效值,则 EOMONTH 将会传回 #NUM! 错误值。 范例EOMONTH(DATEVALUE("1998/01/01")
1) 等于 35854 或 1998 年 2 月 28 日EOMONTH("1998/01/01"
-1) 等于 35795 或 1997 年 12 月 31 日EOMONTH("2000/01/30"
3) 等于 36646 或 2000 年 4 月 30 日
不知道2003是否可以使用到这个功能, 但我想可以用普通的公式解决。 举例︰ 要这个月的第一日的话就用这个公式︰ = Date(year(today())
month(today() )
1) 要这个月的最后一日的话就用这个公式︰ = Date(year(today() )
month(today() )+1
1) -1 又或是某一个日子的那一个月的第一日︰(某一个日子是在储存格A1) = Date(year(A1 )
month(A1 )
1) 又或是某一个日子的那一个月的最后一日︰(某一个日子是在储存格A1) Date(year(A1)
month(A1 )+1
1) -1 试试行不行,谢。
参考: sitesgoogle/site/exceltkk2/

Sub Macro1()
Dim arr, i%, j%, l%, f$, p$, ok As Boolean, t As Object'定义变量
p = ThisWorkbookPath & "\"'本工作簿所在的文件夹
ApplicationScreenUpdating = False'关闭屏幕刷新,作用是加快代码运行速度
arr = [a1]CurrentRegion'将A1单元格相邻的已使用矩形区域存入数组arr
With CreateObject("WORDAPPLICATION")'创建一个WORD对象
' Visible = True'显示WORD
For i = 4 To UBound(arr)'循环处理数组
f = p & arr(i, 2) & "doc"'确定一个带路径的WORD文件名, 是用表中2列的文本与本文件夹组合来的
If Dir(f) = "" Then'如果上述这个文件在电脑的本工作簿所有目录里不存在
FileCopy p & "模板doc", f'以模板为标准新建这个文件
DocumentsOpen f'打开这个新建的WORD文件
SelectionHomeKey Unit:=6'将光标移到文件开始
If SelectionFindExecute("姓名:") Then SelectionText = "姓名:" & arr(i, 2)
Else'这IF段:在WORD文件中查找"姓名:"如果找到,则将EXCEL表格2列行的人本添加在"姓名:"之后,没打到则关闭WOR文件
DocumentsOpen f
End If

ok = True'将Ok变量置逻辑真
Set t = ActiveDocumentTables(1)'将WOED文档的第一个表格设为变量t
For j = 2 To tRowsCount'对表格每行进行循环
s = Replace(tCell(j, 1)RangeText, Chr(7), "")'对WORD第一个表格中第一列中一个特殊字符(字符集编号为7的字符,我不知道是什么)进行删除
If Len(s) < 2 Then'如果删除后的文本长度小于2
ok = False'将ok设为逻辑假
Exit For'退出循环不再查找后面的行
End If
Next
If ok Then'如果所有行都没找到那个特殊字符
tRowsLastSelect '选择表格最后一行
SelectionInsertRowsBelow 1 '插入一行
End If
For l = 1 To 5'循环将表格中C到G列i行的内容复制到WOED表格中新插入的行内
tCell(j, l)RangeText = arr(i, l + 2)
Next
ActiveDocumentClose True'保存并关闭WORD档
Next'结束表格各行循环
Quit'退出WORD程序
End With
ApplicationScreenUpdating = True'恢复屏幕刷新
MsgBox "ok"'运行结束d出对话框 ,显示 OK
End Sub

变换关系确定后可以利用下面两个函数之一来对图像进行变换处理。
void apply(const QImage &from, QImage &to);
QImage apply(const QImage &from);

还有几个辅助函数可以用来读取变换关系表。
unsigned char redMap(){ return m_red;}
unsigned char blueMap(){return m_blue;}

说实话,分是太少了点,看了看代码,不象是应付考试的,那就帮你加一下吧。
‘ 声明,以下代码所有用到变量,必须要先定义,不然报错
Option Explicit
’总述:将A1所在的范围定义内的数据,复制到G1单元格,从第二行开始复制,每行复制成六行,并对每行的第三单元格数据进行处理,在文本的"/"前加入英文字母A到F
Sub l() ‘定义一个过程函数
Dim arr, brr(), a ’定义要用到的变量
Dim i%, j%, n%, k%
arr = Sheet1[a1]CurrentRegion ‘取得A1所在范围的数组,这个要选中一个范围,并在菜单中进行定义后,才能得到一个行列单元格值的数组,预定的数组应该是固定6列,若干行。
ReDim brr(1 To UBound(arr) 6, 1 To 6) ’定义目标数组,用来包容复制后的数据,从中可以看出,行数多了六倍,列数固定为六列
a = [{"A","B","C","D","E","F"}] ‘定义每隔六行,每行要插入的字符
For i = 2 To UBound(arr) ’从源数组的第二行开始处理
For n = 1 To 6 ‘每一行被复制为六行
k = k + 1 ’这是目标数组的行序号,处理完一行,就加一
For j = 1 To 6 ‘这是要处理的列数
If j <> 3 Then ’如果不是第三列,直接复制内容
brr(k, j) = arr(i, j)
Else ‘如果是第三列,则在内容的"/"符号前加上英文字母,一行变六行,各行从A到F,在a这个数组中定义
brr(k, 3) = Split(arr(i, 3), "/")(0) & a(n) & "/" & Split(arr(i, 3), "/")(1)
End If
Next
Next
Next
’ 将复制后得到的数组,填充到G2单元格位置
Sheet1[g2]Resize(UBound(brr), 6)Value = brr
End Sub

vb的原程序中注解zd是以单引号 ' 开头的,但如果这个符号是在双引号之内的,则视为文本,不做为注释引导符,这个符号后面的内容均为注释内容。

Visual Basic中,大部分的程序执行都是在事件中完成的。

在代码中,控件的每一个事件都需要声明,声明方法类似一个子过程的声明。大部分的控件在双击控件进入代码界面的时候都会自动补完该控件的最常用事件的声明。具体代码示范如下:

ActiveX控件

ActiveX控件包含不同版本Visual Basic提供的控件和仅在专业版、企业版中提供的控件,并且还包含第三方提供的控件。ActiveX控件是对Visual Basic内置控件的扩充,开发人员可以根据个人需要进行随意扩充,扩充的ActiveX控件将在工具箱中显示。

可插入对象

在Visual Basic的工具栏中,可以放置其他的第三方对象,可以像使用控件一样轻松使用。添加后的对象也在工具箱中显示。有关第三方对象,可以从受信任的来源下载控件,并通过添加引用来导入。支持这些自定义Vb的控件有:ComponentOne Studio,Spread,ActiveReports、MultiRow等。

扩展资料:


VB 的中心思想就是要便于程序员使用,无论是新手或者专家。VB使用了可以简单建立应用程序的GUI 系统,但是又可以开发相当复杂的程序。VB 的程序是一种基于窗体的可视化组件安排的联合,并且增加代码来指定组件的属性和方法。

因为默认的属性和方法已经有一部分定义在了组件内,所以程序员不用写多少代码就可以完成一个简单的程序。过去的版本里面 VB 程序的性能问题一直被放在了桌面上,但是随着计算机速度的飞速增加,关于性能的争论已经越来越少。

Sub yy()'定义过程名称
Dim Arr, i&, Brr'定义两个数组,一个长整型数字变量,一个数组
Sheet1Activate'激活Sheet1
Arr = [a1]CurrentRegion'从A1单元格扩展的连续区域,复制给数组arr
ReDim Brr(1 To (UBound(Arr) - 2) / 3, 1 To 6)'定义brr的维数和每一维的上下限
For i = 3 To UBound(Arr) Step 3'循环遍历,从3开始,到arr的上限减去二结束,步长为3
m = m + 1'每循环一次m增加1
For j = 0 To 2'子循环,从0到2,步长为1
Brr(m, j + 1) = Arr(i + j, 4)'brr(现在把它看成单元格)第m行第j+1列赋值为arr的第i+j行,第四列
Brr(m, j + 4) = Arr(i + j, 5)'同上理解
Next'子循环结束
Next‘父循环结束
[h4]Resize(UBound(Brr), 6) = Brr‘定位到当前sheet的H4单元格开始扩展,向下行数:brr的上限;向右列数:6
End Sub'过程结束


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13408357.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-30
下一篇 2023-07-30

发表评论

登录后才能评论

评论列表(0条)

保存