2010-10-07 23 views
2

Salut à tous, j'ai finalement réussi à intégrer ma base de données avec Excel, mais à la fin, après l'avoir montré aux patrons, ils m'ont demandé de développer les formulaires et les rapports dans Access. Cela n'a pas pris trop de temps heureusement, donc j'ai fini par faire deux frontaux pour une base de données back-end. Mais à la fin ce sera une base de données entièrement Access avec seulement un bit d'intégration Excel utilisé; fondamentalement la méthode de feuille de calcul de transfert pour transférer le prix de l'action de fin de la transaction quotidienne en accès.Accéder à la mise en forme VBA

Maintenant, je suis venu à un point où la base de données est à peu près prêt à être divisé et peuplée. (Quelle est la meilleure façon d'y parvenir, d'abord remplir ou de scission en premier?)

La question que je suis Cela peut sembler une question assez simple mais jusqu'à présent, je n'ai pas été aidé avec google ou peut-être que je n'utilise pas les bons mots clés dans ma recherche, donc je pensais que quel meilleur endroit pour demander alors ici; Existe-t-il un moyen de formater les nombres générés via un code VBA et placés dans une nouvelle table dans Access, pour les faire ressembler:

Donc si c'est 1 000 000 alors il apparaîtrait comme 1m ou si c'est 10 000 alors il apparaît comme 10k donc, fondamentalement, si elle a trois des 0 alors il est un K Si elle a six des 0 alors il est un M

J'ai utilisé un peu VBA d'abord pour formater les numéros de la manière suivante:

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

Mais la demande est venue de raccourcir certains nombres jusqu'à ma Les rapports semblent plus nets.

La table finale, prend les valeurs dans un format texte btw.

Merci

Répondre

3

Vous pouvez utiliser l'opérateur modulo pour vérifier si le nombre est divisible par 1000000 ou par 1000, puis remplacer les derniers zéros.

Peut-être que cette fonction vous dirige vers la droite:

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 

Puis quelques appels de test:

? fmt(471000) 
471K 
? fmt(4711) 
4711 
? fmt(4000000) 
4M 
? fmt(40000) 
40K 
+1

Merci Vanje, je vais l'essayer maintenant. – md85

2

Salut Muffi D
supplémentaire pour vanjes très bonne réponse acceptable il y a une autre idée: qu'en est-il de la notation scientifique?

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(56789#) 

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

vous obtiendrez:

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 

si vous avez besoin pour Doubles (ou devises) vous pouvez aller avec vanjes réponse, mais utiliser la modf fonction à la place:

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 

ce qui concerne Oops

+0

C'est aussi une bonne réponse, mais j'ai oublié de préciser dans mon article que la base de données devait être utilisée pour produire des rapports financiers, destinés à être utilisés en interne ou en externe. , où je travaille, ils le veulent donc c'est présentable à leurs clients. Merci Oups, vraiment bon à savoir à ce sujet de toute façon. :) – md85

1

Vous pouvez diviser votre base de données à tout moment avant de distribuer n à vos utilisateurs mais je ne sais pas ce que vous voulez dire par "peupler"."

Voir la page "Splitting your app into a front end and back end Tips" pour plus d'informations sur le partage .. Voir la Auto FE Updater utility libre de faire la distribution de nouveaux FEs relativement indolore

+0

Hey merci! Quand j'ai dit peupler, je voulais remplir certains tableaux qui ne peuvent être remplis directement à travers un formulaire. En effet, ces tables contiennent des données historiques sur le marché boursier, ainsi que des données sur le taux de change historique; ils seront mis à jour via le formulaire, mais lorsque les données initiales sont entrées, elles sont directement placées dans les tableaux via une feuille de calcul Excel en raison de la quantité de données réelles qui entrent en jeu. – md85

0

Je me demandais aussi,. J'ai un CurrencyCode qui définit quel type de devise, la Société est dans, maintenant tous les calculs dans VBA sont déjà fait.Je voulais savoir est-il un moyen d'écrire une déclaration SQL où par exemple, si le CurrencyCode = GBP alors le champ résultant est affiché comme £ 23m au lieu de 23m etc pour tous

Encore une fois, cela doit être codé en dur en ce moment, la seule chose est, si à l'avenir si je ne suis pas avec l'entreprise, quelqu'un doit ajouter une entreprise, qui n'a pas le code pour le faire; alors quel sera le moyen de traiter? Devront-ils avoir quelqu'un qui a besoin de savoir comment utiliser SQL ou VBA et être capable de changer? pour cela, je préférerais le faire en SQL si possible parce que je pourrais mettre cela dans un manuel pour la base de données et SQL est beaucoup moins difficile à utiliser que VBA pour les débutants. Les valeurs résultantes doivent être dans la même colonne, donc toutes les IF et Wheres différentes doivent faire partie de la même instruction SQL, à cause des rapports qui utilisent une seule colonne pour les différentes compagnies. avec des devises différentes.

Merci!

+0

Vous devrez peut-être seulement changer le format de la devise champ pour afficher la livre britannique. Et avoir un champ calculé dans la requête qui effectue la conversion de votre devise de base à la devise que vous souhaitez afficher. –