سؤال

عندي جدولين...عندما يتم تعديل أحدهما بطريقة معينة، أرغب في تشغيل ماكرو لتعديل الثاني بطريقة مناسبة.لقد قمت بالفعل بعزل الحدث الذي أحتاج إلى التصرف بناءً عليه (تعديل أي خلية في عمود معين)، ويبدو أنني لا أستطيع العثور على أي معلومات محددة حول الوصول إلى جدول بيانات آخر وتعديله (يوجد جدول البيانات هذا على شبكة LAN مختلفة شارك ايضا...ومع ذلك، يمكن للمستخدم الوصول إلى كليهما).

أي مساعدة ستكون عظيمة.تعتبر المراجع حول كيفية القيام بذلك أو شيء مشابه جيدة مثل عينات التعليمات البرمجية الملموسة.

هل كانت مفيدة؟

المحلول

في Excel، من المحتمل أن تقوم فقط بكتابة التعليمات البرمجية لفتح ورقة العمل الأخرى وتعديلها ثم حفظ البيانات.

يرى هذا البرنامج التعليمي لمزيد من المعلومات.

سأضطر إلى تعديل VBA الخاص بي لاحقًا، لذا تظاهر بأن هذا كود زائف، ولكن يجب أن يبدو كما يلي:

Dim xl: Set xl = CreateObject("Excel.Application")
xl.Open "\\the\share\file.xls"

Dim ws: Set ws = xl.Worksheets(1)
ws.Cells(0,1).Value = "New Value"
ws.Save

xl.Quit constSilent

نصائح أخرى

يمكنك فتح جدول بيانات في سطر واحد:

Workbooks.Open FileName:="\\the\share\file.xls"

والإشارة إليه باعتباره المصنف النشط:

Range("A1").value = "New value"

بعد اللعب بهذا لفترة من الوقت، وجدت أن رمز مايكل الزائف هو الأقرب، ولكن إليك كيفية القيام بذلك:

Dim xl As Excel.Application
Set xl = CreateObject("Excel.Application")
xl.Workbooks.Open "\\owghome1\bennejm$\testing.xls"
xl.Sheets("Sheet1").Select

ثم تلاعب بالورقة...ربما مثل هذا:

xl.Cells(x, y).Value = "Some text"

عند الانتهاء، استخدم هذه السطور للانتهاء:

xl.Workbooks.Close
xl.Quit

إذا تم إجراء تغييرات، سيُطلب من المستخدم حفظ الملف قبل إغلاقه.قد تكون هناك طريقة للحفظ تلقائيًا، ولكن هذه الطريقة أفضل في الواقع، لذا سأتركها كما هي.

شكرا لجميع التعليمات!

انسخ ما يلي في ملفك ThisWorkbook كائن لمشاهدة تغييرات محددة.في هذه الحالة عند زيادة قيمة رقمية إلى قيمة رقمية أخرى.

ملحوظة:سيكون عليك استبدال Workbook-SheetChange و Workbook-SheetSelectionChange مع الشرطة السفلية.السابق: Workbook_SheetChange و Workbook_SheetSelectionChange يتم الهروب من الشرطة السفلية في كود Markdown.

Option Explicit
Dim varPreviousValue As Variant ' required for IsThisMyChange() . This should be made more unique since it's in the global space.


Private Sub Workbook-SheetChange(ByVal Sh As Object, ByVal Target As Range)
  ' required for IsThisMyChange()
  IsThisMyChange Sh, Target
End Sub

Private Sub Workbook-SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
  '  This implements and awful way of accessing the previous value via a global.
  '  not pretty but required for IsThisMyChange()
  varPreviousValue = Target.Cells(1, 1).Value ' NB: This is used so that if a Merged set of cells if referenced only the first cell is used
End Sub

Private Sub IsThisMyChange(Sh As Object, Target As Range)
  Dim isMyChange As Boolean
  Dim dblValue As Double
  Dim dblPreviousValue As Double

  isMyChange = False

  ' Simple catch all. If either number cant be expressed as doubles, then exit.
  On Error GoTo ErrorHandler
  dblValue = CDbl(Target.Value)
  dblPreviousValue = CDbl(varPreviousValue)
  On Error GoTo 0 ' This turns off "On Error" statements in VBA.


  If dblValue > dblPreviousValue Then
     isMyChange = True
  End If


  If isMyChange Then
    MsgBox ("You've increased the value of " & Target.Address)
  End If


  ' end of normal execution
  Exit Sub


ErrorHandler:
  ' Do nothing much.
  Exit Sub

End Sub

إذا كنت ترغب في تغيير مصنف آخر بناءً على ذلك، أفكر في التحقق لمعرفة ما إذا كان المصنف مفتوحًا بالفعل أولاً...أو من الأفضل تصميم حل يمكنه تجميع جميع التغييرات وتنفيذها مرة واحدة.قد يكون تغيير جدول بيانات آخر باستمرار بناءً على استماعك لهذا الجدول مؤلمًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top