Как я могу построить формулу для включения подстановочных символов в VBA [duplicate]

Вот несколько способов доступа к родительскому контексту внутри дочернего контекста -
  1. Вы можете использовать функцию bind().
  2. Хранить ссылку на контекст / внутри внутри другой переменной (см. пример ниже).
  3. Использовать функции ES6 Arrow .
  4. Изменить код / function design / architecture - для этого вы должны иметь команду над шаблонами проектирования в javascript.

1. Используйте функцию bind()

function MyConstructor(data, transport) {
    this.data = data;
    transport.on('data', ( function () {
        alert(this.data);
    }).bind(this) );
}
// Mock transport object
var transport = {
    on: function(event, callback) {
        setTimeout(callback, 1000);
    }
};
// called as
var obj = new MyConstructor('foo', transport);

Если вы используете underscore.js - http://underscorejs.org/#bind

transport.on('data', _.bind(function () {
    alert(this.data);
}, this));

2 Сохраните ссылку на контекст / внутри внутри другой переменной

function MyConstructor(data, transport) {
  var self = this;
  this.data = data;
  transport.on('data', function() {
    alert(self.data);
  });
}

3 Функция стрелки

function MyConstructor(data, transport) {
  this.data = data;
  transport.on('data', () => {
    alert(this.data);
  });
}
277
задан pnuts 17 December 2015 в 04:07
поделиться

12 ответов

Вы пытались сбежать с двойной кавычкой?

= "Maurice ""The Rocket"" Richard"
420
ответ дан longda 22 August 2018 в 22:05
поделиться
  • 1
    Это будет «двойная двойная кавычка»? :) – Jonathan Leffler 19 October 2008 в 18:54
  • 2
    Если вам нужна строка, состоящая только из двойной кавычки, вам нужно & quot; & quot; & quot; & quot; который я делаю двойной двойной двойной кавычки. – Mike Woodhouse 19 October 2008 в 20:46
  • 3
    Или квадратная кавычка :) – ChrisO 30 October 2011 в 05:59
  • 4
    Ха-ха действительно. Экономия времени. – woodykiddy 7 December 2011 в 04:31
  • 5
    +1 за то, что я смеюсь над удвоением котировок. – Mindwin 6 February 2013 в 21:30

Я использую функцию для этого (если в книге уже есть VBA).

Function Quote(inputText As String) As String
  Quote = Chr(34) & inputText & Chr(34)
End Function

Это из книги Сью Мозера «Программирование Microsoft Outlook». Тогда ваша формула будет:

="Maurice "&Quote("Rocket")&" Richard"

Это похоже на то, что опубликовано Dave DuPlantis .

7
ответ дан Community 22 August 2018 в 22:05
поделиться

Использовать chr (34) Код: Joe = "Привет," & amp; Chr (34) & amp; «Джо» & amp; Chr (34) ActiveCell.Value = Joe

Результат: Привет, «joe»

3
ответ дан Dave 22 August 2018 в 22:05
поделиться

В качестве альтернативы вы можете использовать функцию CHAR:

= "Maurice " & CHAR(34) & "Rocket" & CHAR(34) & " Richard"
134
ответ дан Dave DuPlantis 22 August 2018 в 22:05
поделиться
  • 1
    Это работает более последовательно для меня, чем "" Возможно, это просто потому, что у меня есть Mac Excel 2011 – Ivan 4 January 2013 в 02:29
  • 2
    @Ivanoats: Нет, это не Mac (с использованием Windows здесь) - эта работает более последовательно; в моем случае, конкатенирование с использованием & с двойной цитатой непосредственно перед или сразу после того, как амперсанд не работал, используя метод двойной двойной кавычки. – Amos M. Carpenter 24 June 2015 в 07:57
  • 3
    Работает более последовательно для меня, так как мне часто приходится заключать кавычки вокруг сложной строки, состоящей из нескольких конкатенированных полей с вкрапленной пунктуацией. В моем последнем случае, чтобы придумать что-то вроде этого: «NameOfLocation, Street Address, City, State Zip», – jamesnotjim 11 September 2015 в 14:23

будет работать для макросов с использованием .Formula = "=THEFORMULAFUNCTION("STUFF")", так что это будет выглядеть так: будет ли это работать для макросов с использованием .Formula = "=THEFORMULAFUNCTION(CHAR(34) & STUFF & CHAR(34))"

1
ответ дан EdChum 22 August 2018 в 22:05
поделиться

Возвращение пустой или нулевой строки (например, ""), чтобы сделать ячейку пустой, является обычной практикой в ​​формуле рабочего листа, но воссоздавая эту опцию при вставке формулы через диапазон . Formula ] или Range.FormulaR1C1 в VBA является громоздким из-за необходимости дублирования символов двойной кавычки в указанной строке.

Нативный рабочий лист Функция TEXT может дать тот же результат без использования кавычек.

'formula to insert into C1 - =IF(A1<>"", B1, "")
range("C1").formula = "=IF(A1<>"""", B1, """")"         '<~quote chars doubled up
range("C1").formula = "=IF(A1<>TEXT(,), B1, TEXT(,))"   '<~with TEXT(,) instead

На мой взгляд, используя TEXT(,) вместо "", очищает даже простую формулу, подобную той, что указана выше. Преимущества становятся все более значительными при использовании в более сложных формулах, таких как практика добавления пустой строки в VLOOKUP , чтобы избежать возврата нуля в ячейку, когда поиск приводит к ошибке или возвращает пустую строку на no-match с IFERROR .

'formula to insert into D1 - =IFERROR(VLOOKUP(A1, B:C, 2, FALSE)&"", "")
range("D1").formula = "=IFERROR(VLOOKUP(A1, B:C, 2, FALSE)&"""", """")"
range("D1").formula = "=IFERROR(VLOOKUP(A1, B:C, 2, FALSE)&TEXT(,), TEXT(,))"

Когда TEXT(,) заменит старый метод "" доставки пустой строки, вы можете перестать использовать счеты, чтобы определить есть ли у вас правильное число символов кавычек в строке формулы.

1
ответ дан Jeeped 22 August 2018 в 22:05
поделиться
="Maurice "&"""TheRocker"""&" Richard"
0
ответ дан Karthick Gunasekaran 22 August 2018 в 22:05
поделиться

Есть еще один способ, хотя больше для «Как я могу построить следующую строку в формуле Excel:« Морис »Ракета« Ричард »« чем «Как создать строки, содержащие двойные кавычки в формулах Excel?», что просто используйте две одинарные кавычки:

Слева находится Calibri, отрезанный от листа Excel, а справа - отрезок от окна VBA. По моему мнению, побег, как упоминалось в @YonahW, побеждает «руки вниз», но две одиночные кавычки больше не печатаются, чем два удвоения, и разница в VBA достаточно очевидна без дополнительных нажатий клавиш, хотя, возможно, не заметна в электронной таблице.

20
ответ дан pnuts 22 August 2018 в 22:05
поделиться
  • 1
    Если бы это было правдой, то просьба уточнить результат = concatenate («a» «b»). Согласно вашему наблюдению, результатом будет «b. Это не тот случай. Фактически это выражение даже не будет принято Excel. – whaefelinger 20 May 2015 в 15:11
  • 2
    вы забыли запятую – KiwiSteve 21 February 2016 в 20:42
  • 3
    Внешние кавычки в вашем примере - это только начало и конец строки. & Quot; & Quot; создает символ кавычки, а не «& quot;». – Ben I. 13 October 2016 в 15:13

Функция VBA

1) .Formula = "=" "THEFORMULAFUNCTION" "& ​​amp; (CHAR (34) & amp;" "STUFF" & amp; CHAR (34)) "

2) .Formula = "THEFORMULAFUNCTION" "STUFF" ""

Первый метод использует vba для записи формулы в ячейке, которая приводит к вычисленному значению:

 THEFORMULAFUNCTION "STUFF"

Второй метод использует vba для записи строки в ячейке, которая приводит к значению:

 THEFORMULAFUNCTION "STUFF"

Excel Результат / Формула

1) = "THEFORMULAFUNCTION" & amp; CHAR (34) & amp; "STUFF" & CHAR (34))

2) ФУНКЦИОНАЛЬНОСТЬ "STUFF"

0
ответ дан Sam 22 August 2018 в 22:05
поделиться

Если вам нужно сделать это с помощью JSON:

=CONCATENATE("'{""service"": { ""field"": "&A2&"}}'")
5
ответ дан tandy 22 August 2018 в 22:05
поделиться
  • 1
    Спасибо! Это полностью помогло мне! Я пытался правильно форматировать массив JSON в своих ячейках. – Brian C 30 December 2015 в 22:38
  • 2
    Спасибо, только то, что мне нужно :) – JimiSweden 29 November 2016 в 08:58

Конкатенация " как отдельная ячейка:

    A |   B   | C | D
1   " | text  | " | =CONCATENATE(A1; B1; C1);

D1 displays "text"
0
ответ дан Zon 22 August 2018 в 22:05
поделиться
20
ответ дан pnuts 5 November 2018 в 19:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: