excel - هواوى - طريقة عرض محتويات الحافظة والتعامل معها




إكسيل فبا-كيف يمكنني مسح الحافظة على مصنف آخر في تطبيق آخر؟ (2)

خلفية:

لدي برنامج نصي يقوم بتنسيق البيانات الأولية وإلحاقه بنهاية مصنف التحليل الذي فتحته. يتم تشغيل البرنامج النصي من مصنف التحليل كما يتم تعبئة بيانات راو في كل مرة.

القضية:

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

كود بلدي حتى الآن:

Sub Data_Ready_For_Transfer()
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim rnglog As Range
    Dim lastrow As Range
    Dim logrange As Range
    Dim vlastrow As Range
    Dim vlastcol As Range
    Dim copydata As Range
    Dim pastecell As Range
    Dim callno As Range

    Set wb = GetObject("Book1")
    Set ws = wb.Worksheets("Sheet1")

    Application.ScreenUpdating = False

    'if we get workbook instance then
    If Not wb Is Nothing Then
        With wb.Worksheets("Sheet1")
            DisplayAlerts = False
            ScreenUpdating = False
            .Cells.RowHeight = 15
            Set rnglog = wb.Worksheets("Sheet1").Range("1:1").Find(What:="Log Date", LookAt:=xlPart, MatchCase:=False, SearchOrder:=xlByColumns, SearchDirection:=xlNext)
            Set lastrow = rnglog.EntireColumn.Find(What:="*", LookAt:=xlPart, MatchCase:=False, SearchOrder:=xlByRows, SearchDirection:=xlPrevious)
            Set logrange = wb.Worksheets("Sheet1").Range(rnglog, lastrow)
            rnglog.EntireColumn.Offset(0, 1).Insert
            rnglog.EntireColumn.Offset(0, 1).Insert
            rnglog.EntireColumn.Offset(0, 1).Insert
            rnglog.EntireColumn.TextToColumns Destination:=rnglog, DataType:=xlDelimited, _
                TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _
                Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
                :=Array(Array(1, 1), Array(2, 1), Array(3, 9)), TrailingMinusNumbers:=True
            rnglog.Value = "Log Date"
            rnglog.Offset(0, 1).Value = "Time"
            logrange.Offset(0, 2).FormulaR1C1 = "=WEEKNUM(RC[-2])"
            logrange.Offset(0, 2).EntireColumn.NumberFormat = "General"
            rnglog.Offset(0, 2).Value = "Week Number"
            logrange.Offset(0, 3).FormulaR1C1 = "=TEXT(RC[-3],""mmmm"")"
            logrange.Offset(0, 3).EntireColumn.NumberFormat = "General"
            rnglog.Offset(0, 3).Value = "Month"
            Set vlastrow = wb.Worksheets("Sheet1").Range("A:A").Find(What:="*", LookAt:=xlPart, MatchCase:=False, SearchOrder:=xlByRows, SearchDirection:=xlPrevious)
            Set vlastcol = vlastrow.EntireRow.Find(What:="*", LookAt:=xlPart, MatchCase:=False, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious)
            Set copydata = .Range("A2", vlastcol)
            copydata.Copy
        End With
        With ActiveWorkbook.Worksheets("RAW Data")
            Set pastecell = .Range("A:A").Find(What:="*", LookAt:=xlPart, MatchCase:=False, SearchOrder:=xlByRows, SearchDirection:=xlPrevious)
            Set callno = .Range("1:1").Find(What:="Call No", LookAt:=xlPart, MatchCase:=False, SearchOrder:=xlByColumns, SearchDirection:=xlNext)
            pastecell.Offset(1, 0).PasteSpecial xlPasteValues
            .Cells.RemoveDuplicates Columns:=5, Header:=xlYes
            Application.CutCopyMode = False
        End With
        wb.Close False
        Application.ScreenUpdating = True
        MsgBox "Done"
    End If
End Sub

اعتقدت أنني سوف تحصل على جولة القضية عن طريق إغلاق المصنف بيانات راو (أريد أن أفعل هذا على أي حال) ولكن أحصل على موجه كما البيانات الحافظة كبيرة نوعا ما لذلك هذا لا يعمل أيضا.


بما أن wb ينتمي إلى مثيل تطبيق آخر ، يجب عليك استخدام

wb.Application.CutCopyMode = False

في حين أن

Application.CutCopyMode = False

حيث يقوم wb.Application بإرجاع مثيل التطبيقات الذي ينتمي إليه المصنف wb.Application .


ما أقوم به هو مجرد نسخ أي خلية فارغة في بلدي أكتيفوركبوك مرة واحدة لقد لصق القيم التي قمت بنسخها في وقت سابق وأنا لا تحتاج إليها أي أكثر من ذلك - وهذا يحل محل البيانات الكبيرة في الحافظة مع سلسلة فارغة (لا شيء نسبيا) و يسمح لي لإغلاق المصنف عندما أحتاج إلى.

أنا أفهم هذا هو الحل بدلا من ذلك، لكنه يعمل في كل وقت.

حل آخر

ما يجب أن تحاول هو الحصول على MSForms DataObject ومحاولة وضعه في الحافظة

Dim clipboard As MSForms.DataObject
Set clipboard = New MSForms.DataObject

ومن ثم مسحه على النحو التالي:

clipboard.Clear

وإذا كان هذا لا يعمل، يمكنك دائما تعيين النص الحافظة لتفريغ

clipboard.SetText ""
clipboard.PutInClipboard




excel-vba