Tiedostojen valitseminen VBA: n sisällä - Excel-vinkkejä

Renato Italiasta kysyy:

Kuinka voin avata työkirjan VBA: ssa valitsemalla luettelosta? Kun tallennan makron, se koodaa valitun tiedoston nimen makrossa.

VBA: ssa on komento GetOpenFileName. Se näyttää Tiedosto auki -ruudun. Voit siirtyä hakemistoon, valita tiedoston ja napsauttaa sitten Avaa. Tässä vaiheessa komento ei avaa tiedostoa, vaan vain välittää nimen takaisin ohjelmallesi. Tässä on esimerkki käytetystä koodista:

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

Roger kysyy:

Kuinka saan makron toimimaan ennen tiedoston sulkemista tai tallentamista?

Makro on syötettävä koodiruutuun, joka liittyy "ThisWorkbook" -ohjelmaan. Valitse oikeasta avattavasta valikosta BeforeClose tai BeforeSave.

Ken kirjoittaa:

Minulla on laskentataulukon tapahtumankäsittelijä, joka silmukkaa, vähintään 16 kertaa. Mitä tapahtuu?

Kenin käsittelijä oli yksinkertainen - jos merkintä ei ollut numeerinen, se muuttaisi ison kirjaimen. Tässä on ongelma. Kun hän muutti merkinnän arvon isoksi, se on toinen laskentataulukon muutos ja tapahtuma käynnistyy uudelleen. Aina kun muutostapahtuma laukaisi, Ken vaihtoi laskentataulukkoa ja makroa kutsuttiin rekursiivisesti, kunnes puhelupinon muisti loppui.

Ratkaisu on keskeyttää tapahtumien väliaikainen suorittaminen, kun muutat arvon isoksi. Voit tehdä tämän muuttamalla Application.EnableEvents-arvon arvoksi False. Tässä on korjattu 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

Ison-Britannian Andy kysyy tämän päivän mielenkiintoisimman kysymyksen.

Minulla on VBA-rutiini yhdessä työkirjassa, joka luo useita muita työkirjoja. Haluaisin pystyä lisäämään dynaamisesti jokaiseen uuteen työkirjaan hyperlinkin, joka viittaa takaisin työkirjaan, joka on luonut uudet työkirjat.

Andy - tämä on hieno idea. Ilman hyötyä nähdäksesi koodisi, voin kuvitella jotain tällaista toimivan:

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

Mielenkiintoisia artikkeleita...