AMcoder - javascript, python, java, html, php, sql

Համատեքստային ընտրացանկը և ստեղնաշարի դյուրանցումը նույն մեթոդով տարբեր արդյունքներ են տալիս

Ես ունեմ vba sub («sub») excel 2013-ում, որը բացում է մեկ այլ աշխատանքային գիրք, կարդում է որոշ տվյալներ, վերադարձնում է այս տվյալները և փակում նոր բացված աշխատանքային գիրքը: Այս ենթակետը հնարավոր է գործարկել ստեղնաշարի դյուրանցման և համատեքստային ընտրացանկի մուտքի միջոցով:

Այս զանգը (սա «UTILS.sub» է) հիանալի աշխատում է.

' Add the sub-call to a new context menu entry
Call UTILS.addContextMenuEntry("Caption", 2556, "UTILS.sub")

Բայց այս զանգը չի անում.

' Add the sub-call to a new keyboard shortcut
App.OnKey "+^{M}", "UTILS.sub"

Եթե ​​ես զանգահարում եմ sub ստեղնաշարի դյուրանցմամբ, այն կոտրվում է առանց սխալի: Ինձ հաջողվել է մշակել հատուկ կոդային գիծ, ​​որտեղ այն կոտրվում է վրիպազերծման միջոցով.

'[...]

Application.ScreenUpdating = False

' Open the external Workbook
Set wbHandle = Workbooks.Open("wb.xls", ReadOnly:=True)
MsgBox "Debug"

'[...]

wb.xls-ը բացվում է (և ցուցադրվում), բայց MsgBox «Վրիպազերծումը»՝ ոչ: «Բաց» տողից հետո ոչինչ չի աշխատում, և այս տողից հետո ոչ մի բեկման կետ չի հարվածվի: Մեկ այլ տարօրինակ բան. եթե ես վրիպազերծում եմ sub-ի զանգը՝ այդ տողից առաջ ընդմիջման կետով, ամեն ինչ հիանալի է աշխատում:

Ինչպե՞ս ստիպել ենթակետին ճիշտ աշխատել՝ հաշվի չառնելով, թե այն կոչվել է համատեքստի ընտրացանկի մուտքագրմամբ կամ ստեղնաշարի դյուրանցմամբ:

20.09.2016

  • Կամ մի՛ ներառեք Shift ստեղնը դյուրանցման մեջ, կամ փորձարկեք այն կոդում, որը բացում է աշխատանքային գիրքը՝ jkp-ads.com/Articles/WorkbookOpenBug.asp 20.09.2016

Պատասխանները:


1

Ես ճշգրիտ վստահ չեմ, թե որն է այս վարքագծի պատճառը, բայց ես կասկածում եմ, որ ստեղնաշարի դյուրանցումների կամ համատեքստի ընտրացանկի միջոցով կանչված մակրոները իրականում փոխանցվում են Application.Runի կամ որևէ այլ բանի միջոցով, որը կարող է ներսից վերականգնել կատարման վիճակը:

Կարծես թե պարզ լուծումը կատարումն անցնելն է «փաթաթված» ենթակետի միջոցով.

Public Sub bar()
    foo
End Sub

Public Sub foo()
    Dim bar As Workbook
    Set bar = Workbooks.Open("C:\Book1.xls", ReadOnly:=True)
    MsgBox "foo"
End Sub

foo-ը ստեղնաշարի դյուրանցմամբ գործարկելու դեպքում չի ցուցադրվի հաղորդագրության տուփը, սակայն կցուցադրվի bar զանգահարելը:

20.09.2016

2

Ես ինքս եմ գտել իմ խնդրի պատասխանը՝ stackoverflow.com/questions/17409524/

Ըստ երևույթին, excel-ը չի կարող կառավարել «Workbooks.Open()»-մեթոդը, եթե ենթակետը կանչվում է ստեղնաշարի դյուրանցման միջոցով, որը ներառում է [SHIFT]-ստեղը: Լուծում. փոխարենը օգտագործեք «Workbooks.Add()»:

20.09.2016
  • Խիստ ճիշտ չէ. այն լավ կաշխատի այնքան ժամանակ, քանի դեռ չեք օգտագործում Shift ստեղնը դյուրանցման մեջ: 20.09.2016
  • Նոր նյութեր

    Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
    JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

    Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
    Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

    Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
    Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

    Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
    Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

    C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
    C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

    Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
    Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..