بناء جملة فلوكوب ومشكلات إدخال المستخدم
-
20-12-2019 - |
سؤال
أحاول إنشاء ماكرو يقارن اثنين من أوراق عمل المستخدم في وضع ثم ينقل الاختلافات إلى أوراق مختلفة اعتمادا على سبب اختلافها.
يطلب الرمز أولا إدخال أحدث البيانات ويفتح تلك الورقة.ثم يسأل عن موقع البيانات القديمة للمقارنة مع ولكن لا يفتحه.يضيف الأوراق اللازمة للنسخ إليها.
ثم يذهب إلى أسفل خلية عمود من خلية تبحث عن المسلسل مطابقة على كتاب العمل الثاني (وهذا هو أساسا للتأكد من أن مقارنة البيانات الصحيحة في حالة التنسيق هو خارج).بمجرد العثور على المسلسل المطابق ، فإنه يقارن المسلسل الثاني لكل من الإدخال واعتمادا على ما إذا كان مدخلاته المختلفة أو الجديدة في إحدى الأوراق.
القضية الرئيسية أواجه هو مع فلوكوب.هو وجود أخطاء متعددة 424 ، 1004 وتجميع أخطاء التعبير.أحتاج إلى القليل من التوجيه حول سبب وجود هذه المشكلات.لقد بحثت ووجدت الكثير عن الحاجة إلى وجود أقواس للإشارة إلى ملف ولكن عندما أتبع هذه التنسيقات بالضبط فإنه يلقي خطأ التعبير.
أي نصيحة هي موضع تقدير.
Sub Compare()
'Open workbooks
''Worksheet 1
Dim filter As String
Dim caption As String
Dim WB1FN As String
Dim WB1 As Workbook
filter = "Excel Sheets (*.xlsx),*.xlsx"
caption = "Please select newest equipment file"
MsgBox (caption)
WB1FN = Application.GetOpenFilename(filter, , caption)
If WB1FN = "False" Then
MsgBox "File not selected to import"
Exit Sub
End If
Set WB1 = Application.Workbooks.Open(WB1FN)
''Worksheet 2
Dim caption2 As String
Dim WB2FN As String
filter = "Excel Sheets (*.xlsx),*.xlsx"
caption2 = "Please select previous equipment file"
MsgBox (caption2)
WB2FN = Application.GetOpenFilename(filter, , caption)
If WB2FN = "False" Then
MsgBox "File not selected to import"
Exit Sub
End If
'Comparing data
''MS find and compare
Dim MS1 As String
Dim ESN1 As String
Dim ESN2 As String
Dim LastRow As Long
Dim i As Integer
Dim d As Integer
Dim n As Integer
Dim Filename As String
d = 4
n = 4
Set WB1 = ActiveWorkbook
'Create sheets
Sheets.Add(After:=ActiveWorkbook.Sheets(ActiveWorkbook.Sheets.Count)).Name = "A"
Sheets.Add(After:=ActiveWorkbook.Sheets(ActiveWorkbook.Sheets.Count)).Name = "B"
Sheets.Add(After:=ActiveWorkbook.Sheets(ActiveWorkbook.Sheets.Count)).Name = "C"
'Gets the last row number
ActiveWorkbook.Sheets(1).Activate
LastRow = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
For i = 4 To LastRow
''Assigning MS1,ES1,ES2
MS1 = Cells(i, 6)
ESN1 = Cells(i, 15)
ESN2 = Application.WorksheetFunction.VLookup(MS1, '[" & WB2FN & "]Sheet1'! [R3C6:R10000C15], 10, False)
''Compare ESN and copy data
If ESN2 <> ESN1 Then
cell.EntireRow.Copy Sheets(2).Cells(d, 1)
n = d + 1
ElseIf Application.WorksheetFunction.IsNA(ESN2) = "TRUE" Then
cell.EntireRow.Copy Sheets(4).Cells(n, 1)
n = n + 1
End If
Next i
'X find and copy
Dim OEM As String
ActiveWorkbook.Sheets(2).Activate
LastRow = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
n = 3
i = 3
For i = 3 To LastRow
''Check for X
OEM = Cells(i, 4)
If OEM = "x" Then
cell.EntireRow.Copy Sheets(3).Cells(n, 1)
n = n + 1
End If
Next i
MsgBox "Compare successful"
End Sub
المحلول
have brackets to reference a file
يمكنك فقط استخدام هذا النهج إذا كنت تقوم بتعيين صيغة لخلية أو نطاق.
مثال:
Dim myformula As String
myformula = "=VLOOKUP(" & MS1 & _
",'[" & WB2FN & "]Sheet1'! [R3C6:R10000C15], 10, False)"
Range("A1").Formula = myformula
ولكن إذا كنت تستخدم فبا ورقة عمل وظيفة, ، تحتاج إلى الوصول بطريقة أو بأخرى إلى قاعدة البيانات أو الجدول الذي تجلب البيانات منه في وقت التشغيل.وهذا يعني أن لديك لتمرير الكائنات على الحجج وليس سلاسل كما تفعل في أعلاه.
شيء من هذا القبيل:
'~~> the rest of your code before Vlookup here
Dim wb As Workbook
Dim mytable As Range
Set wb = Workbooks.Open(WN2FN, , True) '~~> read only, avoid errors when file in use
Set mytable = wb.Sheets("Sheet1").Range("F3:O10000")
On Error Resume Next '~~> to handle when Vlookup returns #N/A or errors out
ESN2 = Application.WorksheetFunction.VLookup(MS1, mytable, 5, 0)
If Err.Number <> 0 Then myvalue = CVErr(xlErrNA)
On Error GoTo 0 '~~> reset error handling to trap other errors
Debug.Print ESN2
أنا فقط قدمت الجزء حيث يمكنك استخدام فلوكوب ووركشيتفونكتيون.يمكنك استخدام بقية التعليمات البرمجية قبل ذلك.أساسا فوق التعليمات البرمجية:
- يعين الجدول المصدر إلى متغير وتمريرها مباشرة إلى فلوكوب الحجج.
- الاستخدامات فلوكوب عبر فبا ووركشيتفونكتيون لجلب البيانات.
لاحظ أويرن (على خطأ استئناف التالي) روتين و أوغ 0 (على خطأ انتقل الى 0).
في فبا عندما وظيفة ورقة العمل إرجاع خطأ (على سبيل المثال.#ن/أ ل فلوكوب) ، أخطاء التعليمات البرمجية خارج وتوقف التنفيذ.لا يوجد إيفيرور كما لدينا في صيغ ورقة العمل.لذلك تحتاج إلى التعامل معها باستخدام إجراءات معالجة الأخطاء.
لاحظ أيضا أنه من الأفضل تأهيل الكائنات التي تعمل عليها بشكل كامل.
هذا هو مكان جيد للبدء في تحسين الرموز الخاصة بك وتجنب أخطاء وقت التشغيل.