Избор датотека унутар ВБА - Екцел савети

Ренато из Италије пита:

Како могу да отворим радну свеску у ВБА бирајући са листе? Када снимим макро, он кодира име изабране датотеке у макроу.

У ВБА постоји наредба која се зове ГетОпенФилеНаме. Приказује поље Отвори датотеку. Можете доћи до директоријума, одабрати датотеку, а затим кликнути на Отвори. У овом тренутку, команда не отвара датотеку, већ само враћа име вашем програму. Ево примера кода који се користи:

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

Роџер пита:

Како могу да покренем макронаредбу пре него што се датотека затвори или сачува?

Макро треба унети у окно кода повезано са „ТхисВоркбоок“. Из десног падајућег менија одаберите БефореЦлосе или БефореСаве.

Кен пише:

Имам обрађивач догађаја на радном листу који се петља, најмање 16 пута. Шта се догађа?

Кенов руковатељ био је једноставан - ако унос није нумерички, променио би унос у велика слова. Ево проблема. Када је вредност уноса променио у велика слова, то је још једна промена радног листа и догађај би се поново покренуо. Сваки пут кад би се догађај промене покренуо, Кен би променио радни лист и макро би се рекурзивно позивао, док стеку позива није понестало меморије.

Решење је привремено зауставити покретање догађаја док вредност мењате у велика слова. То можете учинити променом вредности Апплицатион.ЕнаблеЕвентс у Фалсе. Ево исправљеног макронаредбе:

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

Анди из Велике Британије поставља најзанимљивије питање данас.

Имам ВБА рутину у једној радној свесци која ствара неколико других радних књига. Желео бих да могу динамички да додам хипервезу у сваку нову радну свеску која ће се усмеравати на радну свеску која је генерисала нове радне свеске.

Анди - ово је супер идеја. Без користи од гледања вашег кода, могу да замислим да би овако нешто функционисало:

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

Занимљиви Чланци...