Доступ к форматированию VBA - PullRequest
       14

Доступ к форматированию VBA

2 голосов
/ 07 октября 2010

Привет всем, в конце концов мне удалось довольно хорошо интегрировать мою базу данных с Excel, но в конце после того, как я показал ее боссам, они попросили меня снова разработать формы и отчеты в Access.К счастью, это не заняло много времени, поэтому я сделал два интерфейса для одной базы данных.Но в конце концов это будет база данных с полным доступом, в которой будет использован только один бит интеграции с Excel;в основном метод электронных таблиц для перевода ежедневной цены сделки на акцию в Access.

Теперь я подошел к тому моменту, когда база данных практически готова для разделения и заполнения. (Каков наилучший способ решения этой проблемы?это, сначала заполнить или разделить сначала?)

Вопрос, который я задаю ниже:

Это может показаться довольно простым вопросом, но до сих пор мне не помогли с Googleили, может быть, я не использую правильные ключевые слова в своем поиске, поэтому я подумал, что лучше спросить здесь;Есть ли способ отформатировать числа, которые генерируются с помощью некоторого кода VBA и помещаются в новую таблицу в Access, чтобы они выглядели так:

Так, если это 1 000 000, то это будет выглядеть как 1 м или если это 10 000затем он выглядит как 10 тыс. Так что, в основном, если у него три 0, то это K. Если у него шесть 0, то это M

. Сначала я использовал VBA для форматирования чисел следующим образом:

ChangeInShare = Format(ChangeInShare, "#,##.00")

Но затем пришел запрос на сокращение некоторых чисел, чтобы отчёты выглядели аккуратнее.

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

Спасибо

Ответы [ 4 ]

3 голосов
/ 07 октября 2010

Вы можете использовать оператор по модулю, чтобы проверить, делится ли число на 1000000 или 1000, а затем заменить последние нули.

Возможно, эта функция указывает вам правильное направление:

Public Function fmt(val As Long) As String
  Dim result As String
  If val Mod 1000000 = 0 Then
    result = (val \ 1000000) & "M"
  ElseIf val Mod 1000 = 0 Then
    result = (val \ 1000) & "K"
  Else
    result = val
  End If
  fmt = result
End Function

Затем некоторые тестовые вызовы:

? fmt(471000)
471K
? fmt(4711)
4711
? fmt(4000000)
4M
? fmt(40000)
40K
2 голосов
/ 07 октября 2010

Hi Muffi D
в дополнение к vanjes приемлемо очень хороший ответ, есть еще одна идея: как насчет научной нотации?

Debug.Print FStr(10)
Debug.Print FStr(2000)
Debug.Print FStr(300000)
Debug.Print FStr(40000000)
Debug.Print FStr(5000000000#)
Debug.Print FStr(12)
Debug.Print FStr(2345)
Debug.Print FStr(345678)
Debug.Print FStr(45678901)
Debug.Print FStr(5678901234#)

Function FStr(ByVal d As Double) As String
   FStr = Format(d, "0.####E+0")
End Function

тогда вы получите:

1,0E+1
2,000E+3
3,E+5
4,E+7
5,E+9
1,2E+1
2,345E+3
3,4568E+5
4,5679E+7
5,6789E+9

если вам нужны двойные (или валютные), вы можете использовать ответ Vanjes, но вместо этого использовать функцию ModF:

Function ModF(ByVal value As Double, _
              ByVal div As Double) As Double
   ModF = value - (Int(value / div) * div)
End Function

Function fmtF(ByVal value As Double) As String
  Dim result As String
  If ModF(value, 1000000000) = 0 Then
    result = (value / 1000000000) & "G"
  ElseIf ModF(value, 1000000) = 0 Then
    result = (value / 1000000) & "M"
  ElseIf ModF(value, 1000) = 0 Then
    result = (value / 1000) & "K"
  Else
    result = value
  End If
  fmtF = result
End Function

относительно Oops

1 голос
/ 10 октября 2010

Вы можете разделить свою базу данных в любое время, прежде чем распространять ее среди своих пользователей, но я не знаю, что вы подразумеваете под «заполнением».Советы " страница для получения информации о разделении. См. Бесплатную утилиту Auto FE Updater , чтобы сделать распределение новых FE относительно безболезненным.

0 голосов
/ 14 октября 2010

Мне тоже было интересно;У меня есть CurrencyCode, который определяет тип валюты, в которой находится Компания;теперь все расчеты в VBA уже сделаны.Я хотел знать, есть ли способ написать оператор SQL, где, например;если CurrencyCode = GBP, то результирующее поле отображается как £ 23 млн вместо 23 млн и т. д. для всех различных валют, имеющихся в этом поле.

Это опять-таки, необходимо прямо сейчас жестко кодировать;единственное, если в будущем, если я не в компании, кто-то должен добавить компанию, у которой нет кода для этого;тогда каким будет способ борьбы?Нужно ли им иметь кого-то, кто должен знать о том, как использовать SQL или VBA и уметь меняться;для этого я предпочел бы делать это в SQL, если это возможно, потому что тогда я мог бы поместить это в руководство для базы данных, и SQL гораздо менее утомительно использовать, чем VBA для начинающих.

Результирующие значения должны быть водин и тот же столбец, поэтому все различные IF и Wheres должны быть частью одного и того же оператора SQL, это связано с наличием отчетов, в которых используется один столбец для разных компаний с разными валютами.

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...