Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 重复一个过程_Vba_Loops_Repeat - Fatal编程技术网

Vba 重复一个过程

Vba 重复一个过程,vba,loops,repeat,Vba,Loops,Repeat,我已经编写了一段代码,根据所选的客户ID在“发票”选项卡上生成发票对账单,数据从“数据”选项卡中提取 我希望它能为每个不同的客户ID生成发票对账单。因此,“我的数据”选项卡中的数据将被拆分(按客户端ID)并转换为报表格式,在“发票”选项卡上一个比另一个低。因此,我为每个语句添加了代码。这将循环所有数据并正确地分组客户端ID。但是,如果一个客户端ID有多个记录,则它会复制该客户端ID的发票,复制次数与复制记录的次数相同。i、 e.如果客户有3份记录,我将得到3份相同的发票。我只想要一个 下面是我的

我已经编写了一段代码,根据所选的客户ID在“发票”选项卡上生成发票对账单,数据从“数据”选项卡中提取

我希望它能为每个不同的客户ID生成发票对账单。因此,“我的数据”选项卡中的数据将被拆分(按客户端ID)并转换为报表格式,在“发票”选项卡上一个比另一个低。因此,我为每个语句添加了代码。这将循环所有数据并正确地分组客户端ID。但是,如果一个客户端ID有多个记录,则它会复制该客户端ID的发票,复制次数与复制记录的次数相同。i、 e.如果客户有3份记录,我将得到3份相同的发票。我只想要一个

下面是我的代码(我已经删除了很多格式等,试图让它稍微短一点,让你们看),以产生一个单独的声明,对不起,若它的效率低,我只是开始vba上周一,我必须学习快

Sub CreateStatements()

Dim Selection As String
Dim LastRow As Long
Dim LastRow2 As Long
Dim Client1 As String
Dim ClientRef As Variant
Dim Client As variant
Dim ClientAddr1 As variant
Dim ClientAddr2 As variant
Dim ClientAddr3 As variant
Dim ClientAddr4 As variant
Dim ClientPCode As variant
Dim ClientPhone As variant
Dim ClientFax As variant
Dim Broker As variant
Dim BrokerName As String
Dim BrokerAddr1 As String
Dim BrokerAddr2 As String
Dim BrokerAddr3 As String
Dim BrokerAddr4 As String
Dim BrokerPCode As String
Dim BrokerPhone As String
Dim BrokerFax As String
Dim OurRef As String
Dim StatementDate As Date

Worksheets("Invoice").Activate

Selection = Worksheets("Selections").Range("b6")
Client1 = Worksheets("Selections").Range("c10")

If Selection = "By Client" Then

Dim LastBranch As Long
Worksheets("Branch Invoice").Activate
LastBranch = Cells(ThisWorkbook.Worksheets("Branch Invoice").Rows.Count, "B").End(xlUp).Row

For Each ClientRef In Worksheets("Branch Invoice").Range("B5:B" & LastBranch)

If ClientRef.Value <> "" Then

cl = ClientRef.Value

Worksheets("Invoice").Activate
Client = Application.VLookup(cl, Sheets("Data").Range("I:AC"), 2, False)
ClientAddr1 = Application.VLookup(cl, Sheets("Data").Range("I:AC"), 15, False)
ClientAddr2 = Application.VLookup(cl, Sheets("Data").Range("I:AC"), 16, False)
ClientAddr3 = Application.VLookup(cl, Sheets("Data").Range("I:AC"), 17, False)
ClientAddr4 = Application.VLookup(cl, Sheets("Data").Range("I:AC"), 18, False)
ClientPCode = Application.VLookup(cl, Sheets("Data").Range("I:AC"), 19, False)
ClientPhone = Application.VLookup(cl, Sheets("Data").Range("I:AC"), 20, False)
ClientFax = Application.VLookup(cl, Sheets("Data").Range("I:AC"), 21, False)

Broker = (Application.Index(Sheets("Data").Range("C:C"), Application.Match(cl, Sheets("Data").Range("I:I"), 0))) _
& (Application.Index(Sheets("Data").Range("D:D"), Application.Match(cl, Sheets("Data").Range("I:I"), 0)))

BrokerName = Application.WorksheetFunction.VLookup(Broker, Sheets("MasterList").Range("E:o"), 4, False)
BrokerAddr1 = Application.WorksheetFunction.VLookup(Broker, Sheets("MasterList").Range("E:o"), 5, False)
BrokerAddr2 = Application.WorksheetFunction.VLookup(Broker, Sheets("MasterList").Range("E:o"), 6, False)
BrokerAddr3 = Application.WorksheetFunction.VLookup(Broker, Sheets("MasterList").Range("E:o"), 7, False)
BrokerAddr4 = Application.WorksheetFunction.VLookup(Broker, Sheets("MasterList").Range("E:o"), 8, False)
BrokerPCode = Application.WorksheetFunction.VLookup(Broker, Sheets("MasterList").Range("E:o"), 9, False)
BrokerPhone = Application.WorksheetFunction.VLookup(Broker, Sheets("MasterList").Range("E:o"), 10, False)
BrokerFax = Application.WorksheetFunction.VLookup(Broker, Sheets("MasterList").Range("E:o"), 11, False)


LastRow = Cells(ThisWorkbook.Worksheets("Invoice").Rows.Count, "A").End(xlUp).Row + 1

Range("a" & LastRow) = Client
Range("a" & LastRow + 1) = ClientAddr1
Range("a" & LastRow + 2) = ClientAddr2
Range("a" & LastRow + 3) = ClientAddr3
Range("a" & LastRow + 4) = ClientAddr4
Range("a" & LastRow + 5) = ClientPCode
Range("a" & LastRow + 6) = "Phone: " & ClientPhone
Range("a" & LastRow + 7) = "Fax: " & ClientFax
Range("F" & LastRow) = BrokerName
Range("F" & LastRow + 1) = BrokerAddr1
Range("F" & LastRow + 2) = BrokerAddr2
Range("F" & LastRow + 3) = BrokerAddr3
Range("F" & LastRow + 4) = BrokerAddr4
Range("F" & LastRow + 5) = BrokerPCode
Range("F" & LastRow + 6) = "Phone: " & BrokerPhone
Range("F" & LastRow + 7) = "Fax: " & BrokerFax

LastRow = Cells(ThisWorkbook.Worksheets("Invoice").Rows.Count, "A").End(xlUp).Row + 5

Range("A" & LastRow) = "STATEMENT OF ACCOUNT"
Range("A" & LastRow & ":F" & LastRow).Merge
Range("A" & LastRow).HorizontalAlignment = xlCenter
Range("A" & LastRow + 1) = "Invoice" & vbCrLf & "Date"
Range("B" & LastRow + 1) = "Effective" & vbCrLf & "Date"
Range("C" & LastRow + 1) = "Risk" & vbCrLf & "Reference"
Range("D" & LastRow + 1) = "Transaction" & vbCrLf & "Type"
Range("E" & LastRow + 1) = "Policy" & vbCrLf & "Type"
Range("F" & LastRow + 1) = "Balance Due" & vbCrLf & "£"

'Find All Occurrences

Dim CellPos As Long
Dim rng As Range
Dim v As Variant

CellPos = LastRow + 2
Dim w1 As Worksheet
Dim w2 As Worksheet
Set w1 = Sheets("Branch Invoice")
Set w2 = Sheets("Invoice")
    w1.Activate
For Each rng In Intersect(Range("B:B"), ActiveSheet.UsedRange)
v = rng.Value

If InStr(v, Clientref) > 0 Then
rng.Offset(0, 1).Copy w2.Cells(CellPos, 1)
rng.Offset(0, 2).Copy w2.Cells(CellPos, 2)
rng.Offset(0, 3).Copy w2.Cells(CellPos, 3)
rng.Offset(0, 4).Copy w2.Cells(CellPos, 4)
rng.Offset(0, 5).Copy w2.Cells(CellPos, 5)
rng.Offset(0, 6).Copy w2.Cells(CellPos, 6)
CellPos = CellPos + 1
End If
Next rng

Worksheets("Invoice").Activate

LastRow2 = Cells(ThisWorkbook.Worksheets("Invoice").Rows.Count, "F").End(xlUp).Row

Range("F" & LastRow2 + 1) = WorksheetFunction.Sum(Range("F" & LastRow & ":F" & LastRow2))
Range("F" & LastRow2 + 1).NumberFormat = "£#,##0.00"

Range("E" & LastRow2 + 1) = "TOTAL DUE"
End if
Next ClientRef
End If
End Sub
Sub-CreateStatements()
将所选内容设置为字符串
最后一排一样长
暗淡的最后一行2一样长
Dim Client1作为字符串
Dim ClientRef作为变体
Dim客户端作为变体
Dim ClientAddress1作为变体
Dim ClientAddress2作为变体
Dim ClientAddress3作为变体
Dim ClientAddress4作为变体
Dim ClientPCode作为变体
Dim ClientPhone作为变体
Dim ClientFax作为变体
Dim Broker作为变体
模糊的断线名称作为字符串
Dim BrokerADR1作为字符串
Dim BrokerADR2作为字符串
Dim BrokerADR3作为字符串
Dim BrokerADR4作为字符串
Dim BrokerPCode作为字符串
暗色断线电话线
Dim BrokerFax作为字符串
将OurRef设置为字符串
Dim语句日期为日期
工作表(“发票”)。激活
选择=工作表(“选择”)。范围(“b6”)
Client1=工作表(“选择”)。范围(“c10”)
如果选择=“按客户”,则
长得和树枝一样长
工作表(“分公司发票”)。激活
LastBranch=单元格(ThisWorkbook.Worksheets(“分行发票”).Rows.Count,“B”).End(xlUp).Row
对于工作表中的每个客户(“分支机构发票”)。范围(“B5:B”和LastBranch)
如果ClientRef.Value为“”,则
cl=ClientRef.值
工作表(“发票”)。激活
Client=Application.VLookup(cl,表格(“数据”)。范围(“I:AC”),2,假)
ClientAddr1=Application.VLookup(cl,表格(“数据”)。范围(“I:AC”),15,假)
ClientAddr2=Application.VLookup(cl,表格(“数据”)。范围(“I:AC”),16,假)
ClientAddr3=Application.VLookup(cl,表格(“数据”)。范围(“I:AC”),17,假)
ClientAddr4=Application.VLookup(cl,表格(“数据”)。范围(“I:AC”),18,假)
ClientPCode=Application.VLookup(cl,表格(“数据”)。范围(“I:AC”),19,假)
ClientPhone=Application.VLookup(cl,表(“数据”)。范围(“I:AC”),20,假)
ClientFax=Application.VLookup(cl,表格(“数据”)。范围(“I:AC”),21,假)
Broker=(Application.Index(Sheets(“Data”).Range(“C:C”)、Application.Match(cl、Sheets(“Data”).Range(“I:I”)、0)))_
&(应用索引(表格(“数据”).范围(“D:D”)、应用匹配(cl、表格(“数据”).范围(“I:I”)、0)))
BrokerName=Application.WorksheetFunction.VLookup(Broker,Sheets(“MasterList”).Range(“E:o”),4,False)
BrokerAddr1=Application.WorksheetFunction.VLookup(Broker,Sheets(“MasterList”).Range(“E:o”),5,False)
BrokerAddr2=Application.WorksheetFunction.VLookup(Broker,Sheets(“MasterList”).Range(“E:o”),6,False)
BrokerAddr3=Application.WorksheetFunction.VLookup(Broker,Sheets(“MasterList”).Range(“E:o”),7,False)
BrokerAddr4=Application.WorksheetFunction.VLookup(Broker,Sheets(“MasterList”).Range(“E:o”),8,False)
BrokerPCode=Application.WorksheetFunction.VLookup(Broker,Sheets(“MasterList”).Range(“E:o”),9,False)
BrokerPhone=Application.WorksheetFunction.VLookup(Broker,Sheets(“MasterList”).Range(“E:o”),10,False)
BrokerFax=Application.WorksheetFunction.VLookup(Broker,Sheets(“MasterList”).Range(“E:o”),11,False)
LastRow=单元格(ThisWorkbook.Worksheets(“发票”).Rows.Count,“A”)。结束(xlUp)。行+1
范围(“a”&LastRow)=客户端
范围(“a”&LastRow+1)=客户端地址1
范围(“a”&LastRow+2)=客户端地址2
范围(“a”&LastRow+3)=客户端地址3
范围(“a”&LastRow+4)=客户端地址4
范围(“a”&LastRow+5)=客户端代码
范围(“a”&LastRow+6)=“电话:”&ClientPhone
范围(“a”&LastRow+7)=“传真:&ClientFax”
范围(“F”和最后一行)=BrokerName
范围(“F”&LastRow+1)=BrokerAddr1
范围(“F”&LastRow+2)=断开的DR2
范围(“F”&LastRow+3)=BrokerADR3
范围(“F”&LastRow+4)=BrokerADR4
范围(“F”&LastRow+5)=BrokerPCode
范围(“F”&LastRow+6)=“电话:&BrokerPhone”
范围(“F”&LastRow+7)=“传真:&BrokerFax”
LastRow=单元格(ThisWorkbook.Worksheets(“发票”).Rows.Count,“A”)。结束(xlUp)。行+5
范围(“A”和最后一行)=“对账单”
范围(“A”&LastRow&“:F”&LastRow)。合并
范围(“A”和最后一行)。水平对齐=xlCenter
范围(“A”&LastRow+1)=“发票”&vbCrLf&“日期”
范围(“B”和LastRow+1)=“生效”和vbCrLf&“日期”
范围(“C”和LastRow+1)=“风险”和vbCrLf&“参考”
范围(“D”和LastRow+1)=“事务”和vbCrLf&“类型”
范围(“E”和LastRow+1)=“策略”和vbCrLf&“类型”
范围(“F”和最后一行+1)=“到期余额”和vbCrLf&“英镑”
'查找所有事件
昏暗的牢房和长长的牢房一样
变暗rng As范围
Dim v作为变体
CellPos=LastRow+2
将w1标注为工作表
尺寸w2作为工作表
w1组=表格(“分公司发票”)
设置w2=图纸(“发票”)
w1.激活
对于Intersect中的每个rng(范围(“B:B”)、ActiveSheet.UsedRange)
v=平均值
如果InStr(v,Clientref)>0,则
rng.偏移量(0,1)。复制w2.单元格(CellPos,1)
rng.偏移量(0,2).复制w2.单元格(CellPos,2)
rng.偏移量(0,3).复制w2.单元格(CellPos,3)
rng.偏移量(0,4).复制w2.单元格(CellPos,4)
rng.偏移量(0,5)。复制w2.单元格(CellPos,5)
rng.偏移量(0,6)。复制w2.单元格(CellPos,6)
CellPos=CellPos+1
如果结束
下一个rng
工作表(“发票”)。激活
LastRow2=单元格(ThisWorkbook.Worksheets(“发票”).Rows.Count,“F”).End(xlUp).Row
范围(“F”&LastRow2+1)=工作表函数.Sum(范围(“F”&LastRow&“:F”&LastRow2))
范围(“F”和最后一行2+1)。NumberFormat=“£#,##0.00”
范围(“E”和最后一行2+1)=“到期总额”