我有一个主体工作表(启动跟踪器),需要从数据库中进行更新。我已将数据库的提取放在相邻的工作表(LAT-主数据)上。
我想做的是,如果H,O,Q列的值相似,则它将替换(启动跟踪器)上从“ E”列到“ AL”的行,如果没有匹配项,我会希望将整个行添加到(启动跟踪器)工作表的末尾。
我已经有进行测试时正在运行的代码,但是现在看来似乎无法正常工作,而且我不知道为什么。
Option Explicit
Option Base 1
Dim Ttrak_concat, Tdata_concat, Derlig As Integer
Sub General_update()
Dim Cptr As Integer, D_concat As Object, Ref As String, Ligne As Integer, Lig As Integer
Dim Start As Single
Dim test 'for trials
Start = Timer
Application.ScreenUpdating = False
Call concatenate("LAT - Master Data", Tdata_concat)
Call concatenate("Launch Tracker", Ttrak_concat)
'collection
Set D_concat = CreateObject("scripting.dictionary")
For Cptr = 1 To UBound(Ttrak_concat)
Ref = Ttrak_concat(Cptr, 1)
If Not D_concat.exists(Ref) Then: D_concat.Add Ref, Ttrak_concat(Cptr, 2)
Next
'comparison between the sheets
Sheets("LAT - Master Data").Activate
For Cptr = 1 To UBound(Tdata_concat)
Ref = Tdata_concat(Cptr, 1) 'chaineIPR feuil data
Ligne = Tdata_concat(Cptr, 2) 'localisation sheet data
If D_concat.exists(Ref) Then
Lig = D_concat.Item(Ref) 'localisation sheet track
Else
Lig = Derlig + 1
End If
Sheets("LAT - Master Data").Range(Cells(Ligne, "E"), Cells(Ligne, "AL")).Copy _
Sheets("Launch Tracker").Cells(Lig, "E")
Next
Sheets("Launch Tracker").Activate
Application.ScreenUpdating = False
MsgBox "mise à jour réalisée en: " & Round(Timer - Start, 2) & " secondes"
End Sub
'---------------------------------------
Sub concatenate(Feuille, Tablo)
Dim T_coli, T_colp, T_colr, Cptr As Integer
Dim test
With Sheets(Feuille)
'memorizing columns H O Q
Derlig = .Columns("H").Find(what:="*", searchdirection:=xlPrevious).Row
T_coli = Application.Transpose(.Range("H3:H" & Derlig))
T_colp = Application.Transpose(.Range("O3:O" & Derlig))
T_colr = Application.Transpose(.Range("Q3:Q" & Derlig))
'concatenate for comparison
ReDim Tablo(UBound(T_colr), 2)
For Cptr = 1 To UBound(T_colr)
Tablo(Cptr, 1) = T_coli(Cptr) & " " & T_colp(Cptr) & " " & T_colr(Cptr)
Tablo(Cptr, 2) = Cptr + 2
Next
End With
End Sub
有人可以解决我的问题吗?
先感谢您 :)
编辑11:48
实际上,代码现在可以运行,但是它无法按我需要的方式工作。当三个列H,O和Q相同时,我想从LAT-主数据表更新我的工作表启动跟踪器上的信息。问题是运行宏后,我已经检查过,并且LAT-主数据表中存在的某些行没有添加到启动跟踪器表中。有人知道为什么吗?
阿加特人
类型不匹配意味着您为函数提供了类型错误的参数。在您的情况下,这意味着UBound
无法处理T_colr
或ReDim
无法处理UBound(T_colr)
。由于Ubound
始终返回整数,因此必须为T_colr
。
如果Derlig=3
然后Application.Transpose(.Range("Q3:Q" & Derlig))
将不会返回一个数组,但单个值(Double
,String
或其他)。那就是UBound
抛出错误的时候。
您还将收到错误的T_coli(Cptr)
etc。
为防止这种情况,您可以做的是Derlig = 3
单独检查是否有这种情况。
If Derlig = 3 Then
ReDim Tablo(1, 2)
Tablo(1, 1) = T_coli & " " & T_colp & " " & T_colr
Tablo(1, 2) = 3
Else
ReDim Tablo(UBound(T_colr), 2)
For Cptr = 1 To UBound(T_colr)
Tablo(Cptr, 1) = T_coli(Cptr) & " " & T_colp(Cptr) & " " & T_colr(Cptr)
Tablo(Cptr, 2) = Cptr + 2
Next Cptr
End If
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句