क्या कोई मुझे VBA में एक कोड लिखने में मदद कर सकता है जो तालिका को अद्यतन करता है, या दो कॉलमों में मानदंडों के आधार पर नए डेटा को जोड़ता है?
उदाहरण के लिए, एक नाम स्तंभ और एक परियोजना स्तंभ हो सकता है, और हम जांचना चाहते हैं कि क्या मार्क ने प्रोजेक्ट 1 पर काम किया। यदि मार्क ने प्रोजेक्ट 1 पर काम किया है, तो एक अलग स्प्रेडशीट से नए डेटा के साथ उसकी पंक्ति को अपडेट करें। यदि Mark ने अलग-अलग स्प्रेडशीट में प्रोजेक्ट 2 पर काम किया है, लेकिन वह मूल स्प्रेडशीट में प्रलेखित नहीं है, तो उस पंक्ति की जानकारी के साथ मार्क और प्रोजेक्ट 2 को जोड़ें। यदि बेटी ने प्रोजेक्ट 1 पर काम किया है, और मूल स्प्रेडशीट में यह जानकारी है, तो इस पंक्ति को अपडेट करें। यदि बेटी ने प्रोजेक्ट 2 पर काम किया, लेकिन मूल स्प्रेडशीट में यह जानकारी नहीं है, तो इसे एक नई पंक्ति के रूप में जोड़ें। इसलिए नाम और परियोजनाएं दोनों अलग-अलग संयोजनों के साथ, तालिका में कई बार दिखाई देंगे।
इसलिए विचार एक ही समय में दोनों स्तंभों की जांच करना है, और तदनुसार नए डेटा को अपडेट और संलग्न करना है।
यहाँ अब मेरे पास दोषपूर्ण कोड है:
Dim filename As String
Dim ManagerLEs As Workbook
Dim ProjectLEs As Workbook
Set ProjectLEs = ThisWorkbook
filename = Application.GetOpenFilename("Word files (*.xlsx),*.xlsx", , "Browse for file containing table to be imported")
If filename = Empty Then
Exit Sub
End If
Set ManagerLEs = Application.Workbooks.Open(filename)
Dim first_blank_row As Long
first_blank_row = Cells.SpecialCells(xlCellTypeLastCell).Offset(1, 0).Row
starting_row = 4
Dim r As Long
r = starting_row
Dim namefound As Range
Dim projectfound As Range
firstname = ManagerLEs.ActiveSheet.Range("a" & r).Value
projectname = ManagerLEs.ActiveSheet.Range("d" & r).Value
Do While firstname <> 0
Set namefound = Columns("a:a").Find(what:=firstname, LookIn:=xlValues, lookat:=xlWhole)
Set projectfound = Columns("d:d").Find(what:=projectname, LookIn:=xlValues, lookat:=xlWhole)
'look for current ticket number in main file
If (namefound Is Nothing And projectfound Is Nothing) Then
'add info to end of main file
For c = 1 To 57
ProjectLEs.Worksheets("Template").Cells(first_blank_row, c) = ManagerLEs.Worksheets("LEs").Cells(r, c)
first_blank_row = first_blank_row + 1
Next c
Else
'overwrite existing line of main file
For c = 1 To 57
ProjectLEs.Worksheets("Template").Cells(namefound.Row, c) = ManagerLEs.Worksheets("LEs").Cells(r, c)
Next c
End If
r = r + 1
firstname = ManagerLEs.ActiveSheet.Range("a" & r).Value
projectname = ManagerLEs.ActiveSheet.Range("d" & r).Value
Loop
धन्यवाद!