Failu atlase VBA ietvaros - Excel padomi

Renato no Itālijas jautā:

Kā es varu atvērt darbgrāmatu VBA, izvēloties no saraksta? Kad es ierakstīju makro, tas cietā veidā kodē atlasītā faila nosaukumu makro.

VBA ir komanda ar nosaukumu GetOpenFileName. Tajā tiek parādīts lodziņš File Open. Jūs varat pārvietoties uz direktoriju, atlasīt failu un pēc tam noklikšķiniet uz Atvērt. Šajā brīdī komanda neatver failu, tā vienkārši nodod nosaukumu atpakaļ jūsu programmai. Šeit ir izmantojamā koda piemērs:

Sub TestIt() NewFN = Application.GetOpenFilename(FileFilter:="Excel Files (*.xls), *.xls", Title:="Please select a file") If NewFN = False Then ' They pressed Cancel MsgBox "Stopping because you did not select a file" Exit Sub Else Workbooks.Open Filename:=NewFN End If End Sub

Rodžers jautā:

Kā es varu panākt, lai makro darbotos pirms faila aizvēršanas vai saglabāšanas?

Makro jāievada koda rūtī, kas saistīta ar "ThisWorkbook". Labajā nolaižamajā izvēlnē atlasiet BeforeClose vai BeforeSave.

Kens raksta:

Man ir darblapu notikumu apdarinātājs, kas veic savienojumus vismaz 16 reizes. Kas notiek?

Kena apdarinātājs bija vienkāršs - ja ieraksts nebūtu skaitlisks, tas mainītu ierakstu uz lielajiem burtiem. Šeit ir problēma. Kad viņš mainīja ieraksta vērtību uz lielajiem burtiem, tas ir vēl viena darblapas maiņa, un notikums atkal tiks aktivizēts. Katru reizi, kad izmaiņu notikums aktivizējās, Kens mainīja darblapu, un makro tika saukts rekursīvi, līdz zvanu kaudzei pietrūka atmiņas.

Risinājums ir īslaicīgi apturēt notikumu darbību, kamēr maināt vērtību uz lielajiem burtiem. To var izdarīt, mainot Application.EnableEvents vērtību uz False. Šeit ir labots makro:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Excel.Range) If Not IsNumeric(Target.Value) Then Application.EnableEvents = False Target.Value = UCase(Target.Value) Application.EnableEvents = True End If End Sub

Endijs no Lielbritānijas uzdod šīsdienas interesantāko jautājumu.

Man vienā darbgrāmatā ir VBA rutīna, kas izveido vairākas citas darbgrāmatas. Es gribētu, lai katrā jaunajā darbgrāmatā varētu dinamiski pievienot hipersaiti, kas norādīs atpakaļ uz darbgrāmatu, kas ģenerēja jaunās darbgrāmatas.

Endijs - tā ir forša ideja. Bez jūsu koda redzēšanas priekšrocības es varu iedomāties kaut ko līdzīgu:

Sub Testit() Creator = ActiveWorkbook.FullName '… . Andy's code to create the new workbook… . ActiveSheet.Hyperlinks.Add Anchor:=Range("A1"), Address:= _ Creator, TextToDisplay:="Click Here to Return to " & Creator End Sub

Interesanti raksti...