Вопросы с тегами [vba]

465

голосов
13

ответ
228.2k

Просмотры

Как избежать использования Выберите в Excel VBA

Я много слышал о понятном отвращении использования .select в Excel VBA, но я уверен в том, как избежать его использования. Я нахожу, что мой код будет более пригодными для повторного использования, если бы я был в состоянии использовать переменные вместо выбора функций. Тем не менее, я не знаю, как относиться к вещам (как ActiveCell и т.д.), если не используется Select. Я нашел эту статью на диапазоны и этот пример о преимуществах использования не выбрать, но не может найти что-нибудь о том, как?
BiGXERO
448

голосов
6

ответ
650.4k

Просмотры

Как использовать регулярные выражения (Regex) в Microsoft Excel как в ячейке и петлях

Как я могу использовать регулярные выражения в Excel и воспользоваться мощной сеткой в ​​Excel, как настроить для работы с данными? В-клеточной функции, чтобы вернуть подходящий шаблон или заменить значение в строке. Суб к петле через колонку данных и экстракт совпадает с соседними клетками. Что установки необходимо? Какие специальные символы Excel для регулярных выражений? Я понимаю, Regex не является идеальным для многих ситуаций (Использовать или не использовать регулярные выражения?), Так как Excel можно использовать Left, Mid, Right, команды типа Инстра для подобных манипуляций.
Portland Runner
410

голосов
22

ответ
927.8k

Просмотры

Есть ли способ взломать пароль на проекте Excel VBA?

Я попросил обновить некоторые макросы Excel 2003, но проекты VBA защищен паролем, и кажется, что есть недостаток документации ... никто не знает пароли. Есть ли способ удаления или взлома пароля на проекте VBA?
Jonathan Sayce
259

голосов
8

ответ
539.5k

Просмотры

Как комментировать и раскомментировать блоки кода в офисе редактора VBA

В редакторе VBA в Office (ALT + F11), как вы прокомментируете или раскомментировать блок кода?
RemarkLima
239

голосов
2

ответ
317.7k

Просмотры

Где VBA Debug.Print войти в?

Где выходные сообщения Debug.Print?
234

голосов
9

ответ
245.5k

Просмотры

Есть ли VBA есть структура словаря?

Есть ли VBA структуру словарь? Как KeyValue массив?
223

голосов
4

ответ
632.2k

Просмотры

Как вернуть результат из функции VBA

Как вернуть результат из функции? Например: тест Public Function () As Integer возвращение 1 End Function Это дает ошибку компиляции. Как сделать эту функция возвращает целое число?
Mike
202

голосов
6

ответ
523.4k

Просмотры

Перебор файлов в папке с помощью VBA?

Я хотел бы Переберите файлы из каталога с помощью VBA в Excel 2010. В цикле, мне потребуется имя файла и дату, в которой файл был отформатированный. Я закодирован следующий, не работает нормально, если папка имеет не более 50 файлов, в противном случае это невероятно медленно (мне это нужно для работы с папками с> 10000 файлов). Единственная проблема этого кода является то, что операция просмотра file.name занимает очень много времени. Код, который работает, но waaaaaay слишком медленно (15 секунд на 100 файлов): Sub LoopThroughFiles () Dim MyObj As Object, MySource как объект, файл как вариант Set MySource = MyObj.GetFolder ( "C: \ testfolder \") для каждого файла В MySource.Files Если InStr (file.name, "тест")> 0 Then MsgBox "найдено" Exit Sub End If Следующий файл End Sub Проблема решена: Моя проблема была решена с помощью раствора ниже, используя Dir определенным образом (20 секунд для 15000 файлов) и для проверки штампа времени с помощью команды FileDateTime. Принимая во внимание еще один ответ из ниже 20 секунд уменьшены до менее чем за 1 секунду.
tyrex
197

голосов
9

ответ
158.5k

Просмотры

Разница между Visual Basic 6.0 и VBA

Какая разница между двумя. Я всегда думал, что VBA несколько «калека» версии VB, но когда друг спросил меня другой день, когда я понятия не имел, что фактические различия. Кроме того, при использовании, например, Excel, является то, что VB или VBA?
Thomas Geritzma
189

голосов
4

ответ
667.9k

Просмотры

Проверьте, если строка содержит другую строку

Я хочу, чтобы найти, если строка содержит «» (запятая) в нем. Есть ли у нас какой-либо другой вариант, кроме чтения полукокса-на-полукокса?
krishna
148

голосов
12

ответ
93.8k

Просмотры

Ошибка при нахождении последнего использования ячейки в VBA

Когда я хочу, чтобы найти последнее использованное значение ячейки, я использую: Dim LastRow As Long LastRow = Range ( «E4: E48»). End (xlDown) .Row Debug.Print LastRow Я получаю неправильный вывод, когда я ставлю один элемент в клетку. Но когда я кладу больше, чем одно значение в ячейке, выход правильно. В чем причина этого?
james
138

голосов
2

ответ
659.2k

Просмотры

Excel VBA - выход для цикла

Я хотел бы выйти из My цикл, когда состояние внутри выполнено. Как я могу выйти из My цикла, когда, если условие было выполнено? Я думаю, что какой-то выход в конце моего, если заявление, но не знаю, как это будет работать. Dim I As Long Для я = 1 К 50 Range ( "B" и я) .Select Если Range ( "B" и я) .Value = "Код" Тогда Dim темп As Long Темп = я End If Next я Range (» A1: Z»и темп - 1) .EntireRow.Delete Сдвиг: = xlToLeft
CustomX
137

голосов
5

ответ
172.2k

Просмотры

What is the difference between .text, .value, and .value2?

Я не прошу о помощи с любым сценарием, но мой вопрос разъяснений. В последнее время я делал много VB сценариев в Excel, так что я на самом деле имея в виду Excel в этом вопросе. В чем разница между .text, .value и .value2? Например, когда я должен использовать target.text, target.value и target.value2? Я никогда не использовал опцию value2, но все-таки хотелось бы знать, что она используется. Иногда, если я использую .text это дает мне ошибку, и мне нужно использовать .Value, когда я только проверять или манипулировать текст внутри ячейки. Но иногда, когда я думаю, что я должен использовать .value я получаю сообщение об ошибке, и мне нужно использовать .text. Обычно он принимает либо или без проблем, но иногда это делает разницу. Я знаю, что должна быть какая-то логика в этом, но я не могу показаться, чтобы выяснить это. Я также обнаружил, что если вы просто оставить его в качестве цели без указания. текст или .value он сначала будет работать, но потом что-то, что кто-то будет в конечном итоге привести сценарий к ошибкам, так что всегда лучше использовать .something на нем. Я предполагаю, что я прошу, если кто-то может дать мне какие-то директивы, эмпирическое правило, о том, как правильно использовать каждый из них, и когда он должен быть использован. Спасибо за объяснение, ребята. Я отчасти понимаю лучше. Они оба хорошие объяснения. Ниже крохотный пример некоторых из моего кода, который делает работу. Я подумал, что это должно быть target.text, но это будет ошибка поэтому, когда я использовал target.value он работал. Если LCase (Target.Value) = LCase ( «HLO») И Target.Column = 15 Тогда Target.Value = «Высший уровень перелива» End If я все еще немного смущен, потому что, когда я думаю о стоимости или значение2, особенно после того, как ваши ответы что вы предоставили, Я думаю, что они должны быть использованы только для чисел. Однако, в моем примере я говорю строго текст, который много чего мой сценарий относится к (тексту в ячейках, больше, чем числа).
Chris
136

голосов
7

ответ
183.8k

Просмотры

Что ключевое слово Set на самом деле в VBA?

Надеюсь, простой вопрос, но я бы очень хотел технический ответ на это! В чем разница между: I = 4 и Set я = 4 в VBA? Я знаю, что последний будет выдавать ошибку, но я не совсем понимаю, почему.
Jon Artus
134

голосов
3

ответ
131k

Просмотры

Могу ли я одновременно объявить и присвоить переменной в VBA?

Я новичок в VBA и хотите знать, если я могу преобразовать следующую декларацию и назначение в одну строку: Dim clientToTest As String = clientToTest clientsToTest (I) или Dim clientString как вариант clientString = Split (clientToTest)
Ian R. O'Brien
131

голосов
7

ответ
756.3k

Просмотры

Как преобразовать в целое число в строку в Excel VBA?

Как преобразовать целое значение «45» в значение строки «45» в Excel VBA?
What'sUP
121

голосов
5

ответ
206.6k

Просмотры

Как я могу отправить запрос POST HTTP на сервер из Excel с помощью VBA?

Что VBA код необходим для выполнения POST HTTP из электронной таблицы Excel?
Matthew Murdoch
118

голосов
11

ответ
117.3k

Просмотры

Excel VBA App останавливается спонтанно с сообщением «Выполнение кода было приостановлено»

Из того, что я могу видеть в Интернете, это довольно распространенная жалоба, но ответы кажутся более редкими. Проблема заключается в следующем: У нас есть ряд Excel VBA приложений, которые работают отлично на ряде машин пользователей. Однако на одной машине, они останавливаются на определенных строк кода. Это всегда один и та же линия, но эти строки, кажется, не имеют ничего общего друг с другом. Если нажать клавишу F5 (запуск) после остановки, приложение продолжается, так что это почти как точка разрыва была добавлена. Мы пытались выбрать опцию «удалить все разрывы» в меню и даже добавить перерыв и удалить его снова. У нас была эта проблема с одиночными приложений до и мы «bodged» его разрезанием код из модулей, компиляции и затем вставить его обратно в и т.д. Проблема теперь, кажется, относятся к самому Excel, а не один .xls, так что мы вновь немного не знает, как справиться с этим. Любая помощь будет с благодарностью получил :) Спасибо, Филипп Whittington
Phil Whittington
117

голосов
3

ответ
494.2k

Просмотры

Как получить путь к текущей рабочей таблицы в VBA?

Я написал макрос в качестве дополнения = в. И мне нужно, чтобы получить путь текущего рабочего листа, на котором она выполняется. Как мне это сделать? Как получить путь к файлу (только директории)?
110

голосов
27

ответ
338.7k

Просмотры

Функция для преобразования номера столбца в письмо?

Кто-нибудь есть функция Excel VBA, которая может вернуть букву (ы) столбец из номера? Например, ввод 100 должен возвращать CV.
mezamorphic
109

голосов
14

ответ
44.2k

Просмотры

Is VB really case insensitive?

Я не пытаюсь, чтобы начать здесь аргумент, но по какой-то причине это обычно указано, что Visual Basic чувствителен к регистру и C языки не являются (и как-то, что это хорошая вещь). Но вот мой вопрос: где именно Visual Basic чувствительны к регистру? Когда я печатаю ... Dim сс As String Dim SS As String ... в Visual Studio 2008 или Visual Studio 2010 IDE, второй имеет предупреждение «Локальная переменная SS уже объявлена ​​в текущем блоке». В VBA VBE, он не сразу пнуть ошибку, а просто автоматически исправляет дело. Могу ли я что-то пропустил этот аргумент, что Visual Basic не чувствительны к регистру? (Кроме того, если вы знаете или заботитесь, чтобы ответить, почему это будет плохо?) Почему я даже задать этот вопрос? Я использовал Visual Basic во многих из его диалектов на протяжении нескольких лет, иногда в качестве хобби, а иногда для программ малого бизнеса, связанных в рабочей группе. В последние шесть месяцев, я работал над большим проектом, гораздо больше, чем я ожидал. Большая часть исходного образца кода там находится в C #. У меня нет никакого жгучего желания узнать C #, но если есть вещи я пропавшие без вести на этом языке C # предлагает, что Visual Basic не (противоположный бы VB.NET предлагает XML-литералы), то я хотел бы чтобы узнать больше об этой функции. Таким образом, в данном случае, это часто утверждают, что языки C чувствительны к регистру, и это хорошо и Visual Basic чувствителен к регистру, и это плохо. Я хотел бы знать...
Todd Main
108

голосов
4

ответ
221k

Просмотры

Отображать миллисекунды в Excel

Я пытаюсь отобразить миллисекунды в качестве макроса Excel. У меня есть столбец целых чисел, которые проставлены в миллисекундах (например, 28095200 составляет 7: 48: 15,200 утра), и я хочу сделать новую колонку рядом с ней, который держит скользящее среднее и отображает время в течение чч: мм: сс 0,000 формат. Dim Cel As Range Set Cel = Range ( "B1") Темп = Application.Average (Range ( "A1: A2")) / 1000 мс = Round (темп - Int (темп), 2) * 1000 = Cel.Value строк .Format ((темп / 60/60/24), "чч: мм: сс") _ & "" & Strings.Format (мс, "# 000") Это отображается только "мм: ss.0" в клетке. Тем не менее, когда я нажимаю на ячейки, она показывает «чч: мм: сс» в строке формул. Почему часы не хватает? Как я могу показать часы, минуты, секунды и миллисекунды?
Evelyn
107

голосов
11

ответ
231.2k

Просмотры

Microsoft Excel Элементы управления ActiveX Отключено?

У меня есть несколько рабочих таблиц Excel, которые используют флажки ActiveX для управления определенной деятельности. Они работали в последнее время, но сегодня начали давать ошибки. Я был приведен в готовность к этой коллеге, но он по-прежнему работает на моем компьютере. Я проверил свою версию Excel против моего и его было новее. Я заметил, появились новые обновления для Windows, так что я сделал обновление. После того, как не я применил ожидающие обновления, теперь он больше не работает на моем компьютере. Я не могу проверить флажков ActiveX больше, и, как часть пытается отладить, оказывается, что я даже не могу добавить элемент управления ActiveX, любой лист, даже новый лист, больше. Я получаю диалоговое окно с сообщением об ошибке, которое говорит, «Не удается вставить объект.» (Я все еще могу добавить элементы формы, просто не ActiveX.) Кто-нибудь еще переживает это после недавнего обновления? Какие-либо предложения? Спасибо, Майк
Mike Pedersen
107

голосов
8

ответ
841.6k

Просмотры

Как объявить глобальную переменную в VBA?

Я написал следующий код: Function find_results_idle () Public iRaw As Integer Public iColumn As Integer iRaw = 1 iColumn = 1 И я получаю сообщение об ошибке: "недопустимый атрибут в Sub или Function" Вы знаете, что я сделал не так? Я пытался использовать Global вместо Public, но получил ту же проблему. Я пытался объявить саму функцию как `Public, но это тоже не помогло. Что мне нужно сделать, чтобы создать глобальную переменную?
Nimrod
102

голосов
2

ответ
36.4k

Просмотры

При редактировании Microsoft Office VBA, как я могу отключить всплывающее окно «Ошибка компиляции» сообщения?

При редактировании Microsoft Office VBA макрос или функцию, вы будете часто перемещать курсор из строки, что вы не закончили. Например, чтобы идти копировать то, что вы хотите, чтобы вставить в эту строку. Но, если эта частичная строка синтаксически не действует, редактор VBA прерывает работу по выскакивать сообщение «Ошибка компиляции», который должен быть удален с поля. Есть ли способ, чтобы отключить окно сообщения? Я считаю, это раздражает ... (Это происходит с Excel Visual Basic для приложений, Outlook VBA, Word VBA и т.д.)
Iain S
99

голосов
9

ответ
381k

Просмотры

Удаление файла в VBA

Использование VBA, как я могу: проверить, существует ли файл, и если да, то удалить его?
98

голосов
6

ответ
530.6k

Просмотры

Объявить и инициализировать массив строк в VBA

Это должно работать в соответствии с другим переполнение стека пост, но его не так: Dim arrWsNames As String () = { «значение1», «значение2»} Может кто-нибудь, дайте мне знать, что это не так?
Kairan
94

голосов
5

ответ
299.6k

Просмотры

Как использовать FileSystemObject в VBA?

Есть ли что-то, что мне нужно ссылаться? Как я могу использовать это: Dim FSO Как Новый FileSystemObject Dim FLD Как Папка Dim ц Как TextStream я получаю сообщение об ошибке, потому что она не признает эти объекты.
94

голосов
4

ответ
338.7k

Просмотры

Цикл по каждой строке диапазона в Excel

Это одна из тех вещей, что я уверен, что есть встроенная функция для (и я, возможно, хорошо было сказано, это в прошлом), но я почесал голову, чтобы помнить. Как петля I через каждую строку диапазона нескольких столбцов с помощью Excel VBA? Все учебники я искал вверх, кажется, только говоря уже о работе через одномерный диапазон ...
Margaret
89

голосов
1

ответ
314.9k

Просмотры

Вырваться из While ... Wend цикл

Я использую время ... Венд петлю из VBA. Тусклый счетчик, как Integer Хотя Истинный подсчет = кол + 1 Если счетчик = 10 Then «» Что должно быть заявление, чтобы разорвать While ... Wend цикл? «» Разрыв или выход Пока не работает EndIf Wend Я не хочу, чтобы использовать условие как `While подсчета
Priyank Thakkar
88

голосов
13

ответ
611k

Просмотры

Как сделать паузу на определенное количество времени? (Excel / VBA)

У меня есть рабочий лист Excel, который имеет следующий макрос. Я хотел бы, чтобы петля это каждый второй, но danged, если я могу найти функцию, чтобы сделать это. Разве это не возможно? Sub Macro1 () '' Macro1 Macro 'Do Calculate' Здесь я хочу ждать в течение одной секунды Loop End Sub
Keng
87

голосов
7

ответ
239.4k

Просмотры

Как подавить Обновление ссылки предупреждения?

Я пытаюсь написать скрипт, который открывает много файлов Excel. Я постоянно получаю приглашение: Эта книга содержит ссылки на другие источники данных. Я хочу, чтобы это сообщение не появлялось, так что мой сценарий может просто автоматически пройти через все рабочие книги без меня щелкать Не обновлять для каждого из них. В настоящее время я использую следующие: функцию getWorkbook (bkPath в виде строки) в качестве рабочей книги Application.EnableEvents = False Application.DisplayAlerts = False getWorkbook = Workbooks.Open (bkPath, updatelinks: = 0, только для чтения: = ложь) конец функции Однако, сообщение продолжает появляться. Как я могу подавить его? EDIT: Похоже, что это сообщение приходит на книги, которые нарушили ссылку; Я не видя Это учебное пособие содержит один или несколько ссылок, которые не могут быть обновлены сообщение, потому что я бы установить DisplayAlerts ложь. Эти учебные пособия связаны с эквивалентными файлов в папке на нашем сервере Windows, поэтому, когда файл соответствия удаляется из этой папки (которая происходит в рамках нашего бизнес-потока), связь перерывов. Можно ли подавить предупреждение, когда соединение разрывается? Кроме того, я использую Excel 2010.
sigil
84

голосов
4

ответ
174.2k

Просмотры

В чем разница между «Форма управления» и «управления ActiveX» в Excel 2010?

С помощью Microsoft Excel 2010, я заметил два вида управления, которые могут быть вставлены в документ: Элементы управления и элементы управления ActiveX. В чем разница между ними?
Rubens Mariuzzo
83

голосов
4

ответ
353.2k

Просмотры

Что является эквивалентом «! =» В Excel VBA?

Проблема заключается в том, что! = Не работает как функция в Excel VBA. Я хочу, чтобы иметь возможность использовать Если strTest! = «» Тогда вместо Если strTest = «» Тогда есть другой подход, чтобы сделать это, кроме! =? Моя функция для имитации! = Является Sub Test () Dim intTest As Integer Dim strTest As String intTest = 5 strTest = ПРМ (intTest) 'преобразовать диапазон ( "A" + strTest) = "5" I = 1 до 10 Cells ( я, 1) = я Если strTest = "" Тогда Cells (I, 1) = я End If Next End Sub я
What'sUP
82

голосов
6

ответ
277.3k

Просмотры

VBA - как условно пропустить для итерации цикла

У меня есть цикл над массивом. То, что я хочу сделать, это испытание для определенного условия в цикле и перейти к следующей итерации, если верно: при г = LBOUND (Schedule, 1) Для UBound (Schedule, 1) Если (Schedule (я, 1) <ReferenceDate) Тогда PrevCouponIndex = я Продолжить «*** Эта строка не компилируется, а также не "Next" End If DF = Application.Run ( "SomeFunction" ....) PV = PV + (DF * Купон / CouponFrequency) Далее я Знайте, что я могу сделать: Если (Schedule (я, 1) <ReferenceDate) Тогда Продолжить для но я хочу, чтобы иметь возможность производить запись последнего значения I в переменной PrevCouponIndex. Есть идеи? Спасибо
Richard H
82

голосов
5

ответ
367.6k

Просмотры

Как создать и записать в текстовый файл с помощью VBA

У меня есть файл, который вручную добавлен или изменен на основе входных данных. Поскольку большая часть содержимого повторяются в этом файле, только значения шестнадцатеричные меняются, я хочу, чтобы сделать его инструментом генерируется файл. Я хочу написать коды, которые гр будут напечатаны в этом текстовом файле. Что такое команда, чтобы создать файл .txt с помощью VBA, и как я пишу к нему
danny
81

голосов
5

ответ
172.5k

Просмотры

Как добавить вкладку пользовательских ленты с помощью VBA?

Я ищу способ, чтобы добавить пользовательскую вкладку в ленте Excel, которая будет носить несколько кнопок. Я случайно на некоторых ресурсах, посвященных его с помощью Google, но все выглядят хитроумными и зверски сложными. Что такое быстрый и простой способ сделать это? Я хотел бы новую вкладку, чтобы получить загружены, когда мой VBA загружается в Excel .. UPDATE: Я попробовал этот пример здесь, но получить «Требуется объект» ошибка на последней команды: Public Sub AddHighlightRibbon () Dim ribbonXml As String ribbonXml = "" ribbonXml = ribbonXml + "" ribbonXml = ribbonXml + "" ribbonXml = ribbonXml + "" ribbonXml = ribbonXml + "" ribbonXml = ribbonXml + "" ribbonXml = ribbonXml + "" ribbonXml = ribbonXml + "" ribbonXml = ribbonXml + " "
Jerome
81

голосов
5

ответ
117.6k

Просмотры

Как протестировать время работы в VBA кода?

Есть ли код в VBA можно обернуть функцию с, которая позволит мне знать, сколько времени потребовалось, чтобы бежать, так что я могу сравнить различные погонных времена функций?
Lance Roberts
81

голосов
6

ответ
332.4k

Просмотры

Как поместить двойные кавычки в строку в VBA?

Я хочу, чтобы вставить, если заявление в ячейку через VBA, который включает в себя двойные кавычки. Вот мой код:.. Worksheets ( "Лист1") Range ( "A1") Значение = "= IF (! Лист1 B1 = 0," "Лист1 В1!)" Из-за двойные кавычки я, имеющими проблемы с вставляя строка. Как обрабатывать двойные кавычки?
user793468
80

голосов
5

ответ
427.4k

Просмотры

автоматически выполнить макрос Excel на изменение ячейки

Как я могу автоматически выполнять первенствовать макрос каждый раз, когда значение в конкретной ячейке изменяется? Сейчас мой рабочий код: Private Sub Worksheet_Change (ByVal Target As Range) If Not Intersect (Target, Range ( "H5")) ничего после этого макроса End Sub, где "H5" является конкретная ячейка контролируется и Macro является имя макроса. Есть ли способ лучше?
namin