|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
所有Distribution Summary Report都是excel格式(.xslx)保存在一个文件夹里,文件的命名都是以格式:"Distribution Summary Report Month 2018_Loan的名称”。需要VBA实现:在一个cell里输入Distribution的月份年份(e.g. 0718),在另一个cell里输入这些Distribution Summary Report保存的文件夹路径,在再另外一个cell里输入我想要生成的payment file保存的路径。然后点击一个按钮运行VBA/宏,Excel自动跑所有的Distrribution Summary Report,然后生成两个payment file。
其中一个payment file是为了所有收现金的客户,文件中包括:客户的名字,客户的银行BSB,银行账号,付款额,和备注(对于每个Loan的客户,备注都是一样的,就是这个loan的名字)。另一个payment file是为了所有reinvestment的客户,文件中包括:客户的名字,【基金的银行BSB,银行账号 (都是同一个)】,付款额,和备注(对于每个Loan的客户,备注都是一样的,就是这个loan的名字)。除了基金的银行BSB和账号(一个固定不变),其他信息都在Distribution Summary Report中,希望VBA能自动复制粘贴到payment file中。名字是英文, 银行bsb 账号都是数字,备注是英文字母和数字结合。
另外这两个payment file的格式要存成(.csv)。
本人只有一点VB基础,基本的定义倒是会,但是在VBA中第一步在CELL里的操作我都不会了。我定义的如下,学习了一下其他大神的代码
Sub 数组查找工作簿汇总()
Dim vReadData As Variant '定义读取工作簿中表的数据的数组变量
Dim vData As Variant '定义读取工作簿中表的规范格式数据的数组变量
Dim wWB As Workbook '定义工作簿变量
Dim sPath As String '定义文件夹变量
Dim sFile As String '定义文件名变量
Dim nRow As Double '定义行数变量
Dim nCol As Integer '定义列数变量
Dim bAdd As Boolean '定义是否需要作为新记录添加的逻辑变量
Dim vFill As Variant '定义将要作为查询结果的数组变量
Dim nFill As Double '定义查询结果数组的行数的变量
Dim sAccountNo As String, sEntity As String, sCum As Currency
Dim sDistribution As Currency, sAmountPaid As Currency, sAmountreinvested As Currency
sBankAccountName As String, sBSB As String
sAccountNumber As String '定义标题变量,currency是货币定义,其他(string)的是定义一个几乎无限长的数组
Application.ScreenUpdating = False '禁止数据更新,提高运行速度
vTitle = Split("Account No|Entity|Cum|Distribution|Amount Paid|Amount reinvested|Bank Account Name|BSB|Account Number", "|") '将所有标题用|隔开的字符串根据|分离成数组
sAccountNo = Trim([A3]) '获取查询系统账号的条件,下面同理
sEntity = Trim([B3])
sCum = Trim([C3])
sDistribution = Trim([D3])
sAmountPaid = Trim([E3])
sAmount reinvested = Trim([F3])
sBankAccountName = Trim([G3])
sBSB = Trim([G3])
sAccountNumber = Trim([I3])
ReDim vFill(1 To 9, 1 To 1) '定义一个9列1行的数组,行数不断增加所以定义在后面
sPath = wWB.Path & "" '获取本工作簿所在文件夹
sFile = Dir(sPath & "*.xls*") '查找sPath文件夹内的与xls有关后缀名的文件
Do While sFile <> "" '如果查找不到相关文件将会返回空字符串,找到的话,将返回文件名的全名
If sFile <> ThisWorkbook.Name Then '如果找到的文件名不等于本工作簿的文件名
With Workbooks.Open(sPath & sFile) '打开工作簿sFile
vData = .Sheets(1).UsedRange.Value '将第一个表的所有已用单元格的数值赋值给数组
.Close False '关闭工作簿sFile
End With
For nRow = 2 To UBound(vData) 'vData中,第1行是标题,故从2行开始读取数据
然后的条件筛选和分配到两个文件就不太会了,还望各位老师赐教。
|
|